@react-aria/utils 3.22.0 → 3.23.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/dist/types.d.ts CHANGED
@@ -74,6 +74,7 @@ export function isAppleDevice(): boolean;
74
74
  export function isWebKit(): boolean;
75
75
  export function isChrome(): any;
76
76
  export function isAndroid(): any;
77
+ export function isFirefox(): any;
77
78
  interface Router {
78
79
  isNative: boolean;
79
80
  open: (target: Element, modifiers: Modifiers) => void;
@@ -136,13 +137,13 @@ export function useLabels(props: DOMProps & AriaLabelingProps, defaultLabel?: st
136
137
  /**
137
138
  * Offers an object ref for a given callback ref or an object ref. Especially
138
139
  * helfpul when passing forwarded refs (created using `React.forwardRef`) to
139
- * React Aria Hooks.
140
+ * React Aria hooks.
140
141
  *
141
142
  * @param forwardedRef The original ref intended to be used.
142
143
  * @returns An object ref that updates the given ref.
143
144
  * @see https://reactjs.org/docs/forwarding-refs.html
144
145
  */
145
- export function useObjectRef<T>(forwardedRef?: ((instance: T | null) => void) | MutableRefObject<T | null> | null): MutableRefObject<T>;
146
+ export function useObjectRef<T>(forwardedRef?: ((instance: T | null) => void) | MutableRefObject<T | null> | null): MutableRefObject<T | null>;
146
147
  export function useUpdateEffect(effect: EffectCallback, dependencies: any[]): void;
147
148
  type useResizeObserverOptionsType<T> = {
148
149
  ref: RefObject<T | undefined> | undefined;
@@ -150,18 +151,18 @@ type useResizeObserverOptionsType<T> = {
150
151
  };
151
152
  export function useResizeObserver<T extends Element>(options: useResizeObserverOptionsType<T>): void;
152
153
  interface ContextValue<T> {
153
- ref?: MutableRefObject<T>;
154
+ ref?: MutableRefObject<T | null>;
154
155
  }
155
156
  export function useSyncRef<T>(context?: ContextValue<T> | null, ref?: RefObject<T>): void;
156
- export function getScrollParent(node: Element): Element;
157
- export function isScrollable(node: Element): boolean;
157
+ export function getScrollParent(node: Element, checkForOverflow?: boolean): Element;
158
+ export function isScrollable(node: Element, checkForOverflow?: boolean): boolean;
158
159
  interface ViewportSize {
159
160
  width: number;
160
161
  height: number;
161
162
  }
162
163
  export function useViewportSize(): ViewportSize;
163
164
  export function useDescription(description?: string): AriaLabelingProps;
164
- export function useEffectEvent<T extends Function>(fn: T): T;
165
+ export function useEffectEvent<T extends Function>(fn?: T): T;
165
166
  export function useEvent<K extends keyof GlobalEventHandlersEventMap>(ref: RefObject<EventTarget>, event: K, handler?: (this: Document, ev: GlobalEventHandlersEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
166
167
  type SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;
167
168
  export function useValueEffect<S>(defaultValue: S | (() => S)): [S, Dispatch<SetValueAction<S>>];
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/@react-aria/utils/src/packages/@react-aria/utils/src/useLayoutEffect.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useId.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/chain.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/domHelpers.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/mergeProps.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/mergeRefs.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/filterDOMProps.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/focusWithoutScrolling.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/getOffset.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/platform.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/openLink.tsx","packages/@react-aria/utils/src/packages/@react-aria/utils/src/runAfterTransition.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useDrag1D.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useGlobalListeners.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useLabels.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useObjectRef.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useUpdateEffect.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useResizeObserver.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useSyncRef.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/getScrollParent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useViewportSize.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useDescription.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useEffectEvent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useEvent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useValueEffect.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/scrollIntoView.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/isVirtualEvent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useDeepMemo.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useFormReset.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/index.ts","packages/@react-aria/utils/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {useId, mergeIds, useSlotId} from './useId';\nexport {chain} from './chain';\nexport {getOwnerDocument, getOwnerWindow} from './domHelpers';\nexport {mergeProps} from './mergeProps';\nexport {mergeRefs} from './mergeRefs';\nexport {filterDOMProps} from './filterDOMProps';\nexport {focusWithoutScrolling} from './focusWithoutScrolling';\nexport {getOffset} from './getOffset';\nexport {openLink, getSyntheticLinkProps, RouterProvider, shouldClientNavigate, useRouter} from './openLink';\nexport {runAfterTransition} from './runAfterTransition';\nexport {useDrag1D} from './useDrag1D';\nexport {useGlobalListeners} from './useGlobalListeners';\nexport {useLabels} from './useLabels';\nexport {useObjectRef} from './useObjectRef';\nexport {useUpdateEffect} from './useUpdateEffect';\nexport {useLayoutEffect} from './useLayoutEffect';\nexport {useResizeObserver} from './useResizeObserver';\nexport {useSyncRef} from './useSyncRef';\nexport {getScrollParent, isScrollable} from './getScrollParent';\nexport {useViewportSize} from './useViewportSize';\nexport {useDescription} from './useDescription';\nexport {isMac, isIPhone, isIPad, isIOS, isAppleDevice, isWebKit, isChrome, isAndroid} from './platform';\nexport {useEvent} from './useEvent';\nexport {useValueEffect} from './useValueEffect';\nexport {scrollIntoView, scrollIntoViewport} from './scrollIntoView';\nexport {clamp, snapValueToStep} from '@react-stately/utils';\nexport {isVirtualClick, isVirtualPointerEvent} from './isVirtualEvent';\nexport {useEffectEvent} from './useEffectEvent';\nexport {useDeepMemo} from './useDeepMemo';\nexport {useFormReset} from './useFormReset';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
1
+ {"mappings":"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","sources":["packages/@react-aria/utils/src/packages/@react-aria/utils/src/useLayoutEffect.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useId.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/chain.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/domHelpers.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/mergeProps.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/mergeRefs.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/filterDOMProps.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/focusWithoutScrolling.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/getOffset.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/platform.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/openLink.tsx","packages/@react-aria/utils/src/packages/@react-aria/utils/src/runAfterTransition.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useDrag1D.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useGlobalListeners.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useLabels.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useObjectRef.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useUpdateEffect.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useResizeObserver.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useSyncRef.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/getScrollParent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useViewportSize.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useDescription.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useEffectEvent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useEvent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useValueEffect.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/scrollIntoView.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/isVirtualEvent.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useDeepMemo.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/useFormReset.ts","packages/@react-aria/utils/src/packages/@react-aria/utils/src/index.ts","packages/@react-aria/utils/src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nexport {useId, mergeIds, useSlotId} from './useId';\nexport {chain} from './chain';\nexport {getOwnerDocument, getOwnerWindow} from './domHelpers';\nexport {mergeProps} from './mergeProps';\nexport {mergeRefs} from './mergeRefs';\nexport {filterDOMProps} from './filterDOMProps';\nexport {focusWithoutScrolling} from './focusWithoutScrolling';\nexport {getOffset} from './getOffset';\nexport {openLink, getSyntheticLinkProps, RouterProvider, shouldClientNavigate, useRouter} from './openLink';\nexport {runAfterTransition} from './runAfterTransition';\nexport {useDrag1D} from './useDrag1D';\nexport {useGlobalListeners} from './useGlobalListeners';\nexport {useLabels} from './useLabels';\nexport {useObjectRef} from './useObjectRef';\nexport {useUpdateEffect} from './useUpdateEffect';\nexport {useLayoutEffect} from './useLayoutEffect';\nexport {useResizeObserver} from './useResizeObserver';\nexport {useSyncRef} from './useSyncRef';\nexport {getScrollParent, isScrollable} from './getScrollParent';\nexport {useViewportSize} from './useViewportSize';\nexport {useDescription} from './useDescription';\nexport {isMac, isIPhone, isIPad, isIOS, isAppleDevice, isWebKit, isChrome, isAndroid, isFirefox} from './platform';\nexport {useEvent} from './useEvent';\nexport {useValueEffect} from './useValueEffect';\nexport {scrollIntoView, scrollIntoViewport} from './scrollIntoView';\nexport {clamp, snapValueToStep} from '@react-stately/utils';\nexport {isVirtualClick, isVirtualPointerEvent} from './isVirtualEvent';\nexport {useEffectEvent} from './useEffectEvent';\nexport {useDeepMemo} from './useDeepMemo';\nexport {useFormReset} from './useFormReset';\n"],"names":[],"version":3,"file":"types.d.ts.map"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-aria/utils",
3
- "version": "3.22.0",
3
+ "version": "3.23.1",
4
4
  "description": "Spectrum UI components in React",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/main.js",
@@ -22,11 +22,11 @@
22
22
  "url": "https://github.com/adobe/react-spectrum"
23
23
  },
24
24
  "dependencies": {
25
- "@react-aria/ssr": "^3.9.0",
25
+ "@react-aria/ssr": "^3.9.1",
26
26
  "@react-stately/utils": "^3.9.0",
27
27
  "@react-types/shared": "^3.22.0",
28
28
  "@swc/helpers": "^0.5.0",
29
- "clsx": "^1.1.1"
29
+ "clsx": "^2.0.0"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
@@ -34,5 +34,5 @@
34
34
  "publishConfig": {
35
35
  "access": "public"
36
36
  },
37
- "gitHead": "9ce2f674eab2cc8912800d3162dcf00a1ce94274"
37
+ "gitHead": "f040ff62678e6a31375b96c05396df0bae660350"
38
38
  }
@@ -38,12 +38,12 @@ export function focusWithoutScrolling(element: FocusableElement) {
38
38
  }
39
39
  }
40
40
 
41
- let supportsPreventScrollCached: boolean = null;
41
+ let supportsPreventScrollCached: boolean | null = null;
42
42
  function supportsPreventScroll() {
43
43
  if (supportsPreventScrollCached == null) {
44
44
  supportsPreventScrollCached = false;
45
45
  try {
46
- var focusElem = document.createElement('div');
46
+ let focusElem = document.createElement('div');
47
47
  focusElem.focus({
48
48
  get preventScroll() {
49
49
  supportsPreventScrollCached = true;
@@ -59,9 +59,9 @@ function supportsPreventScroll() {
59
59
  }
60
60
 
61
61
  function getScrollableElements(element: FocusableElement): ScrollableElement[] {
62
- var parent = element.parentNode;
63
- var scrollableElements: ScrollableElement[] = [];
64
- var rootScrollingElement = document.scrollingElement || document.documentElement;
62
+ let parent = element.parentNode;
63
+ let scrollableElements: ScrollableElement[] = [];
64
+ let rootScrollingElement = document.scrollingElement || document.documentElement;
65
65
 
66
66
  while (parent instanceof HTMLElement && parent !== rootScrollingElement) {
67
67
  if (
@@ -10,19 +10,26 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- export function getScrollParent(node: Element): Element {
14
- if (isScrollable(node)) {
15
- node = node.parentElement;
13
+ export function getScrollParent(node: Element, checkForOverflow?: boolean): Element {
14
+ let scrollableNode: Element | null = node;
15
+ if (isScrollable(scrollableNode, checkForOverflow)) {
16
+ scrollableNode = scrollableNode.parentElement;
16
17
  }
17
18
 
18
- while (node && !isScrollable(node)) {
19
- node = node.parentElement;
19
+ while (scrollableNode && !isScrollable(scrollableNode, checkForOverflow)) {
20
+ scrollableNode = scrollableNode.parentElement;
20
21
  }
21
22
 
22
- return node || document.scrollingElement || document.documentElement;
23
+ return scrollableNode || document.scrollingElement || document.documentElement;
23
24
  }
24
25
 
25
- export function isScrollable(node: Element): boolean {
26
+ export function isScrollable(node: Element, checkForOverflow?: boolean): boolean {
26
27
  let style = window.getComputedStyle(node);
27
- return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);
28
+ let isScrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);
29
+
30
+ if (isScrollable && checkForOverflow) {
31
+ isScrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;
32
+ }
33
+
34
+ return isScrollable;
28
35
  }
package/src/index.ts CHANGED
@@ -30,7 +30,7 @@ export {useSyncRef} from './useSyncRef';
30
30
  export {getScrollParent, isScrollable} from './getScrollParent';
31
31
  export {useViewportSize} from './useViewportSize';
32
32
  export {useDescription} from './useDescription';
33
- export {isMac, isIPhone, isIPad, isIOS, isAppleDevice, isWebKit, isChrome, isAndroid} from './platform';
33
+ export {isMac, isIPhone, isIPad, isIOS, isAppleDevice, isWebKit, isChrome, isAndroid, isFirefox} from './platform';
34
34
  export {useEvent} from './useEvent';
35
35
  export {useValueEffect} from './useValueEffect';
36
36
  export {scrollIntoView, scrollIntoViewport} from './scrollIntoView';
package/src/mergeRefs.ts CHANGED
@@ -20,7 +20,7 @@ export function mergeRefs<T>(...refs: ForwardedRef<T>[]): ForwardedRef<T> {
20
20
  return refs[0];
21
21
  }
22
22
 
23
- return (value: T) => {
23
+ return (value: T | null) => {
24
24
  for (let ref of refs) {
25
25
  if (typeof ref === 'function') {
26
26
  ref(value);
package/src/openLink.tsx CHANGED
@@ -116,21 +116,21 @@ function getSyntheticLink(target: Element, open: (link: HTMLAnchorElement) => vo
116
116
  open(target);
117
117
  } else if (target.hasAttribute('data-href')) {
118
118
  let link = document.createElement('a');
119
- link.href = target.getAttribute('data-href');
119
+ link.href = target.getAttribute('data-href')!;
120
120
  if (target.hasAttribute('data-target')) {
121
- link.target = target.getAttribute('data-target');
121
+ link.target = target.getAttribute('data-target')!;
122
122
  }
123
123
  if (target.hasAttribute('data-rel')) {
124
- link.rel = target.getAttribute('data-rel');
124
+ link.rel = target.getAttribute('data-rel')!;
125
125
  }
126
126
  if (target.hasAttribute('data-download')) {
127
- link.download = target.getAttribute('data-download');
127
+ link.download = target.getAttribute('data-download')!;
128
128
  }
129
129
  if (target.hasAttribute('data-ping')) {
130
- link.ping = target.getAttribute('data-ping');
130
+ link.ping = target.getAttribute('data-ping')!;
131
131
  }
132
132
  if (target.hasAttribute('data-referrer-policy')) {
133
- link.referrerPolicy = target.getAttribute('data-referrer-policy');
133
+ link.referrerPolicy = target.getAttribute('data-referrer-policy')!;
134
134
  }
135
135
  target.appendChild(link);
136
136
  open(link);
@@ -26,7 +26,14 @@ function setupGlobalEvents() {
26
26
  return;
27
27
  }
28
28
 
29
- let onTransitionStart = (e: TransitionEvent) => {
29
+ function isTransitionEvent(event: Event): event is TransitionEvent {
30
+ return 'propertyName' in event;
31
+ }
32
+
33
+ let onTransitionStart = (e: Event) => {
34
+ if (!isTransitionEvent(e) || !e.target) {
35
+ return;
36
+ }
30
37
  // Add the transitioning property to the list for this element.
31
38
  let transitions = transitionsByElement.get(e.target);
32
39
  if (!transitions) {
@@ -36,13 +43,18 @@ function setupGlobalEvents() {
36
43
  // The transitioncancel event must be registered on the element itself, rather than as a global
37
44
  // event. This enables us to handle when the node is deleted from the document while it is transitioning.
38
45
  // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.
39
- e.target.addEventListener('transitioncancel', onTransitionEnd);
46
+ e.target.addEventListener('transitioncancel', onTransitionEnd, {
47
+ once: true
48
+ });
40
49
  }
41
50
 
42
51
  transitions.add(e.propertyName);
43
52
  };
44
53
 
45
- let onTransitionEnd = (e: TransitionEvent) => {
54
+ let onTransitionEnd = (e: Event) => {
55
+ if (!isTransitionEvent(e) || !e.target) {
56
+ return;
57
+ }
46
58
  // Remove property from list of transitioning properties.
47
59
  let properties = transitionsByElement.get(e.target);
48
60
  if (!properties) {
@@ -17,7 +17,7 @@ import {useRef} from 'react';
17
17
  export function useDeepMemo<T>(value: T, isEqual: (a: T, b: T) => boolean): T {
18
18
  // Using a ref during render is ok here because it's only an optimization – both values are equivalent.
19
19
  // If a render is thrown away, it'll still work the same no matter if the next render is the same or not.
20
- let lastValue = useRef(null);
20
+ let lastValue = useRef<T | null>(null);
21
21
  if (value && lastValue.current && isEqual(value, lastValue.current)) {
22
22
  value = lastValue.current;
23
23
  }
@@ -18,7 +18,7 @@ let descriptionId = 0;
18
18
  const descriptionNodes = new Map<string, {refCount: number, element: Element}>();
19
19
 
20
20
  export function useDescription(description?: string): AriaLabelingProps {
21
- let [id, setId] = useState(undefined);
21
+ let [id, setId] = useState<string | undefined>();
22
22
 
23
23
  useLayoutEffect(() => {
24
24
  if (!description) {
@@ -43,7 +43,7 @@ export function useDescription(description?: string): AriaLabelingProps {
43
43
 
44
44
  desc.refCount++;
45
45
  return () => {
46
- if (--desc.refCount === 0) {
46
+ if (desc && --desc.refCount === 0) {
47
47
  desc.element.remove();
48
48
  descriptionNodes.delete(description);
49
49
  }
@@ -13,14 +13,14 @@
13
13
  import {useCallback, useRef} from 'react';
14
14
  import {useLayoutEffect} from './useLayoutEffect';
15
15
 
16
- export function useEffectEvent<T extends Function>(fn: T): T {
17
- const ref = useRef<T | null>(null);
16
+ export function useEffectEvent<T extends Function>(fn?: T): T {
17
+ const ref = useRef<T | null | undefined>(null);
18
18
  useLayoutEffect(() => {
19
19
  ref.current = fn;
20
20
  }, [fn]);
21
21
  // @ts-ignore
22
22
  return useCallback<T>((...args) => {
23
23
  const f = ref.current!;
24
- return f(...args);
24
+ return f?.(...args);
25
25
  }, []);
26
26
  }
package/src/useEvent.ts CHANGED
@@ -23,14 +23,14 @@ export function useEvent<K extends keyof GlobalEventHandlersEventMap>(
23
23
  let isDisabled = handler == null;
24
24
 
25
25
  useEffect(() => {
26
- if (isDisabled) {
26
+ if (isDisabled || !ref.current) {
27
27
  return;
28
28
  }
29
29
 
30
30
  let element = ref.current;
31
- element.addEventListener(event, handleEvent, options);
31
+ element.addEventListener(event, handleEvent as EventListener, options);
32
32
  return () => {
33
- element.removeEventListener(event, handleEvent, options);
33
+ element.removeEventListener(event, handleEvent as EventListener, options);
34
34
  };
35
35
  }, [ref, event, options, isDisabled, handleEvent]);
36
36
  }
@@ -15,14 +15,14 @@ import {MutableRefObject, useMemo, useRef} from 'react';
15
15
  /**
16
16
  * Offers an object ref for a given callback ref or an object ref. Especially
17
17
  * helfpul when passing forwarded refs (created using `React.forwardRef`) to
18
- * React Aria Hooks.
18
+ * React Aria hooks.
19
19
  *
20
20
  * @param forwardedRef The original ref intended to be used.
21
21
  * @returns An object ref that updates the given ref.
22
22
  * @see https://reactjs.org/docs/forwarding-refs.html
23
23
  */
24
- export function useObjectRef<T>(forwardedRef?: ((instance: T | null) => void) | MutableRefObject<T | null> | null): MutableRefObject<T> {
25
- const objRef = useRef<T>();
24
+ export function useObjectRef<T>(forwardedRef?: ((instance: T | null) => void) | MutableRefObject<T | null> | null): MutableRefObject<T | null> {
25
+ const objRef: MutableRefObject<T | null> = useRef<T>(null);
26
26
  return useMemo(() => ({
27
27
  get current() {
28
28
  return objRef.current;
package/src/useSyncRef.ts CHANGED
@@ -14,7 +14,7 @@ import {MutableRefObject, RefObject} from 'react';
14
14
  import {useLayoutEffect} from './';
15
15
 
16
16
  interface ContextValue<T> {
17
- ref?: MutableRefObject<T>
17
+ ref?: MutableRefObject<T | null>
18
18
  }
19
19
 
20
20
  // Syncs ref from context with ref passed to hook
@@ -23,7 +23,9 @@ export function useSyncRef<T>(context?: ContextValue<T> | null, ref?: RefObject<
23
23
  if (context && context.ref && ref) {
24
24
  context.ref.current = ref.current;
25
25
  return () => {
26
- context.ref.current = null;
26
+ if (context.ref) {
27
+ context.ref.current = null;
28
+ }
27
29
  };
28
30
  }
29
31
  });
@@ -10,7 +10,7 @@
10
10
  * governing permissions and limitations under the License.
11
11
  */
12
12
 
13
- import {Dispatch, useRef, useState} from 'react';
13
+ import {Dispatch, MutableRefObject, useRef, useState} from 'react';
14
14
  import {useEffectEvent, useLayoutEffect} from './';
15
15
 
16
16
  type SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;
@@ -21,11 +21,14 @@ type SetValueAction<S> = (prev: S) => Generator<any, void, unknown>;
21
21
  // written linearly.
22
22
  export function useValueEffect<S>(defaultValue: S | (() => S)): [S, Dispatch<SetValueAction<S>>] {
23
23
  let [value, setValue] = useState(defaultValue);
24
- let effect = useRef(null);
24
+ let effect: MutableRefObject<Generator<S> | null> = useRef<Generator<S> | null>(null);
25
25
 
26
26
  // Store the function in a ref so we can always access the current version
27
27
  // which has the proper `value` in scope.
28
28
  let nextRef = useEffectEvent(() => {
29
+ if (!effect.current) {
30
+ return;
31
+ }
29
32
  // Run the generator to the next yield.
30
33
  let newValue = effect.current.next();
31
34
 
@@ -57,7 +57,7 @@ export function useViewportSize(): ViewportSize {
57
57
 
58
58
  function getViewportSize(): ViewportSize {
59
59
  return {
60
- width: visualViewport?.width || window.innerWidth,
61
- height: visualViewport?.height || window.innerHeight
60
+ width: (visualViewport && visualViewport?.width) || window.innerWidth,
61
+ height: (visualViewport && visualViewport?.height) || window.innerHeight
62
62
  };
63
63
  }