diff --git a/.storybook/preview.js b/.storybook/preview.js index 5357d1c3ae5..580fde7af3f 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -20,7 +20,9 @@ export const parameters = { export const decorators = [ story => ( - {story()} + + {story()} + ), withProviderSwitcher diff --git a/packages/@react-spectrum/overlays/package.json b/packages/@react-spectrum/overlays/package.json index aa5e937bc90..c95eeac5976 100644 --- a/packages/@react-spectrum/overlays/package.json +++ b/packages/@react-spectrum/overlays/package.json @@ -38,7 +38,8 @@ "@react-stately/overlays": "^3.1.2", "@react-types/overlays": "^3.5.0", "@react-types/shared": "^3.7.0", - "react-transition-group": "^2.2.0" + "react-transition-group": "^4.4.1" + }, "devDependencies": { "@adobe/spectrum-css-temp": "3.0.0-alpha.1" diff --git a/packages/@react-spectrum/overlays/src/Modal.tsx b/packages/@react-spectrum/overlays/src/Modal.tsx index 2dacd78311a..13d64e66243 100644 --- a/packages/@react-spectrum/overlays/src/Modal.tsx +++ b/packages/@react-spectrum/overlays/src/Modal.tsx @@ -17,7 +17,7 @@ import {ModalProps} from '@react-types/overlays'; import modalStyles from '@adobe/spectrum-css-temp/components/modal/vars.css'; import {Overlay} from './Overlay'; import overrideStyles from './overlays.css'; -import React, {forwardRef, HTMLAttributes, ReactNode, RefObject} from 'react'; +import React, {forwardRef, HTMLAttributes, ReactNode, RefObject, useRef} from 'react'; import {Underlay} from './Underlay'; import {useModal, useOverlay, usePreventScroll} from '@react-aria/overlays'; @@ -33,12 +33,12 @@ function Modal(props: ModalProps, ref: DOMRef) { let {children, onClose, type, ...otherProps} = props; let domRef = useDOMRef(ref); let {styleProps} = useStyleProps(props); - let {overlayProps, underlayProps} = useOverlay(props, domRef); + let underlayRef = useRef(null); return ( - - + + ) { - let {children, isOpen, container, onEnter, onEntering, onEntered, onExit, onExiting, onExited} = props; + let {children, isOpen, container, onEnter, onEntering, onEntered, onExit, onExiting, onExited, nodeRef} = props; let [exited, setExited] = useState(!isOpen); let handleEntered = useCallback(() => { @@ -52,7 +52,8 @@ function Overlay(props: OverlayProps, ref: DOMRef) { onExited={handleExited} onEnter={onEnter} onEntering={onEntering} - onEntered={handleEntered}> + onEntered={handleEntered} + nodeRef={nodeRef}> {children} diff --git a/packages/@react-spectrum/overlays/src/Popover.tsx b/packages/@react-spectrum/overlays/src/Popover.tsx index 6f6c81c0a5a..d8789b76c8e 100644 --- a/packages/@react-spectrum/overlays/src/Popover.tsx +++ b/packages/@react-spectrum/overlays/src/Popover.tsx @@ -64,7 +64,7 @@ function Popover(props: PopoverProps, ref: DOMRef) { let {styleProps} = useStyleProps(props); return ( - + ) { let {children, onClose, isFixedHeight, isNonModal, ...otherProps} = props; let domRef = useDOMRef(ref); let {styleProps} = useStyleProps(props); - let {overlayProps, underlayProps} = useOverlay({...props, isDismissable: true}, domRef); + let underlayRef = useRef(null); return ( - - + + ) { return ( -
+
); } + +const _Underlay = React.forwardRef(Underlay); +export {_Underlay as Underlay}; diff --git a/packages/@react-spectrum/tooltip/src/TooltipTrigger.tsx b/packages/@react-spectrum/tooltip/src/TooltipTrigger.tsx index f69b2f6d9e3..023884a6ca8 100644 --- a/packages/@react-spectrum/tooltip/src/TooltipTrigger.tsx +++ b/packages/@react-spectrum/tooltip/src/TooltipTrigger.tsx @@ -66,7 +66,7 @@ function TooltipTrigger(props: SpectrumTooltipTriggerProps) { arrowProps, ...tooltipProps }}> - + {tooltip} diff --git a/packages/@react-types/overlays/src/index.d.ts b/packages/@react-types/overlays/src/index.d.ts index abdb5a79467..83e3969803d 100644 --- a/packages/@react-types/overlays/src/index.d.ts +++ b/packages/@react-types/overlays/src/index.d.ts @@ -10,7 +10,7 @@ * governing permissions and limitations under the License. */ -import {HTMLAttributes, ReactElement, ReactNode} from 'react'; +import {HTMLAttributes, MutableRefObject, ReactElement, ReactNode} from 'react'; import {StyleProps} from '@react-types/shared'; export type Placement = 'bottom' | 'bottom left' | 'bottom right' | 'bottom start' | 'bottom end' | @@ -71,10 +71,11 @@ export interface OverlayProps { onEntered?: () => void, onExit?: () => void, onExiting?: () => void, - onExited?: () => void + onExited?: () => void, + nodeRef: MutableRefObject } -export interface ModalProps extends StyleProps, OverlayProps { +export interface ModalProps extends StyleProps, Omit { children: ReactElement, isOpen?: boolean, onClose?: () => void, @@ -82,7 +83,7 @@ export interface ModalProps extends StyleProps, OverlayProps { isDismissable?: boolean } -export interface PopoverProps extends StyleProps, OverlayProps { +export interface PopoverProps extends StyleProps, Omit { children: ReactNode, placement?: PlacementAxis, arrowProps?: HTMLAttributes, @@ -94,7 +95,7 @@ export interface PopoverProps extends StyleProps, OverlayProps { isDismissable?: boolean } -export interface TrayProps extends StyleProps, OverlayProps { +export interface TrayProps extends StyleProps, Omit { children: ReactElement, isOpen?: boolean, onClose?: () => void, diff --git a/yarn.lock b/yarn.lock index 2ef9f757b15..97607b60a0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1878,7 +1878,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@7.12.5", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@7.12.5", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== @@ -9034,9 +9034,9 @@ csstype@^2.5.7: integrity sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q== csstype@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" - integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== + version "3.0.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" + integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== currently-unhandled@^0.4.1: version "0.4.1" @@ -9513,6 +9513,14 @@ dom-helpers@^3.2.1, dom-helpers@^3.3.1, dom-helpers@^3.4.0: dependencies: "@babel/runtime" "^7.1.2" +dom-helpers@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -19251,6 +19259,16 @@ react-transition-group@^2.2.0, react-transition-group@^2.2.1: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" +react-transition-group@^4.4.1: + version "4.4.2" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.2.tgz#8b59a56f09ced7b55cbd53c36768b922890d5470" + integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + dependencies: + "@babel/runtime" "^7.5.5" + dom-helpers "^5.0.1" + loose-envify "^1.4.0" + prop-types "^15.6.2" + react@^16.7.0, "react@^16.8.0 || ^17.0.0-rc.1": version "16.13.1" resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" @@ -19547,9 +19565,9 @@ regenerator-runtime@^0.11.0: integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regenerator-runtime@^0.13.7: version "0.13.7"