@react-aria/interactions
Advanced tools
Comparing version 3.21.3 to 3.22.0
@@ -1,3 +0,3 @@ | ||
import { DOMAttributes, PressEvents, FocusableElement, FocusEvents, HoverEvents, KeyboardEvents, MoveEvents, ScrollEvents, LongPressEvent } from "@react-types/shared"; | ||
import React, { RefObject, ReactElement, ReactNode, FocusEvent } from "react"; | ||
import { DOMAttributes, PressEvents, RefObject, FocusableElement, FocusEvents, HoverEvents, KeyboardEvents, MoveEvents, ScrollEvents, LongPressEvent } from "@react-types/shared"; | ||
import React, { ReactElement, ReactNode, FocusEvent } from "react"; | ||
export interface PressProps extends PressEvents { | ||
@@ -22,3 +22,3 @@ /** Whether the target is in a controlled press state (e.g. an overlay it triggers is open). */ | ||
/** A ref to the target element. */ | ||
ref?: RefObject<Element>; | ||
ref?: RefObject<Element | null>; | ||
} | ||
@@ -144,3 +144,3 @@ export interface PressResult { | ||
export interface InteractOutsideProps { | ||
ref: RefObject<Element>; | ||
ref: RefObject<Element | null>; | ||
onInteractOutside?: (e: PointerEvent) => void; | ||
@@ -182,3 +182,3 @@ onInteractOutsideStart?: (e: PointerEvent) => void; | ||
} | ||
export function useScrollWheel(props: ScrollWheelProps, ref: RefObject<HTMLElement>): void; | ||
export function useScrollWheel(props: ScrollWheelProps, ref: RefObject<HTMLElement | null>): void; | ||
export interface LongPressProps { | ||
@@ -185,0 +185,0 @@ /** Whether long press events should be disabled. */ |
@@ -27,3 +27,3 @@ var $0294ea432cd92340$exports = require("./usePress.main.js"); | ||
let { isDisabled: isDisabled, onLongPressStart: onLongPressStart, onLongPressEnd: onLongPressEnd, onLongPress: onLongPress, threshold: threshold = $3cd7b5d0eebf0ca9$var$DEFAULT_THRESHOLD, accessibilityDescription: accessibilityDescription } = props; | ||
const timeRef = (0, $5sxTM$react.useRef)(); | ||
const timeRef = (0, $5sxTM$react.useRef)(undefined); | ||
let { addGlobalListener: addGlobalListener, removeGlobalListener: removeGlobalListener } = (0, $5sxTM$reactariautils.useGlobalListeners)(); | ||
@@ -30,0 +30,0 @@ let { pressProps: pressProps } = (0, $0294ea432cd92340$exports.usePress)({ |
@@ -21,3 +21,3 @@ import {usePress as $f6c31cce2adf654f$export$45712eceda6fad21} from "./usePress.module.js"; | ||
let { isDisabled: isDisabled, onLongPressStart: onLongPressStart, onLongPressEnd: onLongPressEnd, onLongPress: onLongPress, threshold: threshold = $8a26561d2877236e$var$DEFAULT_THRESHOLD, accessibilityDescription: accessibilityDescription } = props; | ||
const timeRef = (0, $4k2kv$useRef)(); | ||
const timeRef = (0, $4k2kv$useRef)(undefined); | ||
let { addGlobalListener: addGlobalListener, removeGlobalListener: removeGlobalListener } = (0, $4k2kv$useGlobalListeners)(); | ||
@@ -24,0 +24,0 @@ let { pressProps: pressProps } = (0, $f6c31cce2adf654f$export$45712eceda6fad21)({ |
@@ -55,3 +55,3 @@ var $f7e14e656343df57$exports = require("./textSelection.main.js"); | ||
} | ||
constructor(type, pointerType, originalEvent){ | ||
constructor(type, pointerType, originalEvent, state){ | ||
(0, $bBqCQ$swchelperscjs_class_private_field_initcjs._)(this, $0294ea432cd92340$var$_shouldStopPropagation, { | ||
@@ -62,2 +62,20 @@ writable: true, | ||
(0, $bBqCQ$swchelperscjs_class_private_field_setcjs._)(this, $0294ea432cd92340$var$_shouldStopPropagation, true); | ||
var _state_target; | ||
let currentTarget = (_state_target = state === null || state === void 0 ? void 0 : state.target) !== null && _state_target !== void 0 ? _state_target : originalEvent.currentTarget; | ||
const rect = currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.getBoundingClientRect(); | ||
let x, y = 0; | ||
let clientX, clientY = null; | ||
if (originalEvent.clientX != null && originalEvent.clientY != null) { | ||
clientX = originalEvent.clientX; | ||
clientY = originalEvent.clientY; | ||
} | ||
if (rect) { | ||
if (clientX != null && clientY != null) { | ||
x = clientX - rect.left; | ||
y = clientY - rect.top; | ||
} else { | ||
x = rect.width / 2; | ||
y = rect.height / 2; | ||
} | ||
} | ||
this.type = type; | ||
@@ -70,2 +88,4 @@ this.pointerType = pointerType; | ||
this.altKey = originalEvent.altKey; | ||
this.x = x; | ||
this.y = y; | ||
} | ||
@@ -395,3 +415,3 @@ } | ||
if (!allowTextSelectionOnPress) (0, $f7e14e656343df57$exports.disableTextSelection)(state.target); | ||
let shouldStopPropagation = triggerPressStart(e, state.pointerType); | ||
let shouldStopPropagation = triggerPressStart($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType); | ||
if (shouldStopPropagation) e.stopPropagation(); | ||
@@ -411,8 +431,8 @@ addGlobalListener((0, $bBqCQ$reactariautils.getOwnerWindow)(e.currentTarget), 'scroll', onScroll, true); | ||
state.isOverTarget = true; | ||
shouldStopPropagation = triggerPressStart(e, state.pointerType); | ||
shouldStopPropagation = triggerPressStart($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType); | ||
} | ||
} else if (state.isOverTarget && state.pointerType != null) { | ||
state.isOverTarget = false; | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType, false); | ||
cancelOnPointerExit(e); | ||
shouldStopPropagation = triggerPressEnd($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType, false); | ||
cancelOnPointerExit($0294ea432cd92340$var$createTouchEvent(state.target, e)); | ||
} | ||
@@ -430,5 +450,5 @@ if (shouldStopPropagation) e.stopPropagation(); | ||
if (touch && $0294ea432cd92340$var$isOverTarget(touch, e.currentTarget) && state.pointerType != null) { | ||
triggerPressUp(e, state.pointerType); | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType); | ||
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd(e, state.pointerType, false); | ||
triggerPressUp($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType); | ||
shouldStopPropagation = triggerPressEnd($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType); | ||
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($0294ea432cd92340$var$createTouchEvent(state.target, e), state.pointerType, false); | ||
if (shouldStopPropagation) e.stopPropagation(); | ||
@@ -445,3 +465,3 @@ state.isPressed = false; | ||
e.stopPropagation(); | ||
if (state.isPressed) cancel(e); | ||
if (state.isPressed) cancel($0294ea432cd92340$var$createTouchEvent(state.target, e)); | ||
}; | ||
@@ -516,3 +536,22 @@ let onScroll = (e)=>{ | ||
} | ||
function $0294ea432cd92340$var$createTouchEvent(target, e) { | ||
let clientX = 0; | ||
let clientY = 0; | ||
if (e.targetTouches && e.targetTouches.length === 1) { | ||
clientX = e.targetTouches[0].clientX; | ||
clientY = e.targetTouches[0].clientY; | ||
} | ||
return { | ||
currentTarget: target, | ||
shiftKey: e.shiftKey, | ||
ctrlKey: e.ctrlKey, | ||
metaKey: e.metaKey, | ||
altKey: e.altKey, | ||
clientX: clientX, | ||
clientY: clientY | ||
}; | ||
} | ||
function $0294ea432cd92340$var$createEvent(target, e) { | ||
let clientX = e.clientX; | ||
let clientY = e.clientY; | ||
return { | ||
@@ -523,3 +562,5 @@ currentTarget: target, | ||
metaKey: e.metaKey, | ||
altKey: e.altKey | ||
altKey: e.altKey, | ||
clientX: clientX, | ||
clientY: clientY | ||
}; | ||
@@ -526,0 +567,0 @@ } |
@@ -49,3 +49,3 @@ import {disableTextSelection as $14c0b72509d70225$export$16a4697467175487, restoreTextSelection as $14c0b72509d70225$export$b0d6fa1ab32e3295} from "./textSelection.module.js"; | ||
} | ||
constructor(type, pointerType, originalEvent){ | ||
constructor(type, pointerType, originalEvent, state){ | ||
(0, $7mdmh$_1)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, { | ||
@@ -56,2 +56,20 @@ writable: true, | ||
(0, $7mdmh$_2)(this, $f6c31cce2adf654f$var$_shouldStopPropagation, true); | ||
var _state_target; | ||
let currentTarget = (_state_target = state === null || state === void 0 ? void 0 : state.target) !== null && _state_target !== void 0 ? _state_target : originalEvent.currentTarget; | ||
const rect = currentTarget === null || currentTarget === void 0 ? void 0 : currentTarget.getBoundingClientRect(); | ||
let x, y = 0; | ||
let clientX, clientY = null; | ||
if (originalEvent.clientX != null && originalEvent.clientY != null) { | ||
clientX = originalEvent.clientX; | ||
clientY = originalEvent.clientY; | ||
} | ||
if (rect) { | ||
if (clientX != null && clientY != null) { | ||
x = clientX - rect.left; | ||
y = clientY - rect.top; | ||
} else { | ||
x = rect.width / 2; | ||
y = rect.height / 2; | ||
} | ||
} | ||
this.type = type; | ||
@@ -64,2 +82,4 @@ this.pointerType = pointerType; | ||
this.altKey = originalEvent.altKey; | ||
this.x = x; | ||
this.y = y; | ||
} | ||
@@ -389,3 +409,3 @@ } | ||
if (!allowTextSelectionOnPress) (0, $14c0b72509d70225$export$16a4697467175487)(state.target); | ||
let shouldStopPropagation = triggerPressStart(e, state.pointerType); | ||
let shouldStopPropagation = triggerPressStart($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType); | ||
if (shouldStopPropagation) e.stopPropagation(); | ||
@@ -405,8 +425,8 @@ addGlobalListener((0, $7mdmh$getOwnerWindow)(e.currentTarget), 'scroll', onScroll, true); | ||
state.isOverTarget = true; | ||
shouldStopPropagation = triggerPressStart(e, state.pointerType); | ||
shouldStopPropagation = triggerPressStart($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType); | ||
} | ||
} else if (state.isOverTarget && state.pointerType != null) { | ||
state.isOverTarget = false; | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType, false); | ||
cancelOnPointerExit(e); | ||
shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType, false); | ||
cancelOnPointerExit($f6c31cce2adf654f$var$createTouchEvent(state.target, e)); | ||
} | ||
@@ -424,5 +444,5 @@ if (shouldStopPropagation) e.stopPropagation(); | ||
if (touch && $f6c31cce2adf654f$var$isOverTarget(touch, e.currentTarget) && state.pointerType != null) { | ||
triggerPressUp(e, state.pointerType); | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType); | ||
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd(e, state.pointerType, false); | ||
triggerPressUp($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType); | ||
shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType); | ||
} else if (state.isOverTarget && state.pointerType != null) shouldStopPropagation = triggerPressEnd($f6c31cce2adf654f$var$createTouchEvent(state.target, e), state.pointerType, false); | ||
if (shouldStopPropagation) e.stopPropagation(); | ||
@@ -439,3 +459,3 @@ state.isPressed = false; | ||
e.stopPropagation(); | ||
if (state.isPressed) cancel(e); | ||
if (state.isPressed) cancel($f6c31cce2adf654f$var$createTouchEvent(state.target, e)); | ||
}; | ||
@@ -510,3 +530,22 @@ let onScroll = (e)=>{ | ||
} | ||
function $f6c31cce2adf654f$var$createTouchEvent(target, e) { | ||
let clientX = 0; | ||
let clientY = 0; | ||
if (e.targetTouches && e.targetTouches.length === 1) { | ||
clientX = e.targetTouches[0].clientX; | ||
clientY = e.targetTouches[0].clientY; | ||
} | ||
return { | ||
currentTarget: target, | ||
shiftKey: e.shiftKey, | ||
ctrlKey: e.ctrlKey, | ||
metaKey: e.metaKey, | ||
altKey: e.altKey, | ||
clientX: clientX, | ||
clientY: clientY | ||
}; | ||
} | ||
function $f6c31cce2adf654f$var$createEvent(target, e) { | ||
let clientX = e.clientX; | ||
let clientY = e.clientY; | ||
return { | ||
@@ -517,3 +556,5 @@ currentTarget: target, | ||
metaKey: e.metaKey, | ||
altKey: e.altKey | ||
altKey: e.altKey, | ||
clientX: clientX, | ||
clientY: clientY | ||
}; | ||
@@ -520,0 +561,0 @@ } |
{ | ||
"name": "@react-aria/interactions", | ||
"version": "3.21.3", | ||
"version": "3.22.0", | ||
"description": "Spectrum UI components in React", | ||
@@ -25,9 +25,9 @@ "license": "Apache-2.0", | ||
"dependencies": { | ||
"@react-aria/ssr": "^3.9.4", | ||
"@react-aria/utils": "^3.24.1", | ||
"@react-types/shared": "^3.23.1", | ||
"@react-aria/ssr": "^3.9.5", | ||
"@react-aria/utils": "^3.25.0", | ||
"@react-types/shared": "^3.24.0", | ||
"@swc/helpers": "^0.5.0" | ||
}, | ||
"peerDependencies": { | ||
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" | ||
"react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" | ||
}, | ||
@@ -37,3 +37,3 @@ "publishConfig": { | ||
}, | ||
"gitHead": "b77d7d594dff4dcfb5359bffbcfd18142b146433" | ||
"gitHead": "86d80e3216bc32e75108831cf3a5a720bc849206" | ||
} |
@@ -13,8 +13,8 @@ /* | ||
import {DOMAttributes} from '@react-types/shared'; | ||
import {DOMAttributes, RefObject} from '@react-types/shared'; | ||
import {mergeProps, useSyncRef} from '@react-aria/utils'; | ||
import React, {MutableRefObject, RefObject, useContext} from 'react'; | ||
import React, {MutableRefObject, useContext} from 'react'; | ||
interface DOMPropsResponderProps extends DOMAttributes { | ||
ref?: RefObject<Element> | ||
ref?: RefObject<Element | null> | ||
} | ||
@@ -21,0 +21,0 @@ |
@@ -13,6 +13,6 @@ /* | ||
import {RefObject} from 'react'; | ||
import {RefObject} from '@react-types/shared'; | ||
import {useDOMPropsResponderContext} from './DOMPropsContext'; | ||
export function useDOMPropsResponder(domRef: RefObject<Element>) { | ||
export function useDOMPropsResponder(domRef: RefObject<Element | null>) { | ||
@@ -19,0 +19,0 @@ let domProps = useDOMPropsResponderContext({ref: domRef}) || {}; |
@@ -207,2 +207,1 @@ /* | ||
} | ||
@@ -19,6 +19,7 @@ /* | ||
import {getOwnerDocument, useEffectEvent} from '@react-aria/utils'; | ||
import {RefObject, useEffect, useRef} from 'react'; | ||
import {RefObject} from '@react-types/shared'; | ||
import {useEffect, useRef} from 'react'; | ||
export interface InteractOutsideProps { | ||
ref: RefObject<Element>, | ||
ref: RefObject<Element | null>, | ||
onInteractOutside?: (e: PointerEvent) => void, | ||
@@ -25,0 +26,0 @@ onInteractOutsideStart?: (e: PointerEvent) => void, |
@@ -66,3 +66,3 @@ /* | ||
const timeRef = useRef<ReturnType<typeof setTimeout> | undefined>(); | ||
const timeRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined); | ||
let {addGlobalListener, removeGlobalListener} = useGlobalListeners(); | ||
@@ -69,0 +69,0 @@ |
@@ -20,5 +20,5 @@ /* | ||
import {disableTextSelection, restoreTextSelection} from './textSelection'; | ||
import {DOMAttributes, FocusableElement, PressEvent as IPressEvent, PointerType, PressEvents} from '@react-types/shared'; | ||
import {DOMAttributes, FocusableElement, PressEvent as IPressEvent, PointerType, PressEvents, RefObject} from '@react-types/shared'; | ||
import {PressResponderContext} from './context'; | ||
import {RefObject, useContext, useEffect, useMemo, useRef, useState} from 'react'; | ||
import {TouchEvent as RTouchEvent, useContext, useEffect, useMemo, useRef, useState} from 'react'; | ||
@@ -45,3 +45,3 @@ export interface PressProps extends PressEvents { | ||
/** A ref to the target element. */ | ||
ref?: RefObject<Element> | ||
ref?: RefObject<Element | null> | ||
} | ||
@@ -68,3 +68,6 @@ | ||
metaKey: boolean, | ||
altKey: boolean | ||
altKey: boolean, | ||
clientX?: number, | ||
clientY?: number, | ||
targetTouches?: Array<{clientX?: number, clientY?: number}> | ||
} | ||
@@ -100,5 +103,24 @@ | ||
altKey: boolean; | ||
x: number; | ||
y: number; | ||
#shouldStopPropagation = true; | ||
constructor(type: IPressEvent['type'], pointerType: PointerType, originalEvent: EventBase) { | ||
constructor(type: IPressEvent['type'], pointerType: PointerType, originalEvent: EventBase, state?: PressState) { | ||
let currentTarget = state?.target ?? originalEvent.currentTarget; | ||
const rect: DOMRect | undefined = (currentTarget as Element)?.getBoundingClientRect(); | ||
let x, y = 0; | ||
let clientX, clientY: number | null = null; | ||
if (originalEvent.clientX != null && originalEvent.clientY != null) { | ||
clientX = originalEvent.clientX; | ||
clientY = originalEvent.clientY; | ||
} | ||
if (rect) { | ||
if (clientX != null && clientY != null) { | ||
x = clientX - rect.left; | ||
y = clientY - rect.top; | ||
} else { | ||
x = rect.width / 2; | ||
y = rect.height / 2; | ||
} | ||
} | ||
this.type = type; | ||
@@ -111,2 +133,4 @@ this.pointerType = pointerType; | ||
this.altKey = originalEvent.altKey; | ||
this.x = x; | ||
this.y = y; | ||
} | ||
@@ -636,3 +660,3 @@ | ||
let shouldStopPropagation = triggerPressStart(e, state.pointerType); | ||
let shouldStopPropagation = triggerPressStart(createTouchEvent(state.target, e), state.pointerType); | ||
if (shouldStopPropagation) { | ||
@@ -660,8 +684,8 @@ e.stopPropagation(); | ||
state.isOverTarget = true; | ||
shouldStopPropagation = triggerPressStart(e, state.pointerType); | ||
shouldStopPropagation = triggerPressStart(createTouchEvent(state.target!, e), state.pointerType); | ||
} | ||
} else if (state.isOverTarget && state.pointerType != null) { | ||
state.isOverTarget = false; | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType, false); | ||
cancelOnPointerExit(e); | ||
shouldStopPropagation = triggerPressEnd(createTouchEvent(state.target!, e), state.pointerType, false); | ||
cancelOnPointerExit(createTouchEvent(state.target!, e)); | ||
} | ||
@@ -687,6 +711,6 @@ | ||
if (touch && isOverTarget(touch, e.currentTarget) && state.pointerType != null) { | ||
triggerPressUp(e, state.pointerType); | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType); | ||
triggerPressUp(createTouchEvent(state.target!, e), state.pointerType); | ||
shouldStopPropagation = triggerPressEnd(createTouchEvent(state.target!, e), state.pointerType); | ||
} else if (state.isOverTarget && state.pointerType != null) { | ||
shouldStopPropagation = triggerPressEnd(e, state.pointerType, false); | ||
shouldStopPropagation = triggerPressEnd(createTouchEvent(state.target!, e), state.pointerType, false); | ||
} | ||
@@ -715,3 +739,3 @@ | ||
if (state.isPressed) { | ||
cancel(e); | ||
cancel(createTouchEvent(state.target!, e)); | ||
} | ||
@@ -814,3 +838,23 @@ }; | ||
function createTouchEvent(target: FocusableElement, e: RTouchEvent<FocusableElement>): EventBase { | ||
let clientX = 0; | ||
let clientY = 0; | ||
if (e.targetTouches && e.targetTouches.length === 1) { | ||
clientX = e.targetTouches[0].clientX; | ||
clientY = e.targetTouches[0].clientY; | ||
} | ||
return { | ||
currentTarget: target, | ||
shiftKey: e.shiftKey, | ||
ctrlKey: e.ctrlKey, | ||
metaKey: e.metaKey, | ||
altKey: e.altKey, | ||
clientX, | ||
clientY | ||
}; | ||
} | ||
function createEvent(target: FocusableElement, e: EventBase): EventBase { | ||
let clientX = e.clientX; | ||
let clientY = e.clientY; | ||
return { | ||
@@ -821,3 +865,5 @@ currentTarget: target, | ||
metaKey: e.metaKey, | ||
altKey: e.altKey | ||
altKey: e.altKey, | ||
clientX, | ||
clientY | ||
}; | ||
@@ -824,0 +870,0 @@ } |
@@ -13,4 +13,4 @@ /* | ||
import {RefObject, useCallback} from 'react'; | ||
import {ScrollEvents} from '@react-types/shared'; | ||
import {RefObject, ScrollEvents} from '@react-types/shared'; | ||
import {useCallback} from 'react'; | ||
import {useEvent} from '@react-aria/utils'; | ||
@@ -24,3 +24,3 @@ | ||
// scroll wheel needs to be added not passively so it's cancelable, small helper hook to remember that | ||
export function useScrollWheel(props: ScrollWheelProps, ref: RefObject<HTMLElement>): void { | ||
export function useScrollWheel(props: ScrollWheelProps, ref: RefObject<HTMLElement | null>): void { | ||
let {onScroll, isDisabled} = props; | ||
@@ -27,0 +27,0 @@ let onScrollHandler = useCallback((e) => { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
717889
8358
Updated@react-aria/ssr@^3.9.5
Updated@react-aria/utils@^3.25.0
Updated@react-types/shared@^3.24.0