@react-aria/utils 3.23.1 → 3.24.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.
- package/dist/chain.main.js +26 -0
- package/dist/chain.main.js.map +1 -0
- package/dist/chain.mjs +21 -0
- package/dist/chain.module.js +21 -0
- package/dist/chain.module.js.map +1 -0
- package/dist/domHelpers.main.js +19 -0
- package/dist/domHelpers.main.js.map +1 -0
- package/dist/domHelpers.mjs +13 -0
- package/dist/domHelpers.module.js +13 -0
- package/dist/domHelpers.module.js.map +1 -0
- package/dist/filterDOMProps.main.js +45 -0
- package/dist/filterDOMProps.main.js.map +1 -0
- package/dist/filterDOMProps.mjs +40 -0
- package/dist/filterDOMProps.module.js +40 -0
- package/dist/filterDOMProps.module.js.map +1 -0
- package/dist/focusWithoutScrolling.main.js +72 -0
- package/dist/focusWithoutScrolling.main.js.map +1 -0
- package/dist/focusWithoutScrolling.mjs +67 -0
- package/dist/focusWithoutScrolling.module.js +67 -0
- package/dist/focusWithoutScrolling.module.js.map +1 -0
- package/dist/getOffset.main.js +24 -0
- package/dist/getOffset.main.js.map +1 -0
- package/dist/getOffset.mjs +19 -0
- package/dist/getOffset.module.js +19 -0
- package/dist/getOffset.module.js.map +1 -0
- package/dist/getScrollParent.main.js +28 -0
- package/dist/getScrollParent.main.js.map +1 -0
- package/dist/getScrollParent.mjs +23 -0
- package/dist/getScrollParent.module.js +23 -0
- package/dist/getScrollParent.module.js.map +1 -0
- package/dist/getScrollParents.main.js +30 -0
- package/dist/getScrollParents.main.js.map +1 -0
- package/dist/getScrollParents.mjs +25 -0
- package/dist/getScrollParents.module.js +25 -0
- package/dist/getScrollParents.module.js.map +1 -0
- package/dist/import.mjs +32 -1232
- package/dist/isScrollable.main.js +25 -0
- package/dist/isScrollable.main.js.map +1 -0
- package/dist/isScrollable.mjs +20 -0
- package/dist/isScrollable.module.js +20 -0
- package/dist/isScrollable.module.js.map +1 -0
- package/dist/isVirtualEvent.main.js +41 -0
- package/dist/isVirtualEvent.main.js.map +1 -0
- package/dist/isVirtualEvent.mjs +35 -0
- package/dist/isVirtualEvent.module.js +35 -0
- package/dist/isVirtualEvent.module.js.map +1 -0
- package/dist/main.js +80 -1282
- package/dist/main.js.map +1 -1
- package/dist/mergeProps.main.js +51 -0
- package/dist/mergeProps.main.js.map +1 -0
- package/dist/mergeProps.mjs +42 -0
- package/dist/mergeProps.module.js +42 -0
- package/dist/mergeProps.module.js.map +1 -0
- package/dist/mergeRefs.main.js +28 -0
- package/dist/mergeRefs.main.js.map +1 -0
- package/dist/mergeRefs.mjs +23 -0
- package/dist/mergeRefs.module.js +23 -0
- package/dist/mergeRefs.module.js.map +1 -0
- package/dist/module.js +32 -1232
- package/dist/module.js.map +1 -1
- package/dist/openLink.main.js +143 -0
- package/dist/openLink.main.js.map +1 -0
- package/dist/openLink.mjs +129 -0
- package/dist/openLink.module.js +129 -0
- package/dist/openLink.module.js.map +1 -0
- package/dist/platform.main.js +64 -0
- package/dist/platform.main.js.map +1 -0
- package/dist/platform.mjs +51 -0
- package/dist/platform.module.js +51 -0
- package/dist/platform.module.js.map +1 -0
- package/dist/runAfterTransition.main.js +82 -0
- package/dist/runAfterTransition.main.js.map +1 -0
- package/dist/runAfterTransition.mjs +77 -0
- package/dist/runAfterTransition.module.js +77 -0
- package/dist/runAfterTransition.module.js.map +1 -0
- package/dist/scrollIntoView.main.js +96 -0
- package/dist/scrollIntoView.main.js.map +1 -0
- package/dist/scrollIntoView.mjs +90 -0
- package/dist/scrollIntoView.module.js +90 -0
- package/dist/scrollIntoView.module.js.map +1 -0
- package/dist/types.d.ts +17 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/useDeepMemo.main.js +30 -0
- package/dist/useDeepMemo.main.js.map +1 -0
- package/dist/useDeepMemo.mjs +25 -0
- package/dist/useDeepMemo.module.js +25 -0
- package/dist/useDeepMemo.module.js.map +1 -0
- package/dist/useDescription.main.js +59 -0
- package/dist/useDescription.main.js.map +1 -0
- package/dist/useDescription.mjs +54 -0
- package/dist/useDescription.module.js +54 -0
- package/dist/useDescription.module.js.map +1 -0
- package/dist/useDrag1D.main.js +139 -0
- package/dist/useDrag1D.main.js.map +1 -0
- package/dist/useDrag1D.mjs +134 -0
- package/dist/useDrag1D.module.js +134 -0
- package/dist/useDrag1D.module.js.map +1 -0
- package/dist/useEffectEvent.main.js +37 -0
- package/dist/useEffectEvent.main.js.map +1 -0
- package/dist/useEffectEvent.mjs +32 -0
- package/dist/useEffectEvent.module.js +32 -0
- package/dist/useEffectEvent.module.js.map +1 -0
- package/dist/useEvent.main.js +42 -0
- package/dist/useEvent.main.js.map +1 -0
- package/dist/useEvent.mjs +37 -0
- package/dist/useEvent.module.js +37 -0
- package/dist/useEvent.module.js.map +1 -0
- package/dist/useFormReset.main.js +41 -0
- package/dist/useFormReset.main.js.map +1 -0
- package/dist/useFormReset.mjs +36 -0
- package/dist/useFormReset.module.js +36 -0
- package/dist/useFormReset.module.js.map +1 -0
- package/dist/useGlobalListeners.main.js +63 -0
- package/dist/useGlobalListeners.main.js.map +1 -0
- package/dist/useGlobalListeners.mjs +58 -0
- package/dist/useGlobalListeners.module.js +58 -0
- package/dist/useGlobalListeners.module.js.map +1 -0
- package/dist/useId.main.js +93 -0
- package/dist/useId.main.js.map +1 -0
- package/dist/useId.mjs +86 -0
- package/dist/useId.module.js +86 -0
- package/dist/useId.module.js.map +1 -0
- package/dist/useLabels.main.js +44 -0
- package/dist/useLabels.main.js.map +1 -0
- package/dist/useLabels.mjs +39 -0
- package/dist/useLabels.module.js +39 -0
- package/dist/useLabels.module.js.map +1 -0
- package/dist/useLayoutEffect.main.js +27 -0
- package/dist/useLayoutEffect.main.js.map +1 -0
- package/dist/useLayoutEffect.mjs +18 -0
- package/dist/useLayoutEffect.module.js +18 -0
- package/dist/useLayoutEffect.module.js.map +1 -0
- package/dist/useObjectRef.main.js +37 -0
- package/dist/useObjectRef.main.js.map +1 -0
- package/dist/useObjectRef.mjs +32 -0
- package/dist/useObjectRef.module.js +32 -0
- package/dist/useObjectRef.module.js.map +1 -0
- package/dist/useResizeObserver.main.js +40 -0
- package/dist/useResizeObserver.main.js.map +1 -0
- package/dist/useResizeObserver.mjs +35 -0
- package/dist/useResizeObserver.module.js +35 -0
- package/dist/useResizeObserver.module.js.map +1 -0
- package/dist/useSyncRef.main.js +32 -0
- package/dist/useSyncRef.main.js.map +1 -0
- package/dist/useSyncRef.mjs +27 -0
- package/dist/useSyncRef.module.js +27 -0
- package/dist/useSyncRef.module.js.map +1 -0
- package/dist/useUpdateEffect.main.js +38 -0
- package/dist/useUpdateEffect.main.js.map +1 -0
- package/dist/useUpdateEffect.mjs +33 -0
- package/dist/useUpdateEffect.module.js +33 -0
- package/dist/useUpdateEffect.module.js.map +1 -0
- package/dist/useValueEffect.main.js +58 -0
- package/dist/useValueEffect.main.js.map +1 -0
- package/dist/useValueEffect.mjs +53 -0
- package/dist/useValueEffect.module.js +53 -0
- package/dist/useValueEffect.module.js.map +1 -0
- package/dist/useViewportSize.main.js +56 -0
- package/dist/useViewportSize.main.js.map +1 -0
- package/dist/useViewportSize.mjs +51 -0
- package/dist/useViewportSize.module.js +51 -0
- package/dist/useViewportSize.module.js.map +1 -0
- package/package.json +5 -5
- package/src/filterDOMProps.ts +1 -0
- package/src/getScrollParent.ts +2 -10
- package/src/getScrollParents.ts +26 -0
- package/src/index.ts +4 -2
- package/src/isScrollable.ts +22 -0
- package/src/mergeRefs.ts +2 -2
- package/src/openLink.tsx +25 -9
- package/src/scrollIntoView.ts +3 -5
package/src/getScrollParent.ts
CHANGED
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
+
import {isScrollable} from './isScrollable';
|
|
14
|
+
|
|
13
15
|
export function getScrollParent(node: Element, checkForOverflow?: boolean): Element {
|
|
14
16
|
let scrollableNode: Element | null = node;
|
|
15
17
|
if (isScrollable(scrollableNode, checkForOverflow)) {
|
|
@@ -23,13 +25,3 @@ export function getScrollParent(node: Element, checkForOverflow?: boolean): Elem
|
|
|
23
25
|
return scrollableNode || document.scrollingElement || document.documentElement;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
export function isScrollable(node: Element, checkForOverflow?: boolean): boolean {
|
|
27
|
-
let style = window.getComputedStyle(node);
|
|
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;
|
|
35
|
-
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {isScrollable} from './isScrollable';
|
|
14
|
+
|
|
15
|
+
export function getScrollParents(node: Element, checkForOverflow?: boolean): Element[] {
|
|
16
|
+
const scrollParents: Element[] = [];
|
|
17
|
+
|
|
18
|
+
while (node && node !== document.documentElement) {
|
|
19
|
+
if (isScrollable(node, checkForOverflow)) {
|
|
20
|
+
scrollParents.push(node);
|
|
21
|
+
}
|
|
22
|
+
node = node.parentElement as Element;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return scrollParents;
|
|
26
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -17,7 +17,7 @@ export {mergeRefs} from './mergeRefs';
|
|
|
17
17
|
export {filterDOMProps} from './filterDOMProps';
|
|
18
18
|
export {focusWithoutScrolling} from './focusWithoutScrolling';
|
|
19
19
|
export {getOffset} from './getOffset';
|
|
20
|
-
export {openLink, getSyntheticLinkProps, RouterProvider, shouldClientNavigate, useRouter} from './openLink';
|
|
20
|
+
export {openLink, getSyntheticLinkProps, RouterProvider, shouldClientNavigate, useRouter, useLinkProps} from './openLink';
|
|
21
21
|
export {runAfterTransition} from './runAfterTransition';
|
|
22
22
|
export {useDrag1D} from './useDrag1D';
|
|
23
23
|
export {useGlobalListeners} from './useGlobalListeners';
|
|
@@ -27,7 +27,9 @@ export {useUpdateEffect} from './useUpdateEffect';
|
|
|
27
27
|
export {useLayoutEffect} from './useLayoutEffect';
|
|
28
28
|
export {useResizeObserver} from './useResizeObserver';
|
|
29
29
|
export {useSyncRef} from './useSyncRef';
|
|
30
|
-
export {getScrollParent
|
|
30
|
+
export {getScrollParent} from './getScrollParent';
|
|
31
|
+
export {getScrollParents} from './getScrollParents';
|
|
32
|
+
export {isScrollable} from './isScrollable';
|
|
31
33
|
export {useViewportSize} from './useViewportSize';
|
|
32
34
|
export {useDescription} from './useDescription';
|
|
33
35
|
export {isMac, isIPhone, isIPad, isIOS, isAppleDevice, isWebKit, isChrome, isAndroid, isFirefox} from './platform';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export function isScrollable(node: Element, checkForOverflow?: boolean): boolean {
|
|
14
|
+
let style = window.getComputedStyle(node);
|
|
15
|
+
let isScrollable = /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);
|
|
16
|
+
|
|
17
|
+
if (isScrollable && checkForOverflow) {
|
|
18
|
+
isScrollable = node.scrollHeight !== node.clientHeight || node.scrollWidth !== node.clientWidth;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return isScrollable;
|
|
22
|
+
}
|
package/src/mergeRefs.ts
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {ForwardedRef} from 'react';
|
|
13
|
+
import {ForwardedRef, MutableRefObject} from 'react';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Merges multiple refs into one. Works with either callback or object refs.
|
|
17
17
|
*/
|
|
18
|
-
export function mergeRefs<T>(...refs: ForwardedRef<T>
|
|
18
|
+
export function mergeRefs<T>(...refs: Array<ForwardedRef<T> | MutableRefObject<T>>): ForwardedRef<T> {
|
|
19
19
|
if (refs.length === 1) {
|
|
20
20
|
return refs[0];
|
|
21
21
|
}
|
package/src/openLink.tsx
CHANGED
|
@@ -11,22 +11,25 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import {focusWithoutScrolling, isMac, isWebKit} from './index';
|
|
14
|
+
import {Href, LinkDOMProps, RouterOptions} from '@react-types/shared';
|
|
14
15
|
import {isFirefox, isIPad} from './platform';
|
|
15
|
-
import {LinkDOMProps} from '@react-types/shared';
|
|
16
16
|
import React, {createContext, ReactNode, useContext, useMemo} from 'react';
|
|
17
17
|
|
|
18
18
|
interface Router {
|
|
19
19
|
isNative: boolean,
|
|
20
|
-
open: (target: Element, modifiers: Modifiers) => void
|
|
20
|
+
open: (target: Element, modifiers: Modifiers, href: Href, routerOptions: RouterOptions | undefined) => void,
|
|
21
|
+
useHref: (href: Href) => string
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
const RouterContext = createContext<Router>({
|
|
24
25
|
isNative: true,
|
|
25
|
-
open: openSyntheticLink
|
|
26
|
+
open: openSyntheticLink,
|
|
27
|
+
useHref: (href) => href
|
|
26
28
|
});
|
|
27
29
|
|
|
28
30
|
interface RouterProviderProps {
|
|
29
|
-
navigate: (path:
|
|
31
|
+
navigate: (path: Href, routerOptions: RouterOptions | undefined) => void,
|
|
32
|
+
useHref?: (href: Href) => string,
|
|
30
33
|
children: ReactNode
|
|
31
34
|
}
|
|
32
35
|
|
|
@@ -35,20 +38,21 @@ interface RouterProviderProps {
|
|
|
35
38
|
* and provides it to all nested React Aria links to enable client side navigation.
|
|
36
39
|
*/
|
|
37
40
|
export function RouterProvider(props: RouterProviderProps) {
|
|
38
|
-
let {children, navigate} = props;
|
|
41
|
+
let {children, navigate, useHref} = props;
|
|
39
42
|
|
|
40
43
|
let ctx = useMemo(() => ({
|
|
41
44
|
isNative: false,
|
|
42
|
-
open: (target: Element, modifiers: Modifiers) => {
|
|
45
|
+
open: (target: Element, modifiers: Modifiers, href: Href, routerOptions: RouterOptions | undefined) => {
|
|
43
46
|
getSyntheticLink(target, link => {
|
|
44
47
|
if (shouldClientNavigate(link, modifiers)) {
|
|
45
|
-
navigate(
|
|
48
|
+
navigate(href, routerOptions);
|
|
46
49
|
} else {
|
|
47
50
|
openLink(link, modifiers);
|
|
48
51
|
}
|
|
49
52
|
});
|
|
50
|
-
}
|
|
51
|
-
|
|
53
|
+
},
|
|
54
|
+
useHref: useHref || ((href) => href)
|
|
55
|
+
}), [navigate, useHref]);
|
|
52
56
|
|
|
53
57
|
return (
|
|
54
58
|
<RouterContext.Provider value={ctx}>
|
|
@@ -152,3 +156,15 @@ export function getSyntheticLinkProps(props: LinkDOMProps) {
|
|
|
152
156
|
'data-referrer-policy': props.referrerPolicy
|
|
153
157
|
};
|
|
154
158
|
}
|
|
159
|
+
|
|
160
|
+
export function useLinkProps(props: LinkDOMProps) {
|
|
161
|
+
let router = useRouter();
|
|
162
|
+
return {
|
|
163
|
+
href: props?.href ? router.useHref(props?.href) : undefined,
|
|
164
|
+
target: props?.target,
|
|
165
|
+
rel: props?.rel,
|
|
166
|
+
download: props?.download,
|
|
167
|
+
ping: props?.ping,
|
|
168
|
+
referrerPolicy: props?.referrerPolicy
|
|
169
|
+
};
|
|
170
|
+
}
|
package/src/scrollIntoView.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* governing permissions and limitations under the License.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import {getScrollParents} from './getScrollParents';
|
|
14
14
|
|
|
15
15
|
interface ScrollIntoViewportOpts {
|
|
16
16
|
/** The optional containing element of the target to be centered in the viewport. */
|
|
@@ -99,12 +99,10 @@ export function scrollIntoViewport(targetElement: Element, opts?: ScrollIntoView
|
|
|
99
99
|
targetElement.scrollIntoView?.({block: 'nearest'});
|
|
100
100
|
}
|
|
101
101
|
} else {
|
|
102
|
-
let
|
|
102
|
+
let scrollParents = getScrollParents(targetElement);
|
|
103
103
|
// If scrolling is prevented, we don't want to scroll the body since it might move the overlay partially offscreen and the user can't scroll it back into view.
|
|
104
|
-
|
|
104
|
+
for (let scrollParent of scrollParents) {
|
|
105
105
|
scrollIntoView(scrollParent as HTMLElement, targetElement as HTMLElement);
|
|
106
|
-
targetElement = scrollParent;
|
|
107
|
-
scrollParent = getScrollParent(targetElement);
|
|
108
106
|
}
|
|
109
107
|
}
|
|
110
108
|
}
|