@react-spectrum/overlays 5.6.5 → 5.7.1

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.
package/src/Modal.tsx CHANGED
@@ -18,9 +18,9 @@ import {Overlay} from './Overlay';
18
18
  import {OverlayProps} from '@react-types/overlays';
19
19
  import {OverlayTriggerState} from '@react-stately/overlays';
20
20
  import overrideStyles from './overlays.css';
21
- import React, {forwardRef, MutableRefObject, ReactNode, useRef} from 'react';
21
+ import React, {ForwardedRef, forwardRef, ReactNode, useRef} from 'react';
22
22
  import {Underlay} from './Underlay';
23
- import {useViewportSize} from '@react-aria/utils';
23
+ import {useObjectRef, useViewportSize} from '@react-aria/utils';
24
24
 
25
25
  interface ModalProps extends AriaModalOverlayProps, StyleProps, Omit<OverlayProps, 'nodeRef' | 'shouldContainFocus'> {
26
26
  children: ReactNode,
@@ -30,10 +30,11 @@ interface ModalProps extends AriaModalOverlayProps, StyleProps, Omit<OverlayProp
30
30
 
31
31
  interface ModalWrapperProps extends ModalProps {
32
32
  isOpen?: boolean,
33
- wrapperRef: MutableRefObject<HTMLDivElement>
33
+ wrapperRef: RefObject<HTMLDivElement | null>,
34
+ children: ReactNode
34
35
  }
35
36
 
36
- function Modal(props: ModalProps, ref: DOMRef<HTMLDivElement>) {
37
+ export const Modal = forwardRef(function Modal(props: ModalProps, ref: DOMRef<HTMLDivElement>) {
37
38
  let {children, state, ...otherProps} = props;
38
39
  let domRef = useDOMRef(ref);
39
40
  let wrapperRef = useRef<HTMLDivElement>(null);
@@ -45,18 +46,19 @@ function Modal(props: ModalProps, ref: DOMRef<HTMLDivElement>) {
45
46
  </ModalWrapper>
46
47
  </Overlay>
47
48
  );
48
- }
49
+ });
49
50
 
50
51
  let typeMap = {
51
52
  fullscreen: 'fullscreen',
52
53
  fullscreenTakeover: 'fullscreenTakeover'
53
54
  };
54
55
 
55
- let ModalWrapper = forwardRef(function (props: ModalWrapperProps, ref: RefObject<HTMLDivElement | null>) {
56
+ let ModalWrapper = forwardRef(function (props: ModalWrapperProps, ref: ForwardedRef<HTMLDivElement | null>) {
56
57
  let {type, children, state, isOpen, wrapperRef} = props;
57
- let typeVariant = typeMap[type];
58
+ let typeVariant = type != null ? typeMap[type] : undefined;
58
59
  let {styleProps} = useStyleProps(props);
59
- let {modalProps, underlayProps} = useModalOverlay(props, state, ref);
60
+ let objRef = useObjectRef(ref);
61
+ let {modalProps, underlayProps} = useModalOverlay(props, state, objRef);
60
62
 
61
63
  let wrapperClassName = classNames(
62
64
  modalStyles,
@@ -96,7 +98,7 @@ let ModalWrapper = forwardRef(function (props: ModalWrapperProps, ref: RefObject
96
98
  <div
97
99
  {...styleProps}
98
100
  {...modalProps}
99
- ref={ref}
101
+ ref={objRef}
100
102
  className={modalClassName}
101
103
  data-testid="modal">
102
104
  {children}
@@ -105,6 +107,3 @@ let ModalWrapper = forwardRef(function (props: ModalWrapperProps, ref: RefObject
105
107
  </div>
106
108
  );
107
109
  });
108
-
109
- let _Modal = forwardRef(Modal);
110
- export {_Modal as Modal};
package/src/Overlay.tsx CHANGED
@@ -17,7 +17,7 @@ import {Provider} from '@react-spectrum/provider';
17
17
  import React, {useCallback, useState} from 'react';
18
18
  import {Overlay as ReactAriaOverlay} from '@react-aria/overlays';
19
19
 
20
- function Overlay(props: OverlayProps, ref: DOMRef<HTMLDivElement>) {
20
+ export const Overlay = React.forwardRef(function Overlay(props: OverlayProps, ref: DOMRef<HTMLDivElement>) {
21
21
  let {
22
22
  children,
23
23
  isOpen,
@@ -73,7 +73,4 @@ function Overlay(props: OverlayProps, ref: DOMRef<HTMLDivElement>) {
73
73
  </Provider>
74
74
  </ReactAriaOverlay>
75
75
  );
76
- }
77
-
78
- let _Overlay = React.forwardRef(Overlay);
79
- export {_Overlay as Overlay};
76
+ });
package/src/Popover.tsx CHANGED
@@ -14,11 +14,11 @@ import {AriaPopoverProps, DismissButton, PopoverAria, usePopover} from '@react-a
14
14
  import {classNames, useDOMRef, useStyleProps} from '@react-spectrum/utils';
15
15
  import {DOMRef, RefObject, StyleProps} from '@react-types/shared';
16
16
  import {FocusWithinProps, useFocusWithin} from '@react-aria/interactions';
17
- import {mergeProps, useLayoutEffect} from '@react-aria/utils';
17
+ import {mergeProps, useLayoutEffect, useObjectRef} from '@react-aria/utils';
18
18
  import {Overlay} from './Overlay';
19
19
  import {OverlayTriggerState} from '@react-stately/overlays';
20
20
  import overrideStyles from './overlays.css';
21
- import React, {forwardRef, MutableRefObject, ReactNode, useRef, useState} from 'react';
21
+ import React, {ForwardedRef, forwardRef, ReactNode, useRef, useState} from 'react';
22
22
  import styles from '@adobe/spectrum-css-temp/components/popover/vars.css';
23
23
  import {Underlay} from './Underlay';
24
24
 
@@ -41,7 +41,7 @@ interface PopoverProps extends Omit<AriaPopoverProps, 'popoverRef' | 'maxHeight'
41
41
 
42
42
  interface PopoverWrapperProps extends PopoverProps, FocusWithinProps {
43
43
  isOpen?: boolean,
44
- wrapperRef: MutableRefObject<HTMLDivElement>
44
+ wrapperRef: RefObject<HTMLDivElement | null>
45
45
  }
46
46
 
47
47
  interface ArrowProps {
@@ -67,7 +67,7 @@ let arrowPlacement = {
67
67
  bottom: 'bottom'
68
68
  };
69
69
 
70
- function Popover(props: PopoverProps, ref: DOMRef<HTMLDivElement>) {
70
+ export const Popover = forwardRef(function Popover(props: PopoverProps, ref: DOMRef<HTMLDivElement>) {
71
71
  let {
72
72
  children,
73
73
  state,
@@ -83,9 +83,9 @@ function Popover(props: PopoverProps, ref: DOMRef<HTMLDivElement>) {
83
83
  </PopoverWrapper>
84
84
  </Overlay>
85
85
  );
86
- }
86
+ });
87
87
 
88
- const PopoverWrapper = forwardRef((props: PopoverWrapperProps, ref: RefObject<HTMLDivElement | null>) => {
88
+ const PopoverWrapper = forwardRef((props: PopoverWrapperProps, ref: ForwardedRef<HTMLDivElement | null>) => {
89
89
  let {
90
90
  children,
91
91
  isOpen,
@@ -97,9 +97,10 @@ const PopoverWrapper = forwardRef((props: PopoverWrapperProps, ref: RefObject<HT
97
97
  onDismissButtonPress = () => state.close()
98
98
  } = props;
99
99
  let {styleProps} = useStyleProps(props);
100
+ let objRef = useObjectRef(ref);
100
101
 
101
102
  let {size, borderWidth, arrowRef} = useArrowSize();
102
- const borderRadius = usePopoverBorderRadius(ref);
103
+ const borderRadius = usePopoverBorderRadius(objRef);
103
104
  let borderDiagonal = borderWidth * Math.SQRT2;
104
105
  let primary = size + borderDiagonal;
105
106
  let secondary = primary * 2;
@@ -110,8 +111,8 @@ const PopoverWrapper = forwardRef((props: PopoverWrapperProps, ref: RefObject<HT
110
111
  placement
111
112
  } = usePopover({
112
113
  ...props,
113
- popoverRef: ref,
114
- maxHeight: null,
114
+ popoverRef: objRef,
115
+ maxHeight: undefined,
115
116
  arrowSize: hideArrow ? 0 : secondary,
116
117
  arrowBoundaryOffset: borderRadius
117
118
  }, state);
@@ -128,7 +129,7 @@ const PopoverWrapper = forwardRef((props: PopoverWrapperProps, ref: RefObject<HT
128
129
  ...styleProps.style,
129
130
  ...popoverProps.style
130
131
  }}
131
- ref={ref}
132
+ ref={objRef}
132
133
  className={
133
134
  classNames(
134
135
  styles,
@@ -154,7 +155,7 @@ const PopoverWrapper = forwardRef((props: PopoverWrapperProps, ref: RefObject<HT
154
155
  {hideArrow ? null : (
155
156
  <Arrow
156
157
  arrowProps={arrowProps}
157
- isLandscape={arrowPlacement[placement] === 'bottom'}
158
+ isLandscape={placement != null ? arrowPlacement[placement] === 'bottom' : false}
158
159
  arrowRef={arrowRef}
159
160
  primary={primary}
160
161
  secondary={secondary}
@@ -237,9 +238,6 @@ function Arrow(props: ArrowProps) {
237
238
  );
238
239
  }
239
240
 
240
- let _Popover = forwardRef(Popover);
241
- export {_Popover as Popover};
242
-
243
241
  /**
244
242
  * More explanation on popover tips.
245
243
  * - I tried changing the calculation of the popover placement in an effort to get it squarely onto the pixel grid.
package/src/Tray.tsx CHANGED
@@ -17,10 +17,10 @@ import {Overlay} from './Overlay';
17
17
  import {OverlayProps} from '@react-types/overlays';
18
18
  import {OverlayTriggerState} from '@react-stately/overlays';
19
19
  import overrideStyles from './overlays.css';
20
- import React, {forwardRef, MutableRefObject, ReactNode, useRef} from 'react';
20
+ import React, {ForwardedRef, forwardRef, ReactNode, useRef} from 'react';
21
21
  import trayStyles from '@adobe/spectrum-css-temp/components/tray/vars.css';
22
22
  import {Underlay} from './Underlay';
23
- import {useViewportSize} from '@react-aria/utils';
23
+ import {useObjectRef, useViewportSize} from '@react-aria/utils';
24
24
 
25
25
  interface TrayProps extends AriaModalOverlayProps, StyleProps, Omit<OverlayProps, 'nodeRef' | 'shouldContainFocus'> {
26
26
  children: ReactNode,
@@ -30,10 +30,10 @@ interface TrayProps extends AriaModalOverlayProps, StyleProps, Omit<OverlayProps
30
30
 
31
31
  interface TrayWrapperProps extends TrayProps {
32
32
  isOpen?: boolean,
33
- wrapperRef: MutableRefObject<HTMLDivElement>
33
+ wrapperRef: RefObject<HTMLDivElement | null>
34
34
  }
35
35
 
36
- function Tray(props: TrayProps, ref: DOMRef<HTMLDivElement>) {
36
+ export const Tray = forwardRef(function Tray(props: TrayProps, ref: DOMRef<HTMLDivElement>) {
37
37
  let {children, state, ...otherProps} = props;
38
38
  let domRef = useDOMRef(ref);
39
39
  let wrapperRef = useRef<HTMLDivElement>(null);
@@ -45,9 +45,9 @@ function Tray(props: TrayProps, ref: DOMRef<HTMLDivElement>) {
45
45
  </TrayWrapper>
46
46
  </Overlay>
47
47
  );
48
- }
48
+ });
49
49
 
50
- let TrayWrapper = forwardRef(function (props: TrayWrapperProps, ref: RefObject<HTMLDivElement | null>) {
50
+ let TrayWrapper = forwardRef(function (props: TrayWrapperProps, ref: ForwardedRef<HTMLDivElement | null>) {
51
51
  let {
52
52
  children,
53
53
  isOpen,
@@ -56,11 +56,12 @@ let TrayWrapper = forwardRef(function (props: TrayWrapperProps, ref: RefObject<H
56
56
  wrapperRef
57
57
  } = props;
58
58
  let {styleProps} = useStyleProps(props);
59
+ let objRef = useObjectRef(ref);
59
60
 
60
61
  let {modalProps, underlayProps} = useModalOverlay({
61
62
  ...props,
62
63
  isDismissable: true
63
- }, state, ref);
64
+ }, state, objRef);
64
65
 
65
66
  // We need to measure the window's height in JS rather than using percentages in CSS
66
67
  // so that contents (e.g. menu) can inherit the max-height properly. Using percentages
@@ -103,7 +104,7 @@ let TrayWrapper = forwardRef(function (props: TrayWrapperProps, ref: RefObject<H
103
104
  {...styleProps}
104
105
  {...modalProps}
105
106
  className={className}
106
- ref={ref}
107
+ ref={objRef}
107
108
  data-testid="tray">
108
109
  <DismissButton onDismiss={state.close} />
109
110
  {children}
@@ -113,6 +114,3 @@ let TrayWrapper = forwardRef(function (props: TrayWrapperProps, ref: RefObject<H
113
114
  </div>
114
115
  );
115
116
  });
116
-
117
- let _Tray = forwardRef(Tray);
118
- export {_Tray as Tray};