@fluentui/react-utilities 0.0.0-nightlya372ad979820211103.1 → 0.0.0-nightlyc49127232120220201.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/CHANGELOG.json +120 -6
- package/CHANGELOG.md +30 -6
- package/dist/react-utilities.d.ts +134 -81
- package/lib/compose/getSlots.d.ts +11 -10
- package/lib/compose/getSlots.js +20 -28
- package/lib/compose/getSlots.js.map +1 -1
- package/lib/compose/nullRender.js +1 -3
- package/lib/compose/nullRender.js.map +1 -1
- package/lib/compose/resolveShorthand.d.ts +5 -5
- package/lib/compose/resolveShorthand.js +11 -10
- package/lib/compose/resolveShorthand.js.map +1 -1
- package/lib/compose/types.d.ts +48 -27
- package/lib/compose/types.js.map +1 -1
- package/lib/hooks/index.d.ts +1 -1
- package/lib/hooks/index.js +1 -1
- package/lib/hooks/index.js.map +1 -1
- package/lib/hooks/useBoolean.js +10 -21
- package/lib/hooks/useBoolean.js.map +1 -1
- package/lib/hooks/useConst.js +1 -1
- package/lib/hooks/useConst.js.map +1 -1
- package/lib/hooks/useControllableState.d.ts +16 -6
- package/lib/hooks/useControllableState.js +26 -25
- package/lib/hooks/useControllableState.js.map +1 -1
- package/lib/hooks/useEventCallback.js +6 -12
- package/lib/hooks/useEventCallback.js.map +1 -1
- package/lib/hooks/useFirstMount.js +1 -1
- package/lib/hooks/useFirstMount.js.map +1 -1
- package/lib/hooks/useForceUpdate.js +1 -3
- package/lib/hooks/useForceUpdate.js.map +1 -1
- package/lib/hooks/useId.js +2 -4
- package/lib/hooks/useId.js.map +1 -1
- package/lib/hooks/useIsomorphicLayoutEffect.js +1 -1
- package/lib/hooks/useIsomorphicLayoutEffect.js.map +1 -1
- package/lib/hooks/useMergedRefs.js +5 -13
- package/lib/hooks/useMergedRefs.js.map +1 -1
- package/lib/hooks/useMount.js +3 -3
- package/lib/hooks/useMount.js.map +1 -1
- package/lib/hooks/useOnClickOutside.js +30 -36
- package/lib/hooks/useOnClickOutside.js.map +1 -1
- package/lib/hooks/useOnScrollOutside.js +13 -15
- package/lib/hooks/useOnScrollOutside.js.map +1 -1
- package/lib/hooks/usePrevious.js +3 -3
- package/lib/hooks/usePrevious.js.map +1 -1
- package/lib/hooks/useTimeout.js +13 -17
- package/lib/hooks/useTimeout.js.map +1 -1
- package/lib/hooks/useTriggerElement.d.ts +18 -0
- package/lib/hooks/useTriggerElement.js +90 -0
- package/lib/hooks/useTriggerElement.js.map +1 -0
- package/lib/hooks/useUnmount.js +5 -7
- package/lib/hooks/useUnmount.js.map +1 -1
- package/lib/ssr/SSRContext.js +9 -15
- package/lib/ssr/SSRContext.js.map +1 -1
- package/lib/utils/applyTriggerPropsToChildren.d.ts +1 -1
- package/lib/utils/applyTriggerPropsToChildren.js +1 -1
- package/lib/utils/applyTriggerPropsToChildren.js.map +1 -1
- package/lib/utils/clamp.js +1 -3
- package/lib/utils/clamp.js.map +1 -1
- package/lib/utils/getNativeElementProps.d.ts +22 -0
- package/lib/utils/getNativeElementProps.js +24 -2
- package/lib/utils/getNativeElementProps.js.map +1 -1
- package/lib/utils/getRTLSafeKey.js +1 -1
- package/lib/utils/getRTLSafeKey.js.map +1 -1
- package/lib/utils/getReactCallbackName.d.ts +25 -0
- package/lib/utils/getReactCallbackName.js +26 -0
- package/lib/utils/getReactCallbackName.js.map +1 -0
- package/lib/utils/omit.js +2 -2
- package/lib/utils/omit.js.map +1 -1
- package/lib/utils/onlyChild.d.ts +1 -1
- package/lib/utils/onlyChild.js +2 -2
- package/lib/utils/onlyChild.js.map +1 -1
- package/lib/utils/properties.js +55 -44
- package/lib/utils/properties.js.map +1 -1
- package/lib/utils/shouldPreventDefaultOnKeyDown.js +4 -4
- package/lib/utils/shouldPreventDefaultOnKeyDown.js.map +1 -1
- package/lib-commonjs/compose/getSlots.d.ts +11 -10
- package/lib-commonjs/compose/getSlots.js +23 -32
- package/lib-commonjs/compose/getSlots.js.map +1 -1
- package/lib-commonjs/compose/index.js +1 -1
- package/lib-commonjs/compose/nullRender.js +1 -3
- package/lib-commonjs/compose/nullRender.js.map +1 -1
- package/lib-commonjs/compose/resolveShorthand.d.ts +5 -5
- package/lib-commonjs/compose/resolveShorthand.js +12 -12
- package/lib-commonjs/compose/resolveShorthand.js.map +1 -1
- package/lib-commonjs/compose/types.d.ts +48 -27
- package/lib-commonjs/compose/types.js.map +1 -1
- package/lib-commonjs/hooks/index.d.ts +1 -1
- package/lib-commonjs/hooks/index.js +3 -3
- package/lib-commonjs/hooks/index.js.map +1 -1
- package/lib-commonjs/hooks/useBoolean.js +12 -23
- package/lib-commonjs/hooks/useBoolean.js.map +1 -1
- package/lib-commonjs/hooks/useConst.js +2 -2
- package/lib-commonjs/hooks/useConst.js.map +1 -1
- package/lib-commonjs/hooks/useControllableState.d.ts +16 -6
- package/lib-commonjs/hooks/useControllableState.js +28 -27
- package/lib-commonjs/hooks/useControllableState.js.map +1 -1
- package/lib-commonjs/hooks/useEventCallback.js +8 -14
- package/lib-commonjs/hooks/useEventCallback.js.map +1 -1
- package/lib-commonjs/hooks/useFirstMount.js +2 -2
- package/lib-commonjs/hooks/useFirstMount.js.map +1 -1
- package/lib-commonjs/hooks/useForceUpdate.js +2 -4
- package/lib-commonjs/hooks/useForceUpdate.js.map +1 -1
- package/lib-commonjs/hooks/useId.js +4 -6
- package/lib-commonjs/hooks/useId.js.map +1 -1
- package/lib-commonjs/hooks/useIsomorphicLayoutEffect.js +2 -2
- package/lib-commonjs/hooks/useIsomorphicLayoutEffect.js.map +1 -1
- package/lib-commonjs/hooks/useMergedRefs.js +6 -15
- package/lib-commonjs/hooks/useMergedRefs.js.map +1 -1
- package/lib-commonjs/hooks/useMount.js +4 -4
- package/lib-commonjs/hooks/useMount.js.map +1 -1
- package/lib-commonjs/hooks/useOnClickOutside.js +32 -38
- package/lib-commonjs/hooks/useOnClickOutside.js.map +1 -1
- package/lib-commonjs/hooks/useOnScrollOutside.js +15 -17
- package/lib-commonjs/hooks/useOnScrollOutside.js.map +1 -1
- package/lib-commonjs/hooks/usePrevious.js +4 -4
- package/lib-commonjs/hooks/usePrevious.js.map +1 -1
- package/lib-commonjs/hooks/useTimeout.js +15 -19
- package/lib-commonjs/hooks/useTimeout.js.map +1 -1
- package/lib-commonjs/hooks/useTriggerElement.d.ts +18 -0
- package/lib-commonjs/hooks/useTriggerElement.js +105 -0
- package/lib-commonjs/hooks/useTriggerElement.js.map +1 -0
- package/lib-commonjs/hooks/useUnmount.js +6 -8
- package/lib-commonjs/hooks/useUnmount.js.map +1 -1
- package/lib-commonjs/index.js +1 -1
- package/lib-commonjs/ssr/SSRContext.js +9 -15
- package/lib-commonjs/ssr/SSRContext.js.map +1 -1
- package/lib-commonjs/ssr/index.js +1 -1
- package/lib-commonjs/utils/applyTriggerPropsToChildren.d.ts +1 -1
- package/lib-commonjs/utils/applyTriggerPropsToChildren.js +3 -3
- package/lib-commonjs/utils/applyTriggerPropsToChildren.js.map +1 -1
- package/lib-commonjs/utils/clamp.js +1 -3
- package/lib-commonjs/utils/clamp.js.map +1 -1
- package/lib-commonjs/utils/getNativeElementProps.d.ts +22 -0
- package/lib-commonjs/utils/getNativeElementProps.js +28 -4
- package/lib-commonjs/utils/getNativeElementProps.js.map +1 -1
- package/lib-commonjs/utils/getRTLSafeKey.js +1 -1
- package/lib-commonjs/utils/getRTLSafeKey.js.map +1 -1
- package/lib-commonjs/utils/getReactCallbackName.d.ts +25 -0
- package/lib-commonjs/utils/getReactCallbackName.js +35 -0
- package/lib-commonjs/utils/getReactCallbackName.js.map +1 -0
- package/lib-commonjs/utils/index.js +1 -1
- package/lib-commonjs/utils/omit.js +2 -2
- package/lib-commonjs/utils/omit.js.map +1 -1
- package/lib-commonjs/utils/onlyChild.d.ts +1 -1
- package/lib-commonjs/utils/onlyChild.js +3 -3
- package/lib-commonjs/utils/onlyChild.js.map +1 -1
- package/lib-commonjs/utils/properties.js +50 -39
- package/lib-commonjs/utils/properties.js.map +1 -1
- package/lib-commonjs/utils/shouldPreventDefaultOnKeyDown.js +5 -5
- package/lib-commonjs/utils/shouldPreventDefaultOnKeyDown.js.map +1 -1
- package/package.json +6 -11
- package/lib/hooks/useControllableValue.d.ts +0 -20
- package/lib/hooks/useControllableValue.js +0 -62
- package/lib/hooks/useControllableValue.js.map +0 -1
- package/lib-commonjs/hooks/useControllableValue.d.ts +0 -20
- package/lib-commonjs/hooks/useControllableValue.js +0 -73
- package/lib-commonjs/hooks/useControllableValue.js.map +0 -1
package/lib/hooks/useId.js
CHANGED
@@ -19,9 +19,7 @@ export function resetIdsForTests() {
|
|
19
19
|
*/
|
20
20
|
|
21
21
|
export function useId(prefix, providedId) {
|
22
|
-
|
23
|
-
return React.useMemo(
|
24
|
-
return providedId || "" + prefix + ++contextValue.current;
|
25
|
-
}, [prefix, providedId, contextValue]);
|
22
|
+
const contextValue = useSSRContext();
|
23
|
+
return React.useMemo(() => providedId || `${prefix}${++contextValue.current}`, [prefix, providedId, contextValue]);
|
26
24
|
}
|
27
25
|
//# sourceMappingURL=useId.js.map
|
package/lib/hooks/useId.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,sBAAT,EAAiC,aAAjC,QAAsD,cAAtD;AAEA;;;;AAIG;;AACH,OAAM,SAAU,gBAAV,GAA0B;AAC9B,EAAA,sBAAsB,CAAC,OAAvB,GAAiC,CAAjC;AACD;AAED;;;;;;;AAOG;;AACH,OAAM,SAAU,KAAV,CAAgB,MAAhB,EAAiC,UAAjC,EAAoD;AACxD,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useId.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,sBAAT,EAAiC,aAAjC,QAAsD,cAAtD;AAEA;;;;AAIG;;AACH,OAAM,SAAU,gBAAV,GAA0B;AAC9B,EAAA,sBAAsB,CAAC,OAAvB,GAAiC,CAAjC;AACD;AAED;;;;;;;AAOG;;AACH,OAAM,SAAU,KAAV,CAAgB,MAAhB,EAAiC,UAAjC,EAAoD;AACxD,QAAM,YAAY,GAAG,aAAa,EAAlC;AAEA,SAAO,KAAK,CAAC,OAAN,CAAc,MAAM,UAAU,IAAI,GAAG,MAAM,GAAG,EAAE,YAAY,CAAC,OAAO,EAApE,EAAwE,CAAC,MAAD,EAAS,UAAT,EAAqB,YAArB,CAAxE,CAAP;AACD","sourceRoot":""}
|
@@ -11,5 +11,5 @@ import { canUseDOM } from '../ssr/index';
|
|
11
11
|
*/
|
12
12
|
// eslint-disable-next-line no-restricted-properties
|
13
13
|
|
14
|
-
export
|
14
|
+
export const useIsomorphicLayoutEffect = /*#__PURE__*/canUseDOM() ? React.useLayoutEffect : React.useEffect;
|
15
15
|
//# sourceMappingURL=useIsomorphicLayoutEffect.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useIsomorphicLayoutEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,SAAT,QAA0B,cAA1B;AAEA;;;;;;;;AAQG;AACH;;AACA,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useIsomorphicLayoutEffect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,SAAT,QAA0B,cAA1B;AAEA;;;;;;;;AAQG;AACH;;AACA,OAAO,MAAM,yBAAyB,GAA2B,aAAA,SAAS,KAAK,KAAK,CAAC,eAAX,GAA6B,KAAK,CAAC,SAAtG","sourceRoot":""}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { __spreadArrays } from "tslib";
|
2
1
|
import * as React from 'react';
|
3
2
|
/**
|
4
3
|
* React hook to merge multiple React refs (either MutableRefObjects or ref callbacks) into a single ref callback that
|
@@ -7,20 +6,12 @@ import * as React from 'react';
|
|
7
6
|
* @returns A function with an attached "current" prop, so that it can be treated like a RefObject.
|
8
7
|
*/
|
9
8
|
|
10
|
-
export function useMergedRefs() {
|
11
|
-
|
12
|
-
|
13
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
14
|
-
refs[_i] = arguments[_i];
|
15
|
-
}
|
16
|
-
|
17
|
-
var mergedCallback = React.useCallback(function (value) {
|
9
|
+
export function useMergedRefs(...refs) {
|
10
|
+
const mergedCallback = React.useCallback(value => {
|
18
11
|
// Update the "current" prop hanging on the function.
|
19
12
|
mergedCallback.current = value;
|
20
13
|
|
21
|
-
for (
|
22
|
-
var ref = refs_1[_i];
|
23
|
-
|
14
|
+
for (const ref of refs) {
|
24
15
|
if (typeof ref === 'function') {
|
25
16
|
ref(value);
|
26
17
|
} else if (ref) {
|
@@ -28,7 +19,8 @@ export function useMergedRefs() {
|
|
28
19
|
ref.current = value;
|
29
20
|
}
|
30
21
|
}
|
31
|
-
},
|
22
|
+
}, // eslint-disable-next-line react-hooks/exhaustive-deps -- already exhaustive
|
23
|
+
[...refs]);
|
32
24
|
return mergedCallback;
|
33
25
|
}
|
34
26
|
//# sourceMappingURL=useMergedRefs.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useMergedRefs.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"sources":["../../src/hooks/useMergedRefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAQA;;;;;AAKG;;AACH,OAAM,SAAU,aAAV,CAA2B,GAAG,IAA9B,EAAgE;AACpE,QAAM,cAAc,GAA0B,KAAK,CAAC,WAAN,CAC3C,KAAD,IAAa;AACX;AACE,IAAA,cAAwD,CAAC,OAAzD,GAAmE,KAAnE;;AAEF,SAAK,MAAM,GAAX,IAAkB,IAAlB,EAAwB;AACtB,UAAI,OAAO,GAAP,KAAe,UAAnB,EAA+B;AAC7B,QAAA,GAAG,CAAC,KAAD,CAAH;AACD,OAFD,MAEO,IAAI,GAAJ,EAAS;AACd;AACE,QAAA,GAA6C,CAAC,OAA9C,GAAwD,KAAxD;AACH;AACF;AACF,GAb2C,EAc5C;AACA,GAAC,GAAG,IAAJ,CAf4C,CAA9C;AAkBA,SAAO,cAAP;AACD","sourceRoot":""}
|
package/lib/hooks/useMount.js
CHANGED
@@ -5,10 +5,10 @@ import * as React from 'react';
|
|
5
5
|
* @param callback - Function to call before mount.
|
6
6
|
*/
|
7
7
|
|
8
|
-
export
|
9
|
-
|
8
|
+
export const useMount = callback => {
|
9
|
+
const mountRef = React.useRef(callback);
|
10
10
|
mountRef.current = callback;
|
11
|
-
React.useEffect(
|
11
|
+
React.useEffect(() => {
|
12
12
|
var _a;
|
13
13
|
|
14
14
|
(_a = mountRef.current) === null || _a === void 0 ? void 0 : _a.call(mountRef);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useMount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAEA;;;;AAIG;;AACH,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useMount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAEA;;;;AAIG;;AACH,OAAO,MAAM,QAAQ,GAAI,QAAD,IAAyB;AAC/C,QAAM,QAAQ,GAAG,KAAK,CAAC,MAAN,CAAa,QAAb,CAAjB;AACA,EAAA,QAAQ,CAAC,OAAT,GAAmB,QAAnB;AACA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAK;;;AACnB,KAAA,EAAA,GAAA,QAAQ,CAAC,OAAT,MAAgB,IAAhB,IAAgB,EAAA,KAAA,KAAA,CAAhB,GAAgB,KAAA,CAAhB,GAAgB,EAAA,CAAA,IAAA,CAAhB,QAAgB,CAAhB;AACD,GAFD,EAEG,EAFH;AAGD,CANM","sourceRoot":""}
|
@@ -4,34 +4,32 @@ import { useEventCallback } from './useEventCallback';
|
|
4
4
|
* Utility to perform checks where a click/touch event was made outside a component
|
5
5
|
*/
|
6
6
|
|
7
|
-
export
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
export const useOnClickOutside = options => {
|
8
|
+
const {
|
9
|
+
refs,
|
10
|
+
callback,
|
11
|
+
element,
|
12
|
+
disabled,
|
13
|
+
contains: containsProp
|
14
|
+
} = options;
|
15
|
+
const timeoutId = React.useRef(undefined);
|
14
16
|
useIFrameFocus(!disabled, element, callback);
|
15
|
-
|
16
|
-
|
17
|
-
return !!(parent === null || parent === void 0 ? void 0 : parent.contains(child));
|
18
|
-
};
|
17
|
+
const listener = useEventCallback(ev => {
|
18
|
+
const contains = containsProp || ((parent, child) => !!(parent === null || parent === void 0 ? void 0 : parent.contains(child)));
|
19
19
|
|
20
|
-
|
21
|
-
return !contains(ref.current || null, ev.target);
|
22
|
-
});
|
20
|
+
const isOutside = refs.every(ref => !contains(ref.current || null, ev.target));
|
23
21
|
|
24
22
|
if (isOutside && !disabled) {
|
25
23
|
callback(ev);
|
26
24
|
}
|
27
25
|
});
|
28
|
-
React.useEffect(
|
26
|
+
React.useEffect(() => {
|
29
27
|
// Store the current event to avoid triggering handlers immediately
|
30
28
|
// Note this depends on a deprecated but extremely well supported quirk of the web platform
|
31
29
|
// https://github.com/facebook/react/issues/20074
|
32
|
-
|
30
|
+
let currentEvent = getWindowEvent(window);
|
33
31
|
|
34
|
-
|
32
|
+
const conditionalHandler = event => {
|
35
33
|
// Skip if this event is the same as the one running when we added the handlers
|
36
34
|
if (event === currentEvent) {
|
37
35
|
currentEvent = undefined;
|
@@ -49,10 +47,10 @@ export var useOnClickOutside = function (options) {
|
|
49
47
|
} // Garbage collect this event after it's no longer useful to avoid memory leaks
|
50
48
|
|
51
49
|
|
52
|
-
timeoutId.current = window.setTimeout(
|
50
|
+
timeoutId.current = window.setTimeout(() => {
|
53
51
|
currentEvent = undefined;
|
54
52
|
}, 1);
|
55
|
-
return
|
53
|
+
return () => {
|
56
54
|
element === null || element === void 0 ? void 0 : element.removeEventListener('click', conditionalHandler, true);
|
57
55
|
element === null || element === void 0 ? void 0 : element.removeEventListener('touchstart', conditionalHandler, true);
|
58
56
|
element === null || element === void 0 ? void 0 : element.removeEventListener('contextmenu', conditionalHandler, true);
|
@@ -62,7 +60,7 @@ export var useOnClickOutside = function (options) {
|
|
62
60
|
}, [listener, element, disabled]);
|
63
61
|
};
|
64
62
|
|
65
|
-
|
63
|
+
const getWindowEvent = target => {
|
66
64
|
var _a, _b, _c;
|
67
65
|
|
68
66
|
if (target) {
|
@@ -78,7 +76,7 @@ var getWindowEvent = function (target) {
|
|
78
76
|
return undefined;
|
79
77
|
};
|
80
78
|
|
81
|
-
|
79
|
+
const FUI_FRAME_EVENT = 'fuiframefocus';
|
82
80
|
/**
|
83
81
|
* Since click events do not propagate past iframes, we use focus to detect if a
|
84
82
|
* click has happened inside an iframe, since the only ways of focusing inside an
|
@@ -94,45 +92,41 @@ var FUI_FRAME_EVENT = 'fuiframefocus';
|
|
94
92
|
* @param pollDuration - in milliseconds
|
95
93
|
*/
|
96
94
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
}
|
101
|
-
|
102
|
-
var timeoutRef = React.useRef();
|
103
|
-
var listener = useEventCallback(function (e) {
|
95
|
+
const useIFrameFocus = (enableFrameFocusDispatch, targetDocument, callback, pollDuration = 1000) => {
|
96
|
+
const timeoutRef = React.useRef();
|
97
|
+
const listener = useEventCallback(e => {
|
104
98
|
if (callback) {
|
105
99
|
callback(e);
|
106
100
|
}
|
107
101
|
}); // Adds listener to the custom iframe focus event
|
108
102
|
|
109
|
-
React.useEffect(
|
103
|
+
React.useEffect(() => {
|
110
104
|
if (enableFrameFocusDispatch) {
|
111
105
|
targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.addEventListener(FUI_FRAME_EVENT, listener, true);
|
112
106
|
}
|
113
107
|
|
114
|
-
return
|
108
|
+
return () => {
|
115
109
|
targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.removeEventListener(FUI_FRAME_EVENT, listener, true);
|
116
110
|
};
|
117
111
|
}, [targetDocument, enableFrameFocusDispatch, listener]); // Starts polling for the active element
|
118
112
|
|
119
|
-
React.useEffect(
|
113
|
+
React.useEffect(() => {
|
120
114
|
var _a;
|
121
115
|
|
122
116
|
if (enableFrameFocusDispatch) {
|
123
|
-
timeoutRef.current = (_a = targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.defaultView) === null || _a === void 0 ? void 0 : _a.setInterval(
|
124
|
-
|
117
|
+
timeoutRef.current = (_a = targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.defaultView) === null || _a === void 0 ? void 0 : _a.setInterval(() => {
|
118
|
+
const activeElement = targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.activeElement;
|
125
119
|
|
126
120
|
if ((activeElement === null || activeElement === void 0 ? void 0 : activeElement.tagName) === 'IFRAME') {
|
127
|
-
|
121
|
+
const event = new CustomEvent(FUI_FRAME_EVENT, {
|
128
122
|
bubbles: true
|
129
123
|
});
|
130
|
-
activeElement.dispatchEvent(
|
124
|
+
activeElement.dispatchEvent(event);
|
131
125
|
}
|
132
126
|
}, pollDuration);
|
133
127
|
}
|
134
128
|
|
135
|
-
return
|
129
|
+
return () => {
|
136
130
|
var _a;
|
137
131
|
|
138
132
|
(_a = targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.defaultView) === null || _a === void 0 ? void 0 : _a.clearTimeout(timeoutRef.current);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useOnClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,gBAAT,QAAiC,oBAAjC;AA8BA;;AAEG;;AACH,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useOnClickOutside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,gBAAT,QAAiC,oBAAjC;AA8BA;;AAEG;;AACH,OAAO,MAAM,iBAAiB,GAAI,OAAD,IAA8C;AAC7E,QAAM;AAAE,IAAA,IAAF;AAAQ,IAAA,QAAR;AAAkB,IAAA,OAAlB;AAA2B,IAAA,QAA3B;AAAqC,IAAA,QAAQ,EAAE;AAA/C,MAAgE,OAAtE;AACA,QAAM,SAAS,GAAG,KAAK,CAAC,MAAN,CAAiC,SAAjC,CAAlB;AACA,EAAA,cAAc,CAAC,CAAC,QAAF,EAAY,OAAZ,EAAqB,QAArB,CAAd;AAEA,QAAM,QAAQ,GAAG,gBAAgB,CAAE,EAAD,IAAgC;AAChE,UAAM,QAAQ,GACZ,YAAY,KAAK,CAAC,MAAD,EAAS,KAAT,KAAmB,CAAC,EAAC,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAE,QAAR,CAAiB,KAAjB,CAAD,CAAzB,CADd;;AAGA,UAAM,SAAS,GAAG,IAAI,CAAC,KAAL,CAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAJ,IAAe,IAAhB,EAAsB,EAAE,CAAC,MAAzB,CAA3B,CAAlB;;AACA,QAAI,SAAS,IAAI,CAAC,QAAlB,EAA4B;AAC1B,MAAA,QAAQ,CAAC,EAAD,CAAR;AACD;AACF,GARgC,CAAjC;AAUA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAK;AACnB;AACA;AACA;AACA,QAAI,YAAY,GAAG,cAAc,CAAC,MAAD,CAAjC;;AAEA,UAAM,kBAAkB,GAAI,KAAD,IAAmC;AAC5D;AACA,UAAI,KAAK,KAAK,YAAd,EAA4B;AAC1B,QAAA,YAAY,GAAG,SAAf;AACA;AACD;;AAED,MAAA,QAAQ,CAAC,KAAD,CAAR;AACD,KARD;;AAUA,QAAI,CAAC,QAAL,EAAe;AACb;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,gBAAT,CAA0B,OAA1B,EAAmC,kBAAnC,EAAuD,IAAvD,CAAA;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,gBAAT,CAA0B,YAA1B,EAAwC,kBAAxC,EAA4D,IAA5D,CAAA;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,gBAAT,CAA0B,aAA1B,EAAyC,kBAAzC,EAA6D,IAA7D,CAAA;AACD,KArBkB,CAuBnB;;;AACA,IAAA,SAAS,CAAC,OAAV,GAAoB,MAAM,CAAC,UAAP,CAAkB,MAAK;AACzC,MAAA,YAAY,GAAG,SAAf;AACD,KAFmB,EAEjB,CAFiB,CAApB;AAIA,WAAO,MAAK;AACV,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,mBAAT,CAA6B,OAA7B,EAAsC,kBAAtC,EAA0D,IAA1D,CAAA;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,mBAAT,CAA6B,YAA7B,EAA2C,kBAA3C,EAA+D,IAA/D,CAAA;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,mBAAT,CAA6B,aAA7B,EAA4C,kBAA5C,EAAgE,IAAhE,CAAA;AAEA,MAAA,YAAY,CAAC,SAAS,CAAC,OAAX,CAAZ;AACA,MAAA,YAAY,GAAG,SAAf;AACD,KAPD;AAQD,GApCD,EAoCG,CAAC,QAAD,EAAW,OAAX,EAAoB,QAApB,CApCH;AAqCD,CApDM;;AAsDP,MAAM,cAAc,GAAI,MAAD,IAA6C;;;AAClE,MAAI,MAAJ,EAAY;AACV,QAAI,OAAQ,MAAiB,CAAC,MAA1B,KAAqC,QAArC,IAAkD,MAAiB,CAAC,MAAlB,KAA6B,MAAnF,EAA2F;AACzF;AACA,aAAO,MAAM,CAAC,KAAd;AACD,KAJS,CAMV;;;AACA,WAAO,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,MAAe,CAAC,aAAjB,MAA8B,IAA9B,IAA8B,EAAA,KAAA,KAAA,CAA9B,GAA8B,KAAA,CAA9B,GAA8B,EAAA,CAAE,WAAhC,MAA2C,IAA3C,IAA2C,EAAA,KAAA,KAAA,CAA3C,GAA2C,KAAA,CAA3C,GAA2C,EAAA,CAAE,KAA7C,MAAkD,IAAlD,IAAkD,EAAA,KAAA,KAAA,CAAlD,GAAkD,EAAlD,GAAsD,SAA7D;AACD;;AAED,SAAO,SAAP;AACD,CAZD;;AAcA,MAAM,eAAe,GAAG,eAAxB;AAEA;;;;;;;;;;;;;AAaG;;AACH,MAAM,cAAc,GAAG,CACrB,wBADqB,EAErB,cAFqB,EAGrB,QAHqB,EAIrB,YAAA,GAAuB,IAJF,KAKnB;AACF,QAAM,UAAU,GAAG,KAAK,CAAC,MAAN,EAAnB;AAEA,QAAM,QAAQ,GAAG,gBAAgB,CAAE,CAAD,IAAa;AAC7C,QAAI,QAAJ,EAAc;AACZ,MAAA,QAAQ,CAAC,CAAD,CAAR;AACD;AACF,GAJgC,CAAjC,CAHE,CASF;;AACA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAK;AACnB,QAAI,wBAAJ,EAA8B;AAC5B,MAAA,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,gBAAhB,CAAiC,eAAjC,EAAkD,QAAlD,EAA4D,IAA5D,CAAA;AACD;;AACD,WAAO,MAAK;AACV,MAAA,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,mBAAhB,CAAoC,eAApC,EAAqD,QAArD,EAA+D,IAA/D,CAAA;AACD,KAFD;AAGD,GAPD,EAOG,CAAC,cAAD,EAAiB,wBAAjB,EAA2C,QAA3C,CAPH,EAVE,CAmBF;;AACA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAK;;;AACnB,QAAI,wBAAJ,EAA8B;AAC5B,MAAA,UAAU,CAAC,OAAX,GAAqB,CAAA,EAAA,GAAA,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,WAAhB,MAA2B,IAA3B,IAA2B,EAAA,KAAA,KAAA,CAA3B,GAA2B,KAAA,CAA3B,GAA2B,EAAA,CAAE,WAAF,CAAc,MAAK;AACjE,cAAM,aAAa,GAAG,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,aAAtC;;AACA,YAAI,CAAA,aAAa,KAAA,IAAb,IAAA,aAAa,KAAA,KAAA,CAAb,GAAa,KAAA,CAAb,GAAA,aAAa,CAAE,OAAf,MAA2B,QAA/B,EAAyC;AACvC,gBAAM,KAAK,GAAG,IAAI,WAAJ,CAAgB,eAAhB,EAAiC;AAAE,YAAA,OAAO,EAAE;AAAX,WAAjC,CAAd;AACA,UAAA,aAAa,CAAC,aAAd,CAA4B,KAA5B;AACD;AACF,OAN+C,EAM7C,YAN6C,CAAhD;AAOD;;AACD,WAAO,MAAK;;;AACV,OAAA,EAAA,GAAA,cAAc,KAAA,IAAd,IAAA,cAAc,KAAA,KAAA,CAAd,GAAc,KAAA,CAAd,GAAA,cAAc,CAAE,WAAhB,MAA2B,IAA3B,IAA2B,EAAA,KAAA,KAAA,CAA3B,GAA2B,KAAA,CAA3B,GAA2B,EAAA,CAAE,YAAF,CAAe,UAAU,CAAC,OAA1B,CAA3B;AACD,KAFD;AAGD,GAbD,EAaG,CAAC,cAAD,EAAiB,wBAAjB,EAA2C,YAA3C,CAbH;AAcD,CAvCD","sourceRoot":""}
|
@@ -4,32 +4,30 @@ import { useEventCallback } from './useEventCallback';
|
|
4
4
|
* Utility to perform checks where a click/touch event was made outside a component
|
5
5
|
*/
|
6
6
|
|
7
|
-
export
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
export const useOnScrollOutside = options => {
|
8
|
+
const {
|
9
|
+
refs,
|
10
|
+
callback,
|
11
|
+
element,
|
12
|
+
disabled,
|
13
|
+
contains: containsProp
|
14
|
+
} = options;
|
15
|
+
const listener = useEventCallback(ev => {
|
16
|
+
const contains = containsProp || ((parent, child) => !!(parent === null || parent === void 0 ? void 0 : parent.contains(child)));
|
17
17
|
|
18
|
-
|
19
|
-
return !contains(ref.current || null, ev.target);
|
20
|
-
});
|
18
|
+
const isOutside = refs.every(ref => !contains(ref.current || null, ev.target));
|
21
19
|
|
22
20
|
if (isOutside && !disabled) {
|
23
21
|
callback(ev);
|
24
22
|
}
|
25
23
|
});
|
26
|
-
React.useEffect(
|
24
|
+
React.useEffect(() => {
|
27
25
|
if (!disabled) {
|
28
26
|
element === null || element === void 0 ? void 0 : element.addEventListener('wheel', listener);
|
29
27
|
element === null || element === void 0 ? void 0 : element.addEventListener('touchmove', listener);
|
30
28
|
}
|
31
29
|
|
32
|
-
return
|
30
|
+
return () => {
|
33
31
|
element === null || element === void 0 ? void 0 : element.removeEventListener('wheel', listener);
|
34
32
|
element === null || element === void 0 ? void 0 : element.removeEventListener('touchmove', listener);
|
35
33
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useOnScrollOutside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,gBAAT,QAAiC,oBAAjC;AAGA;;AAEG;;AACH,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useOnScrollOutside.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,gBAAT,QAAiC,oBAAjC;AAGA;;AAEG;;AACH,OAAO,MAAM,kBAAkB,GAAI,OAAD,IAA8C;AAC9E,QAAM;AAAE,IAAA,IAAF;AAAQ,IAAA,QAAR;AAAkB,IAAA,OAAlB;AAA2B,IAAA,QAA3B;AAAqC,IAAA,QAAQ,EAAE;AAA/C,MAAgE,OAAtE;AAEA,QAAM,QAAQ,GAAG,gBAAgB,CAAE,EAAD,IAAgC;AAChE,UAAM,QAAQ,GACZ,YAAY,KAAK,CAAC,MAAD,EAAS,KAAT,KAAmB,CAAC,EAAC,MAAM,KAAA,IAAN,IAAA,MAAM,KAAA,KAAA,CAAN,GAAM,KAAA,CAAN,GAAA,MAAM,CAAE,QAAR,CAAiB,KAAjB,CAAD,CAAzB,CADd;;AAGA,UAAM,SAAS,GAAG,IAAI,CAAC,KAAL,CAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAJ,IAAe,IAAhB,EAAsB,EAAE,CAAC,MAAzB,CAA3B,CAAlB;;AACA,QAAI,SAAS,IAAI,CAAC,QAAlB,EAA4B;AAC1B,MAAA,QAAQ,CAAC,EAAD,CAAR;AACD;AACF,GARgC,CAAjC;AAUA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAK;AACnB,QAAI,CAAC,QAAL,EAAe;AACb,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,gBAAT,CAA0B,OAA1B,EAAmC,QAAnC,CAAA;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,gBAAT,CAA0B,WAA1B,EAAuC,QAAvC,CAAA;AACD;;AAED,WAAO,MAAK;AACV,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,mBAAT,CAA6B,OAA7B,EAAsC,QAAtC,CAAA;AACA,MAAA,OAAO,KAAA,IAAP,IAAA,OAAO,KAAA,KAAA,CAAP,GAAO,KAAA,CAAP,GAAA,OAAO,CAAE,mBAAT,CAA6B,WAA7B,EAA0C,QAA1C,CAAA;AACD,KAHD;AAID,GAVD,EAUG,CAAC,QAAD,EAAW,OAAX,EAAoB,QAApB,CAVH;AAWD,CAxBM","sourceRoot":""}
|
package/lib/hooks/usePrevious.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import * as React from 'react';
|
2
|
-
export
|
3
|
-
|
4
|
-
React.useEffect(
|
2
|
+
export const usePrevious = value => {
|
3
|
+
const ref = React.useRef(null);
|
4
|
+
React.useEffect(() => {
|
5
5
|
ref.current = value;
|
6
6
|
}, [value]);
|
7
7
|
return ref.current;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/usePrevious.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAEA,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/hooks/usePrevious.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAEA,OAAO,MAAM,WAAW,GAAyB,KAAtB,IAA0C;AACnE,QAAM,GAAG,GAAG,KAAK,CAAC,MAAN,CAA+B,IAA/B,CAAZ;AACA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAK;AACnB,IAAA,GAAG,CAAC,OAAJ,GAAc,KAAd;AACD,GAFD,EAEG,CAAC,KAAD,CAFH;AAGA,SAAO,GAAG,CAAC,OAAX;AACD,CANM","sourceRoot":""}
|
package/lib/hooks/useTimeout.js
CHANGED
@@ -9,25 +9,21 @@ import { useConst } from './useConst';
|
|
9
9
|
*/
|
10
10
|
|
11
11
|
export function useTimeout() {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
timeout.id = undefined;
|
23
|
-
}
|
12
|
+
const timeout = useConst(() => ({
|
13
|
+
id: undefined,
|
14
|
+
set: (fn, delay) => {
|
15
|
+
timeout.clear();
|
16
|
+
timeout.id = setTimeout(fn, delay);
|
17
|
+
},
|
18
|
+
clear: () => {
|
19
|
+
if (timeout.id !== undefined) {
|
20
|
+
clearTimeout(timeout.id);
|
21
|
+
timeout.id = undefined;
|
24
22
|
}
|
25
|
-
}
|
26
|
-
}); // Clean up the timeout when the component is unloaded
|
23
|
+
}
|
24
|
+
})); // Clean up the timeout when the component is unloaded
|
27
25
|
|
28
|
-
React.useEffect(
|
29
|
-
return timeout.clear;
|
30
|
-
}, [timeout]);
|
26
|
+
React.useEffect(() => timeout.clear, [timeout]);
|
31
27
|
return [timeout.set, timeout.clear];
|
32
28
|
}
|
33
29
|
//# sourceMappingURL=useTimeout.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useTimeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,QAAT,QAAyB,YAAzB;AAEA;;;;;;AAMG;;AACH,OAAM,SAAU,UAAV,GAAoB;AACxB,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useTimeout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,QAAT,QAAyB,YAAzB;AAEA;;;;;;AAMG;;AACH,OAAM,SAAU,UAAV,GAAoB;AACxB,QAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;AAC9B,IAAA,EAAE,EAAE,SAD0B;AAE9B,IAAA,GAAG,EAAE,CAAC,EAAD,EAAiB,KAAjB,KAAkC;AACrC,MAAA,OAAO,CAAC,KAAR;AACA,MAAA,OAAO,CAAC,EAAR,GAAa,UAAU,CAAC,EAAD,EAAK,KAAL,CAAvB;AACD,KAL6B;AAM9B,IAAA,KAAK,EAAE,MAAK;AACV,UAAI,OAAO,CAAC,EAAR,KAAe,SAAnB,EAA8B;AAC5B,QAAA,YAAY,CAAC,OAAO,CAAC,EAAT,CAAZ;AACA,QAAA,OAAO,CAAC,EAAR,GAAa,SAAb;AACD;AACF;AAX6B,GAAP,CAAD,CAAxB,CADwB,CAexB;;AACA,EAAA,KAAK,CAAC,SAAN,CAAgB,MAAM,OAAO,CAAC,KAA9B,EAAqC,CAAC,OAAD,CAArC;AAEA,SAAO,CAAC,OAAO,CAAC,GAAT,EAAc,OAAO,CAAC,KAAtB,CAAP;AACD","sourceRoot":""}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
export declare type UseTriggerElementOptions<TriggerProps> = {
|
3
|
+
/** An actual trigger element or render props function. */
|
4
|
+
children: React.ReactElement | ((props: TriggerProps) => React.ReactNode) | null | undefined;
|
5
|
+
/** A ref to trigger element. */
|
6
|
+
ref: React.Ref<unknown> | undefined;
|
7
|
+
/** Props that are passed to a parent component and should be forwarded down. */
|
8
|
+
outerProps: React.HTMLProps<unknown>;
|
9
|
+
/** Custom props including callbacks. */
|
10
|
+
overrideProps: TriggerProps;
|
11
|
+
};
|
12
|
+
/**
|
13
|
+
* A hook that handles "trigger" pattern.
|
14
|
+
*
|
15
|
+
* Clones a passed element or calls render props. Merges props including refs and callbacks, callbacks are kept stable
|
16
|
+
* by reference.
|
17
|
+
*/
|
18
|
+
export declare function useTriggerElement<TriggerProps extends React.HTMLProps<unknown>>(options: UseTriggerElementOptions<TriggerProps>): React.ReactNode;
|
@@ -0,0 +1,90 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { applyTriggerPropsToChildren } from '../utils/applyTriggerPropsToChildren';
|
3
|
+
import { getReactCallbackName } from '../utils/getReactCallbackName';
|
4
|
+
import { onlyChild } from '../utils/onlyChild';
|
5
|
+
import { useEventCallback } from './useEventCallback';
|
6
|
+
import { useMergedRefs } from './useMergedRefs';
|
7
|
+
const CAPTURE_CALLBACK_REGEX = /on[A-Z].+Capture$/;
|
8
|
+
const CALLBACK_REGEX = /on[A-Z].+/;
|
9
|
+
/**
|
10
|
+
* A hook that handles "trigger" pattern.
|
11
|
+
*
|
12
|
+
* Clones a passed element or calls render props. Merges props including refs and callbacks, callbacks are kept stable
|
13
|
+
* by reference.
|
14
|
+
*/
|
15
|
+
|
16
|
+
export function useTriggerElement(options) {
|
17
|
+
const {
|
18
|
+
children,
|
19
|
+
ref,
|
20
|
+
outerProps,
|
21
|
+
overrideProps
|
22
|
+
} = options;
|
23
|
+
let childProps = {};
|
24
|
+
let childRef = null; // child can be a render func, `applyTriggerPropsToChildren`does the same check again
|
25
|
+
// TODO figure out a way to only do this check once
|
26
|
+
|
27
|
+
if ( /*#__PURE__*/React.isValidElement(children)) {
|
28
|
+
const child = onlyChild(children);
|
29
|
+
childProps = child.props;
|
30
|
+
childRef = child.ref;
|
31
|
+
} // Two separate callbacks are needed to handle properly bubble and capture callbacks
|
32
|
+
// "getReactCallbackName()" could return proper callback name, but it's possible only with React 17
|
33
|
+
|
34
|
+
|
35
|
+
const handleBubbleEvent = useEventCallback(ev => {
|
36
|
+
var _a, _b, _c;
|
37
|
+
|
38
|
+
const callbackName = getReactCallbackName(ev);
|
39
|
+
|
40
|
+
if (callbackName) {
|
41
|
+
// Typecast is required as "ev" is "React.SyntheticEvent" while callbacks have stricter typings and accept
|
42
|
+
// "FocusEvent", "ClipboardEvent" and etc.
|
43
|
+
|
44
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
45
|
+
(_a = childProps[callbackName]) === null || _a === void 0 ? void 0 : _a.call(childProps, ev);
|
46
|
+
(_b = overrideProps[callbackName]) === null || _b === void 0 ? void 0 : _b.call(overrideProps, ev);
|
47
|
+
(_c = outerProps[callbackName]) === null || _c === void 0 ? void 0 : _c.call(outerProps, ev);
|
48
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
49
|
+
}
|
50
|
+
});
|
51
|
+
const handleCaptureEvent = useEventCallback(ev => {
|
52
|
+
var _a, _b, _c;
|
53
|
+
|
54
|
+
const callbackName = getReactCallbackName(ev) + 'Capture';
|
55
|
+
|
56
|
+
if (callbackName) {
|
57
|
+
// Typecast is required as "ev" is "React.SyntheticEvent" while callbacks have stricter typings and accept
|
58
|
+
// "FocusEvent", "ClipboardEvent" and etc.
|
59
|
+
|
60
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
61
|
+
(_a = childProps[callbackName]) === null || _a === void 0 ? void 0 : _a.call(childProps, ev);
|
62
|
+
(_b = overrideProps[callbackName]) === null || _b === void 0 ? void 0 : _b.call(overrideProps, ev);
|
63
|
+
(_c = outerProps[callbackName]) === null || _c === void 0 ? void 0 : _c.call(outerProps, ev);
|
64
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
65
|
+
}
|
66
|
+
});
|
67
|
+
const mergedPropEntries = Object.entries({ ...outerProps,
|
68
|
+
...overrideProps,
|
69
|
+
...childProps,
|
70
|
+
// Undocumented, but React supports ref cloning through props
|
71
|
+
ref: useMergedRefs(childRef, ref)
|
72
|
+
}); // TODO: fix me after https://github.com/microsoft/fluentui/issues/21229
|
73
|
+
// Causes TS error:
|
74
|
+
// "Property 'fromEntries' does not exist on type 'ObjectConstructor'"
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
76
|
+
|
77
|
+
const triggerProps = Object.fromEntries(mergedPropEntries.map(([propName, propValue]) => {
|
78
|
+
if (propName.match(CAPTURE_CALLBACK_REGEX)) {
|
79
|
+
return [propName, handleCaptureEvent];
|
80
|
+
}
|
81
|
+
|
82
|
+
if (propName.match(CALLBACK_REGEX)) {
|
83
|
+
return [propName, handleBubbleEvent];
|
84
|
+
}
|
85
|
+
|
86
|
+
return [propName, propValue];
|
87
|
+
}));
|
88
|
+
return applyTriggerPropsToChildren(children, triggerProps);
|
89
|
+
}
|
90
|
+
//# sourceMappingURL=useTriggerElement.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useTriggerElement.ts"],"names":[],"mappings":"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","sourceRoot":""}
|
package/lib/hooks/useUnmount.js
CHANGED
@@ -5,15 +5,13 @@ import * as React from 'react';
|
|
5
5
|
* @param callback - Function to call during unmount.
|
6
6
|
*/
|
7
7
|
|
8
|
-
export
|
9
|
-
|
8
|
+
export const useUnmount = callback => {
|
9
|
+
const unmountRef = React.useRef(callback);
|
10
10
|
unmountRef.current = callback;
|
11
|
-
React.useEffect(
|
12
|
-
|
13
|
-
var _a;
|
11
|
+
React.useEffect(() => () => {
|
12
|
+
var _a;
|
14
13
|
|
15
|
-
|
16
|
-
};
|
14
|
+
(_a = unmountRef.current) === null || _a === void 0 ? void 0 : _a.call(unmountRef);
|
17
15
|
}, []);
|
18
16
|
};
|
19
17
|
//# sourceMappingURL=useUnmount.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useUnmount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAEA;;;;AAIG;;AACH,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/hooks/useUnmount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AAEA;;;;AAIG;;AACH,OAAO,MAAM,UAAU,GAAI,QAAD,IAAyB;AACjD,QAAM,UAAU,GAAG,KAAK,CAAC,MAAN,CAAa,QAAb,CAAnB;AACA,EAAA,UAAU,CAAC,OAAX,GAAqB,QAArB;AACA,EAAA,KAAK,CAAC,SAAN,CACE,MAAM,MAAK;;;AACT,KAAA,EAAA,GAAA,UAAU,CAAC,OAAX,MAAkB,IAAlB,IAAkB,EAAA,KAAA,KAAA,CAAlB,GAAkB,KAAA,CAAlB,GAAkB,EAAA,CAAA,IAAA,CAAlB,UAAkB,CAAlB;AACD,GAHH,EAIE,EAJF;AAMD,CATM","sourceRoot":""}
|
package/lib/ssr/SSRContext.js
CHANGED
@@ -6,10 +6,10 @@ import { canUseDOM } from './canUseDOM';
|
|
6
6
|
* @internal
|
7
7
|
*/
|
8
8
|
|
9
|
-
export
|
9
|
+
export const defaultSSRContextValue = {
|
10
10
|
current: 0
|
11
11
|
};
|
12
|
-
export
|
12
|
+
export const SSRContext = /*#__PURE__*/React.createContext(defaultSSRContextValue);
|
13
13
|
/**
|
14
14
|
* @internal
|
15
15
|
*/
|
@@ -24,12 +24,10 @@ export function useSSRContext() {
|
|
24
24
|
* @public
|
25
25
|
*/
|
26
26
|
|
27
|
-
export
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
};
|
32
|
-
})[0];
|
27
|
+
export const SSRProvider = props => {
|
28
|
+
const [value] = React.useState(() => ({
|
29
|
+
current: 0
|
30
|
+
}));
|
33
31
|
return /*#__PURE__*/React.createElement(SSRContext.Provider, {
|
34
32
|
value: value
|
35
33
|
}, props.children);
|
@@ -40,14 +38,10 @@ export var SSRProvider = function (props) {
|
|
40
38
|
*/
|
41
39
|
|
42
40
|
export function useIsSSR() {
|
43
|
-
|
44
|
-
|
45
|
-
var _a = React.useState(isInSSRContext),
|
46
|
-
isSSR = _a[0],
|
47
|
-
setIsSSR = _a[1]; // If we are rendering in a non-DOM environment, and there's no SSRProvider, provide a warning to hint to the
|
41
|
+
const isInSSRContext = useSSRContext() !== defaultSSRContextValue;
|
42
|
+
const [isSSR, setIsSSR] = React.useState(isInSSRContext); // If we are rendering in a non-DOM environment, and there's no SSRProvider, provide a warning to hint to the
|
48
43
|
// developer to add one.
|
49
44
|
|
50
|
-
|
51
45
|
if (process.env.NODE_ENV !== 'production') {
|
52
46
|
if (!isInSSRContext && !canUseDOM()) {
|
53
47
|
// eslint-disable-next-line no-console
|
@@ -61,7 +55,7 @@ export function useIsSSR() {
|
|
61
55
|
// This if statement technically breaks the rules of hooks, but is safe because the condition never changes after
|
62
56
|
// mounting.
|
63
57
|
// eslint-disable-next-line
|
64
|
-
React.useLayoutEffect(
|
58
|
+
React.useLayoutEffect(() => {
|
65
59
|
setIsSSR(false);
|
66
60
|
}, []);
|
67
61
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/ssr/SSRContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,SAAT,QAA0B,aAA1B;AAYA;;;;AAIG;;AACH,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/ssr/SSRContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,SAAT,QAA0B,aAA1B;AAYA;;;;AAIG;;AACH,OAAO,MAAM,sBAAsB,GAAoB;AACrD,EAAA,OAAO,EAAE;AAD4C,CAAhD;AAIP,OAAO,MAAM,UAAU,gBAAG,KAAK,CAAC,aAAN,CAAqC,sBAArC,CAAnB;AAEP;;AAEG;;AACH,OAAM,SAAU,aAAV,GAAuB;AAC3B,SAAO,KAAK,CAAC,UAAN,CAAiB,UAAjB,CAAP;AACD;AAED;;;;;AAKG;;AACH,OAAO,MAAM,WAAW,GAAa,KAAK,IAAG;AAC3C,QAAM,CAAC,KAAD,IAAU,KAAK,CAAC,QAAN,CAAgC,OAAO;AAAE,IAAA,OAAO,EAAE;AAAX,GAAP,CAAhC,CAAhB;AAEA,sBAAO,KAAA,CAAA,aAAA,CAAC,UAAU,CAAC,QAAZ,EAAoB;AAAC,IAAA,KAAK,EAAE;AAAR,GAApB,EAAoC,KAAK,CAAC,QAA1C,CAAP;AACD,CAJM;AAMP;;;AAGG;;AACH,OAAM,SAAU,QAAV,GAAkB;AACtB,QAAM,cAAc,GAAG,aAAa,OAAO,sBAA3C;AACA,QAAM,CAAC,KAAD,EAAQ,QAAR,IAAoB,KAAK,CAAC,QAAN,CAAe,cAAf,CAA1B,CAFsB,CAItB;AACA;;AACA,MAAI,OAAO,CAAC,GAAR,CAAY,QAAZ,KAAyB,YAA7B,EAA2C;AACzC,QAAI,CAAC,cAAD,IAAmB,CAAC,SAAS,EAAjC,EAAqC;AACnC;AACA,MAAA,OAAO,CAAC,KAAR,CACE,4GACE,0CAFJ;AAID;AACF,GAdqB,CAgBtB;AACA;;;AACA,MAAI,SAAS,MAAM,cAAnB,EAAmC;AACjC;AACA;AACA;AACA,IAAA,KAAK,CAAC,eAAN,CAAsB,MAAK;AACzB,MAAA,QAAQ,CAAC,KAAD,CAAR;AACD,KAFD,EAEG,EAFH;AAGD;;AAED,SAAO,KAAP;AACD","sourceRoot":""}
|
@@ -2,4 +2,4 @@ import * as React from 'react';
|
|
2
2
|
/**
|
3
3
|
* Apply the trigger props to the children, either by calling the render function, or cloning with the new props.
|
4
4
|
*/
|
5
|
-
export declare const applyTriggerPropsToChildren: <TTriggerProps>(children: React.ReactElement<any, string |
|
5
|
+
export declare const applyTriggerPropsToChildren: <TTriggerProps>(children: React.ReactElement<any, string | React.JSXElementConstructor<any>> | ((props: TTriggerProps) => React.ReactNode) | null | undefined, triggerProps: TTriggerProps) => React.ReactNode;
|
@@ -4,7 +4,7 @@ import { onlyChild } from './onlyChild';
|
|
4
4
|
* Apply the trigger props to the children, either by calling the render function, or cloning with the new props.
|
5
5
|
*/
|
6
6
|
|
7
|
-
export
|
7
|
+
export const applyTriggerPropsToChildren = (children, triggerProps) => {
|
8
8
|
if (typeof children === 'function') {
|
9
9
|
return children(triggerProps);
|
10
10
|
} else if (children) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/utils/applyTriggerPropsToChildren.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,SAAT,QAA0B,aAA1B;AAEA;;AAEG;;AACH,OAAO,
|
1
|
+
{"version":3,"sources":["../../src/utils/applyTriggerPropsToChildren.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAZ,MAAuB,OAAvB;AACA,SAAS,SAAT,QAA0B,aAA1B;AAEA;;AAEG;;AACH,OAAO,MAAM,2BAA2B,GAAG,CACzC,QADyC,EAEzC,YAFyC,KAGtB;AACnB,MAAI,OAAO,QAAP,KAAoB,UAAxB,EAAoC;AAClC,WAAO,QAAQ,CAAC,YAAD,CAAf;AACD,GAFD,MAEO,IAAI,QAAJ,EAAc;AACnB,wBAAO,KAAK,CAAC,YAAN,CAAmB,SAAS,CAAC,QAAD,CAA5B,EAAwC,YAAxC,CAAP;AACD;;AAED,SAAO,QAAP;AACD,CAXM","sourceRoot":""}
|