@react-aria/overlays 3.26.0 → 3.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/DismissButton.main.js.map +1 -1
  2. package/dist/DismissButton.module.js.map +1 -1
  3. package/dist/Overlay.main.js +1 -1
  4. package/dist/Overlay.main.js.map +1 -1
  5. package/dist/Overlay.mjs +2 -2
  6. package/dist/Overlay.module.js +2 -2
  7. package/dist/Overlay.module.js.map +1 -1
  8. package/dist/PortalProvider.main.js +5 -5
  9. package/dist/PortalProvider.main.js.map +1 -1
  10. package/dist/PortalProvider.mjs +4 -4
  11. package/dist/PortalProvider.module.js +4 -4
  12. package/dist/PortalProvider.module.js.map +1 -1
  13. package/dist/ariaHideOutside.main.js.map +1 -1
  14. package/dist/ariaHideOutside.module.js.map +1 -1
  15. package/dist/import.mjs +2 -2
  16. package/dist/main.js +2 -2
  17. package/dist/main.js.map +1 -1
  18. package/dist/module.js +2 -2
  19. package/dist/module.js.map +1 -1
  20. package/dist/types.d.ts +19 -12
  21. package/dist/types.d.ts.map +1 -1
  22. package/dist/useCloseOnScroll.main.js.map +1 -1
  23. package/dist/useCloseOnScroll.module.js.map +1 -1
  24. package/dist/useModal.main.js +4 -0
  25. package/dist/useModal.main.js.map +1 -1
  26. package/dist/useModal.mjs +4 -0
  27. package/dist/useModal.module.js +4 -0
  28. package/dist/useModal.module.js.map +1 -1
  29. package/dist/usePopover.main.js +1 -1
  30. package/dist/usePopover.main.js.map +1 -1
  31. package/dist/usePopover.mjs +1 -1
  32. package/dist/usePopover.module.js +1 -1
  33. package/dist/usePopover.module.js.map +1 -1
  34. package/dist/usePreventScroll.main.js.map +1 -1
  35. package/dist/usePreventScroll.module.js.map +1 -1
  36. package/package.json +12 -12
  37. package/src/DismissButton.tsx +2 -2
  38. package/src/Overlay.tsx +5 -5
  39. package/src/PortalProvider.tsx +13 -6
  40. package/src/ariaHideOutside.ts +1 -1
  41. package/src/index.ts +2 -1
  42. package/src/useCloseOnScroll.ts +1 -1
  43. package/src/useModal.tsx +8 -2
  44. package/src/usePopover.ts +1 -1
  45. package/src/usePreventScroll.ts +1 -1
package/src/useModal.tsx CHANGED
@@ -14,6 +14,7 @@ import {DOMAttributes} from '@react-types/shared';
14
14
  import React, {AriaAttributes, ReactNode, useContext, useEffect, useMemo, useState} from 'react';
15
15
  import ReactDOM from 'react-dom';
16
16
  import {useIsSSR} from '@react-aria/ssr';
17
+ import {useUNSAFE_PortalContext} from './PortalProvider';
17
18
 
18
19
  export interface ModalProviderProps extends DOMAttributes {
19
20
  children: ReactNode
@@ -36,7 +37,7 @@ const Context = React.createContext<ModalContext | null>(null);
36
37
  * subtree from screen readers. This is done using React context in order to account for things
37
38
  * like portals, which can cause the React tree and the DOM tree to differ significantly in structure.
38
39
  */
39
- export function ModalProvider(props: ModalProviderProps) {
40
+ export function ModalProvider(props: ModalProviderProps): ReactNode {
40
41
  let {children} = props;
41
42
  let parent = useContext(Context);
42
43
  let [modalCount, setModalCount] = useState(0);
@@ -100,7 +101,7 @@ function OverlayContainerDOM(props: ModalProviderProps) {
100
101
  * if a modal or other overlay is opened. Only the top-most modal or
101
102
  * overlay should be accessible at once.
102
103
  */
103
- export function OverlayProvider(props: ModalProviderProps) {
104
+ export function OverlayProvider(props: ModalProviderProps): ReactNode {
104
105
  return (
105
106
  <ModalProvider>
106
107
  <OverlayContainerDOM {...props} />
@@ -112,6 +113,7 @@ export interface OverlayContainerProps extends ModalProviderProps {
112
113
  /**
113
114
  * The container element in which the overlay portal will be placed.
114
115
  * @default document.body
116
+ * @deprecated - Use a parent UNSAFE_PortalProvider to set your portal container instead.
115
117
  */
116
118
  portalContainer?: Element
117
119
  }
@@ -126,6 +128,10 @@ export interface OverlayContainerProps extends ModalProviderProps {
126
128
  export function OverlayContainer(props: OverlayContainerProps): React.ReactPortal | null {
127
129
  let isSSR = useIsSSR();
128
130
  let {portalContainer = isSSR ? null : document.body, ...rest} = props;
131
+ let {getContainer} = useUNSAFE_PortalContext();
132
+ if (!props.portalContainer && getContainer) {
133
+ portalContainer = getContainer();
134
+ }
129
135
 
130
136
  React.useEffect(() => {
131
137
  if (portalContainer?.closest('[data-overlay-container]')) {
package/src/usePopover.ts CHANGED
@@ -106,7 +106,7 @@ export function usePopover(props: AriaPopoverProps, state: OverlayTriggerState):
106
106
  targetRef: triggerRef,
107
107
  overlayRef: popoverRef,
108
108
  isOpen: state.isOpen,
109
- onClose: isNonModal ? state.close : null
109
+ onClose: isNonModal && !isSubmenu ? state.close : null
110
110
  });
111
111
 
112
112
  usePreventScroll({
@@ -41,7 +41,7 @@ let restore;
41
41
  * restores it on unmount. Also ensures that content does not
42
42
  * shift due to the scrollbars disappearing.
43
43
  */
44
- export function usePreventScroll(options: PreventScrollOptions = {}) {
44
+ export function usePreventScroll(options: PreventScrollOptions = {}): void {
45
45
  let {isDisabled} = options;
46
46
 
47
47
  useLayoutEffect(() => {