@onekeyfe/react-native-native-overlay 3.0.162-alpha.268
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/LICENSE +21 -0
- package/NativeOverlay.podspec +30 -0
- package/README.md +35 -0
- package/android/build.gradle +82 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayAnimation.kt +176 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayEntryRootView.kt +415 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayEvents.kt +38 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayHost.kt +174 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayPackage.kt +16 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayPageHostView.kt +122 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayPageHostViewManager.kt +40 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayView.kt +465 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayViewManager.kt +156 -0
- package/android/src/main/jni/CMakeLists.txt +44 -0
- package/android/src/main/jni/RNCNativeOverlay.h +19 -0
- package/common/cpp/react/renderer/components/RNCNativeOverlay/NativeOverlayComponentDescriptor.h +12 -0
- package/common/cpp/react/renderer/components/RNCNativeOverlay/NativeOverlayShadowNode.cpp +12 -0
- package/common/cpp/react/renderer/components/RNCNativeOverlay/NativeOverlayShadowNode.h +41 -0
- package/common/cpp/react/renderer/components/RNCNativeOverlay/NativeOverlayState.h +40 -0
- package/docs/SPEC.md +693 -0
- package/ios/NativeOverlayAnimation.swift +160 -0
- package/ios/NativeOverlayContainerView.swift +688 -0
- package/ios/NativeOverlayKeyboard.swift +88 -0
- package/ios/NativeOverlayPageHostView.swift +98 -0
- package/ios/NativeOverlaySheetController.swift +391 -0
- package/ios/NativeOverlayWindowManager.swift +194 -0
- package/ios/RCTNativeOverlayComponentView.h +11 -0
- package/ios/RCTNativeOverlayComponentView.mm +193 -0
- package/ios/RCTNativeOverlayPageHostComponentView.h +11 -0
- package/ios/RCTNativeOverlayPageHostComponentView.mm +64 -0
- package/lib/module/NativeOverlayNativeComponent.ts +61 -0
- package/lib/module/NativeOverlayPageHostNativeComponent.ts +13 -0
- package/lib/module/OverlayErrors.js +6 -0
- package/lib/module/OverlayErrors.js.map +1 -0
- package/lib/module/OverlayLevelContext.js +27 -0
- package/lib/module/OverlayLevelContext.js.map +1 -0
- package/lib/module/OverlayLevels.js +33 -0
- package/lib/module/OverlayLevels.js.map +1 -0
- package/lib/module/OverlayPageHost.js +24 -0
- package/lib/module/OverlayPageHost.js.map +1 -0
- package/lib/module/OverlayPageHost.web.js +49 -0
- package/lib/module/OverlayPageHost.web.js.map +1 -0
- package/lib/module/OverlayPageScope.js +41 -0
- package/lib/module/OverlayPageScope.js.map +1 -0
- package/lib/module/OverlayStore.js +305 -0
- package/lib/module/OverlayStore.js.map +1 -0
- package/lib/module/OverlayView.js +141 -0
- package/lib/module/OverlayView.js.map +1 -0
- package/lib/module/OverlayView.web.js +290 -0
- package/lib/module/OverlayView.web.js.map +1 -0
- package/lib/module/OverlayViewTypes.js +4 -0
- package/lib/module/OverlayViewTypes.js.map +1 -0
- package/lib/module/animation/motionPresets.js +57 -0
- package/lib/module/animation/motionPresets.js.map +1 -0
- package/lib/module/animation/platformMotionPresets.js +4 -0
- package/lib/module/animation/platformMotionPresets.js.map +1 -0
- package/lib/module/animation/platformMotionPresets.web.js +4 -0
- package/lib/module/animation/platformMotionPresets.web.js.map +1 -0
- package/lib/module/animation/resolveAnimation.js +80 -0
- package/lib/module/animation/resolveAnimation.js.map +1 -0
- package/lib/module/animation/spring.js +69 -0
- package/lib/module/animation/spring.js.map +1 -0
- package/lib/module/animation/types.js +2 -0
- package/lib/module/animation/types.js.map +1 -0
- package/lib/module/index.js +16 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/useOverlayController.js +127 -0
- package/lib/module/useOverlayController.js.map +1 -0
- package/lib/module/useSuspendedPageOwners.js +16 -0
- package/lib/module/useSuspendedPageOwners.js.map +1 -0
- package/lib/module/web/animateTransition.js +115 -0
- package/lib/module/web/animateTransition.js.map +1 -0
- package/lib/module/web/overlayLayers.js +147 -0
- package/lib/module/web/overlayLayers.js.map +1 -0
- package/lib/module/web/useKeyboardShift.js +110 -0
- package/lib/module/web/useKeyboardShift.js.map +1 -0
- package/lib/module/web/useSheetDrag.js +126 -0
- package/lib/module/web/useSheetDrag.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeOverlayNativeComponent.d.ts +41 -0
- package/lib/typescript/src/NativeOverlayNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/NativeOverlayPageHostNativeComponent.d.ts +9 -0
- package/lib/typescript/src/NativeOverlayPageHostNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/OverlayErrors.d.ts +4 -0
- package/lib/typescript/src/OverlayErrors.d.ts.map +1 -0
- package/lib/typescript/src/OverlayLevelContext.d.ts +12 -0
- package/lib/typescript/src/OverlayLevelContext.d.ts.map +1 -0
- package/lib/typescript/src/OverlayLevels.d.ts +13 -0
- package/lib/typescript/src/OverlayLevels.d.ts.map +1 -0
- package/lib/typescript/src/OverlayPageHost.d.ts +9 -0
- package/lib/typescript/src/OverlayPageHost.d.ts.map +1 -0
- package/lib/typescript/src/OverlayPageHost.web.d.ts +11 -0
- package/lib/typescript/src/OverlayPageHost.web.d.ts.map +1 -0
- package/lib/typescript/src/OverlayPageScope.d.ts +17 -0
- package/lib/typescript/src/OverlayPageScope.d.ts.map +1 -0
- package/lib/typescript/src/OverlayStore.d.ts +72 -0
- package/lib/typescript/src/OverlayStore.d.ts.map +1 -0
- package/lib/typescript/src/OverlayView.d.ts +3 -0
- package/lib/typescript/src/OverlayView.d.ts.map +1 -0
- package/lib/typescript/src/OverlayView.web.d.ts +3 -0
- package/lib/typescript/src/OverlayView.web.d.ts.map +1 -0
- package/lib/typescript/src/OverlayViewTypes.d.ts +68 -0
- package/lib/typescript/src/OverlayViewTypes.d.ts.map +1 -0
- package/lib/typescript/src/animation/motionPresets.d.ts +13 -0
- package/lib/typescript/src/animation/motionPresets.d.ts.map +1 -0
- package/lib/typescript/src/animation/platformMotionPresets.d.ts +2 -0
- package/lib/typescript/src/animation/platformMotionPresets.d.ts.map +1 -0
- package/lib/typescript/src/animation/platformMotionPresets.web.d.ts +2 -0
- package/lib/typescript/src/animation/platformMotionPresets.web.d.ts.map +1 -0
- package/lib/typescript/src/animation/resolveAnimation.d.ts +23 -0
- package/lib/typescript/src/animation/resolveAnimation.d.ts.map +1 -0
- package/lib/typescript/src/animation/spring.d.ts +24 -0
- package/lib/typescript/src/animation/spring.d.ts.map +1 -0
- package/lib/typescript/src/animation/types.d.ts +56 -0
- package/lib/typescript/src/animation/types.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +18 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +59 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/useOverlayController.d.ts +29 -0
- package/lib/typescript/src/useOverlayController.d.ts.map +1 -0
- package/lib/typescript/src/useSuspendedPageOwners.d.ts +7 -0
- package/lib/typescript/src/useSuspendedPageOwners.d.ts.map +1 -0
- package/lib/typescript/src/web/animateTransition.d.ts +18 -0
- package/lib/typescript/src/web/animateTransition.d.ts.map +1 -0
- package/lib/typescript/src/web/overlayLayers.d.ts +10 -0
- package/lib/typescript/src/web/overlayLayers.d.ts.map +1 -0
- package/lib/typescript/src/web/useKeyboardShift.d.ts +29 -0
- package/lib/typescript/src/web/useKeyboardShift.d.ts.map +1 -0
- package/lib/typescript/src/web/useSheetDrag.d.ts +13 -0
- package/lib/typescript/src/web/useSheetDrag.d.ts.map +1 -0
- package/package.json +188 -0
- package/react-native.config.js +16 -0
- package/src/NativeOverlayNativeComponent.ts +61 -0
- package/src/NativeOverlayPageHostNativeComponent.ts +13 -0
- package/src/OverlayErrors.ts +3 -0
- package/src/OverlayLevelContext.tsx +32 -0
- package/src/OverlayLevels.ts +40 -0
- package/src/OverlayPageHost.tsx +21 -0
- package/src/OverlayPageHost.web.tsx +53 -0
- package/src/OverlayPageScope.tsx +42 -0
- package/src/OverlayStore.ts +401 -0
- package/src/OverlayView.tsx +165 -0
- package/src/OverlayView.web.tsx +356 -0
- package/src/OverlayViewTypes.ts +81 -0
- package/src/animation/motionPresets.ts +52 -0
- package/src/animation/platformMotionPresets.ts +1 -0
- package/src/animation/platformMotionPresets.web.ts +1 -0
- package/src/animation/resolveAnimation.ts +103 -0
- package/src/animation/spring.ts +80 -0
- package/src/animation/types.ts +71 -0
- package/src/index.ts +55 -0
- package/src/types.ts +79 -0
- package/src/useOverlayController.ts +199 -0
- package/src/useSuspendedPageOwners.ts +26 -0
- package/src/web/animateTransition.ts +137 -0
- package/src/web/overlayLayers.ts +182 -0
- package/src/web/useKeyboardShift.ts +130 -0
- package/src/web/useSheetDrag.ts +143 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useId, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
|
4
|
+
import { OVERLAY_MOTION_PRESETS } from './animation/platformMotionPresets';
|
|
5
|
+
import { resolveOverlayAnimation } from "./animation/resolveAnimation.js";
|
|
6
|
+
import { useOverlayPageScope } from "./OverlayPageScope.js";
|
|
7
|
+
import { findStatusBarOwner, overlayStore } from "./OverlayStore.js";
|
|
8
|
+
function useLatest(value) {
|
|
9
|
+
const ref = useRef(value);
|
|
10
|
+
ref.current = value;
|
|
11
|
+
return ref;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Bridges a declarative overlay to the shared `overlayStore`: requests an
|
|
16
|
+
* entry while `visible`, follows the store's phase, and finalizes the entry
|
|
17
|
+
* once the host reports the end of the exit animation.
|
|
18
|
+
*/
|
|
19
|
+
export function useOverlayController(props) {
|
|
20
|
+
const {
|
|
21
|
+
visible,
|
|
22
|
+
level,
|
|
23
|
+
strategy,
|
|
24
|
+
priority,
|
|
25
|
+
replaceKey,
|
|
26
|
+
blocking,
|
|
27
|
+
dismissOnBackPress,
|
|
28
|
+
presentation = 'center',
|
|
29
|
+
animation,
|
|
30
|
+
statusBarStyle
|
|
31
|
+
} = props;
|
|
32
|
+
const pageScope = useOverlayPageScope();
|
|
33
|
+
const hostKey = props.hostKey ?? pageScope.hostKey;
|
|
34
|
+
const ownerKey = props.ownerKey ?? pageScope.ownerKey;
|
|
35
|
+
// Without a host or owner there is nowhere to anchor a page overlay.
|
|
36
|
+
const scope = props.scope === 'page' && hostKey && ownerKey ? 'page' : 'global';
|
|
37
|
+
const baseId = useId();
|
|
38
|
+
const cycleRef = useRef(0);
|
|
39
|
+
const [entryId, setEntryId] = useState();
|
|
40
|
+
// Set when the store closed the entry (replace, back) while `visible` is
|
|
41
|
+
// still true, so the effect below does not immediately reopen it.
|
|
42
|
+
const closedByStoreRef = useRef(false);
|
|
43
|
+
const propsRef = useLatest(props);
|
|
44
|
+
const snapshot = useSyncExternalStore(overlayStore.subscribe, overlayStore.getSnapshot, overlayStore.getSnapshot);
|
|
45
|
+
const entry = useMemo(() => entryId ? snapshot.entries.find(e => e.id === entryId) ?? snapshot.queued.find(e => e.id === entryId) : undefined, [entryId, snapshot]);
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (!visible) {
|
|
48
|
+
closedByStoreRef.current = false;
|
|
49
|
+
if (entryId) {
|
|
50
|
+
overlayStore.dismiss(entryId, 'programmatic');
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (entryId || closedByStoreRef.current) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
cycleRef.current += 1;
|
|
58
|
+
const id = `overlay-view${baseId}${cycleRef.current}`;
|
|
59
|
+
overlayStore.request({
|
|
60
|
+
id,
|
|
61
|
+
scope,
|
|
62
|
+
hostKey,
|
|
63
|
+
ownerKey,
|
|
64
|
+
level,
|
|
65
|
+
strategy,
|
|
66
|
+
priority,
|
|
67
|
+
replaceKey,
|
|
68
|
+
blocking,
|
|
69
|
+
dismissible: dismissOnBackPress,
|
|
70
|
+
statusBarStyle
|
|
71
|
+
}, {
|
|
72
|
+
onRemoved: reason => {
|
|
73
|
+
setEntryId(current => current === id ? undefined : current);
|
|
74
|
+
if (reason !== 'programmatic') {
|
|
75
|
+
closedByStoreRef.current = true;
|
|
76
|
+
}
|
|
77
|
+
propsRef.current.onClose?.(reason);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
setEntryId(id);
|
|
81
|
+
// Level / strategy changes apply to the next open cycle only.
|
|
82
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
83
|
+
}, [visible, entryId]);
|
|
84
|
+
useEffect(() => () => {
|
|
85
|
+
if (entryId) {
|
|
86
|
+
overlayStore.dismiss(entryId, 'system');
|
|
87
|
+
overlayStore.finalize(entryId);
|
|
88
|
+
}
|
|
89
|
+
}, [entryId]);
|
|
90
|
+
const resolvedAnimation = useMemo(() => resolveOverlayAnimation(presentation, animation, OVERLAY_MOTION_PRESETS), [presentation, animation]);
|
|
91
|
+
const onHostPresented = useCallback(() => {
|
|
92
|
+
propsRef.current.onPresented?.();
|
|
93
|
+
}, [propsRef]);
|
|
94
|
+
const onHostDismissed = useCallback(() => {
|
|
95
|
+
if (!entryId) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const phase = overlayStore.getEntry(entryId)?.phase;
|
|
99
|
+
if (phase === 'active') {
|
|
100
|
+
// Native closed it on its own, e.g. a lower sheet in the same level
|
|
101
|
+
// window was dismissed and UIKit took the ones above with it.
|
|
102
|
+
overlayStore.dismiss(entryId, 'system');
|
|
103
|
+
}
|
|
104
|
+
overlayStore.finalize(entryId);
|
|
105
|
+
}, [entryId]);
|
|
106
|
+
const onHostRequestDismiss = useCallback(reason => {
|
|
107
|
+
const handler = propsRef.current.onRequestDismiss;
|
|
108
|
+
handler?.(reason);
|
|
109
|
+
if (entryId && (!handler || reason === 'pan')) {
|
|
110
|
+
overlayStore.dismiss(entryId, reason);
|
|
111
|
+
}
|
|
112
|
+
}, [entryId, propsRef]);
|
|
113
|
+
return {
|
|
114
|
+
entry,
|
|
115
|
+
mounted: !!entry && entry.phase !== 'queued',
|
|
116
|
+
presented: !!entry && entry.phase === 'active' && (scope === 'page' || !entry.suspended),
|
|
117
|
+
scope,
|
|
118
|
+
ownsStatusBar: !!entryId && findStatusBarOwner(snapshot)?.id === entryId,
|
|
119
|
+
hostKey: scope === 'page' ? hostKey : undefined,
|
|
120
|
+
ownerKey: scope === 'page' ? ownerKey : undefined,
|
|
121
|
+
animation: resolvedAnimation,
|
|
122
|
+
onHostPresented,
|
|
123
|
+
onHostDismissed,
|
|
124
|
+
onHostRequestDismiss
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=useOverlayController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useId","useMemo","useRef","useState","useSyncExternalStore","OVERLAY_MOTION_PRESETS","resolveOverlayAnimation","useOverlayPageScope","findStatusBarOwner","overlayStore","useLatest","value","ref","current","useOverlayController","props","visible","level","strategy","priority","replaceKey","blocking","dismissOnBackPress","presentation","animation","statusBarStyle","pageScope","hostKey","ownerKey","scope","baseId","cycleRef","entryId","setEntryId","closedByStoreRef","propsRef","snapshot","subscribe","getSnapshot","entry","entries","find","e","id","queued","undefined","dismiss","request","dismissible","onRemoved","reason","onClose","finalize","resolvedAnimation","onHostPresented","onPresented","onHostDismissed","phase","getEntry","onHostRequestDismiss","handler","onRequestDismiss","mounted","presented","suspended","ownsStatusBar"],"sourceRoot":"../../src","sources":["useOverlayController.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo, useSyncExternalStore } from 'react';
|
|
4
|
+
import { overlayStore } from "./OverlayStore.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Owners whose page overlays in `hostKey` must be hidden. The page host
|
|
8
|
+
* applies this natively: the owning page may be frozen (freezeOnBlur) and
|
|
9
|
+
* cannot re-render its own overlays.
|
|
10
|
+
*/
|
|
11
|
+
export function useSuspendedPageOwners(hostKey) {
|
|
12
|
+
const snapshot = useSyncExternalStore(overlayStore.subscribe, overlayStore.getSnapshot, overlayStore.getSnapshot);
|
|
13
|
+
const joined = snapshot.entries.filter(e => e.scope === 'page' && e.hostKey === hostKey && e.suspended).map(e => e.ownerKey ?? '').filter(Boolean).toSorted().join('\n');
|
|
14
|
+
return useMemo(() => joined ? [...new Set(joined.split('\n'))] : [], [joined]);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=useSuspendedPageOwners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useSyncExternalStore","overlayStore","useSuspendedPageOwners","hostKey","snapshot","subscribe","getSnapshot","joined","entries","filter","e","scope","suspended","map","ownerKey","Boolean","toSorted","join","Set","split"],"sourceRoot":"../../src","sources":["useSuspendedPageOwners.ts"],"mappings":";;AAAA,SAASA,OAAO,EAAEC,oBAAoB,QAAQ,OAAO;AAErD,SAASC,YAAY,QAAQ,mBAAgB;;AAE7C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAACC,OAAe,EAAY;EAChE,MAAMC,QAAQ,GAAGJ,oBAAoB,CACnCC,YAAY,CAACI,SAAS,EACtBJ,YAAY,CAACK,WAAW,EACxBL,YAAY,CAACK,WACf,CAAC;EACD,MAAMC,MAAM,GAAGH,QAAQ,CAACI,OAAO,CAC5BC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,KAAK,MAAM,IAAID,CAAC,CAACP,OAAO,KAAKA,OAAO,IAAIO,CAAC,CAACE,SAAS,CAAC,CACzEC,GAAG,CAAEH,CAAC,IAAKA,CAAC,CAACI,QAAQ,IAAI,EAAE,CAAC,CAC5BL,MAAM,CAACM,OAAO,CAAC,CACfC,QAAQ,CAAC,CAAC,CACVC,IAAI,CAAC,IAAI,CAAC;EACb,OAAOlB,OAAO,CACZ,MAAOQ,MAAM,GAAG,CAAC,GAAG,IAAIW,GAAG,CAACX,MAAM,CAACY,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAG,EACtD,CAACZ,MAAM,CACT,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { springToCssLinear } from "../animation/spring.js";
|
|
4
|
+
/** Union of the rendered children rects; the content wrapper is full-window. */
|
|
5
|
+
export function measureContentExtent(container) {
|
|
6
|
+
const rects = Array.from(container.children).map(child => child.getBoundingClientRect());
|
|
7
|
+
if (rects.length === 0) {
|
|
8
|
+
return {
|
|
9
|
+
top: 0,
|
|
10
|
+
bottom: window.innerHeight,
|
|
11
|
+
left: 0,
|
|
12
|
+
right: window.innerWidth
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
top: Math.min(...rects.map(r => r.top)),
|
|
17
|
+
bottom: Math.max(...rects.map(r => r.bottom)),
|
|
18
|
+
left: Math.min(...rects.map(r => r.left)),
|
|
19
|
+
right: Math.max(...rects.map(r => r.right))
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function toTiming(motion) {
|
|
23
|
+
if (motion.type === 'timing') {
|
|
24
|
+
const [x1, y1, x2, y2] = motion.timing.easing;
|
|
25
|
+
return {
|
|
26
|
+
duration: motion.timing.durationMs,
|
|
27
|
+
easing: `cubic-bezier(${x1}, ${y1}, ${x2}, ${y2})`
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const {
|
|
31
|
+
durationMs,
|
|
32
|
+
easing
|
|
33
|
+
} = springToCssLinear(motion.spring);
|
|
34
|
+
return {
|
|
35
|
+
duration: durationMs,
|
|
36
|
+
easing
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function prefersReducedMotion() {
|
|
40
|
+
return typeof globalThis.matchMedia === 'function' && globalThis.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** The off-stage keyframe for a transition: where enter starts / exit ends. */
|
|
44
|
+
function hiddenKeyframe(transition, extent) {
|
|
45
|
+
const frame = {};
|
|
46
|
+
if (transition.fade || transition.type === 'fade') {
|
|
47
|
+
frame.opacity = 0;
|
|
48
|
+
}
|
|
49
|
+
if (transition.type === 'slide') {
|
|
50
|
+
const edge = transition.edge ?? 'bottom';
|
|
51
|
+
const distance = transition.distance ?? {
|
|
52
|
+
top: extent.bottom,
|
|
53
|
+
bottom: window.innerHeight - extent.top,
|
|
54
|
+
left: extent.right,
|
|
55
|
+
right: window.innerWidth - extent.left
|
|
56
|
+
}[edge];
|
|
57
|
+
frame.transform = {
|
|
58
|
+
top: `translate3d(0, ${-distance}px, 0)`,
|
|
59
|
+
bottom: `translate3d(0, ${distance}px, 0)`,
|
|
60
|
+
left: `translate3d(${-distance}px, 0, 0)`,
|
|
61
|
+
right: `translate3d(${distance}px, 0, 0)`
|
|
62
|
+
}[edge];
|
|
63
|
+
} else if (transition.type === 'scale') {
|
|
64
|
+
frame.transform = `translate3d(0, ${transition.offsetY ?? 0}px, 0) scale(${transition.scale ?? 0.95})`;
|
|
65
|
+
}
|
|
66
|
+
return frame;
|
|
67
|
+
}
|
|
68
|
+
const VISIBLE_KEYFRAME = {
|
|
69
|
+
opacity: 1,
|
|
70
|
+
transform: 'translate3d(0, 0, 0) scale(1)'
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Runs an enter (`direction: 'in'`) or exit transition on `element`. The
|
|
75
|
+
* slide distance and scale origin come from the children of `contentRoot`,
|
|
76
|
+
* because the content wrapper itself always fills the window.
|
|
77
|
+
*/
|
|
78
|
+
export function animateTransition(element, contentRoot, transition, direction) {
|
|
79
|
+
if (transition.type === 'none') {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const effective = prefersReducedMotion() ? {
|
|
83
|
+
...transition,
|
|
84
|
+
type: 'fade',
|
|
85
|
+
fade: true
|
|
86
|
+
} : transition;
|
|
87
|
+
const extent = measureContentExtent(contentRoot);
|
|
88
|
+
element.style.transformOrigin = `${(extent.left + extent.right) / 2}px ${(extent.top + extent.bottom) / 2}px`;
|
|
89
|
+
const hidden = hiddenKeyframe(effective, extent);
|
|
90
|
+
const visible = {};
|
|
91
|
+
Object.keys(hidden).forEach(key => {
|
|
92
|
+
visible[key] = VISIBLE_KEYFRAME[key];
|
|
93
|
+
});
|
|
94
|
+
const keyframes = direction === 'in' ? [hidden, visible] : [visible, hidden];
|
|
95
|
+
return element.animate(keyframes, {
|
|
96
|
+
...toTiming(effective.motion),
|
|
97
|
+
fill: 'forwards'
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
export function animateBackdrop(element, motion, direction) {
|
|
101
|
+
const keyframes = direction === 'in' ? [{
|
|
102
|
+
opacity: 0
|
|
103
|
+
}, {
|
|
104
|
+
opacity: 1
|
|
105
|
+
}] : [{
|
|
106
|
+
opacity: 1
|
|
107
|
+
}, {
|
|
108
|
+
opacity: 0
|
|
109
|
+
}];
|
|
110
|
+
return element.animate(keyframes, {
|
|
111
|
+
...toTiming(motion),
|
|
112
|
+
fill: 'forwards'
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=animateTransition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["springToCssLinear","measureContentExtent","container","rects","Array","from","children","map","child","getBoundingClientRect","length","top","bottom","window","innerHeight","left","right","innerWidth","Math","min","r","max","toTiming","motion","type","x1","y1","x2","y2","timing","easing","duration","durationMs","spring","prefersReducedMotion","globalThis","matchMedia","matches","hiddenKeyframe","transition","extent","frame","fade","opacity","edge","distance","transform","offsetY","scale","VISIBLE_KEYFRAME","animateTransition","element","contentRoot","direction","undefined","effective","style","transformOrigin","hidden","visible","Object","keys","forEach","key","keyframes","animate","fill","animateBackdrop"],"sourceRoot":"../../../src","sources":["web/animateTransition.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { OVERLAY_LEVELS, OVERLAY_LEVEL_ORDER, OVERLAY_WEB_Z_INDEX_BASE } from "../OverlayLevels.js";
|
|
4
|
+
import { overlayStore } from "../OverlayStore.js";
|
|
5
|
+
const LAYER_ATTRIBUTE = 'data-onekey-overlay-layer';
|
|
6
|
+
export const ENTRY_ATTRIBUTE = 'data-onekey-overlay-entry';
|
|
7
|
+
const APP_ROOT_ID = 'root';
|
|
8
|
+
const layerRoots = new Map();
|
|
9
|
+
const pageHosts = new Map();
|
|
10
|
+
const dismissRequesters = new Map();
|
|
11
|
+
let installed = false;
|
|
12
|
+
function createLayerRoot(level) {
|
|
13
|
+
const root = document.createElement('div');
|
|
14
|
+
root.setAttribute(LAYER_ATTRIBUTE, level);
|
|
15
|
+
Object.assign(root.style, {
|
|
16
|
+
position: 'fixed',
|
|
17
|
+
inset: '0',
|
|
18
|
+
pointerEvents: 'none',
|
|
19
|
+
zIndex: String(OVERLAY_WEB_Z_INDEX_BASE[level]),
|
|
20
|
+
isolation: 'isolate'
|
|
21
|
+
});
|
|
22
|
+
// Keep DOM order equal to level order so equal z-index ties stay correct.
|
|
23
|
+
const next = OVERLAY_LEVELS.slice(OVERLAY_LEVELS.indexOf(level) + 1).map(l => layerRoots.get(l)).find(Boolean);
|
|
24
|
+
document.body.insertBefore(root, next ?? null);
|
|
25
|
+
return root;
|
|
26
|
+
}
|
|
27
|
+
function setInert(element, inert) {
|
|
28
|
+
if (element && element.inert !== inert) {
|
|
29
|
+
element.inert = inert;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Elements outside a page host made inert for a blocking page overlay.
|
|
34
|
+
let pageInertElements = new Set();
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A page host lives inside the app root, so a blocking page overlay cannot
|
|
38
|
+
* inert the app root; inert every sibling on the path from the host up to it
|
|
39
|
+
* instead (other routes, the page itself, navigation chrome).
|
|
40
|
+
*/
|
|
41
|
+
function siblingsOutside(host, root) {
|
|
42
|
+
const siblings = new Set();
|
|
43
|
+
let node = host;
|
|
44
|
+
while (node !== root && node.parentElement) {
|
|
45
|
+
const parent = node.parentElement;
|
|
46
|
+
for (const sibling of Array.from(parent.children)) {
|
|
47
|
+
if (sibling !== node && sibling instanceof HTMLElement) {
|
|
48
|
+
siblings.add(sibling);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
node = parent;
|
|
52
|
+
}
|
|
53
|
+
return siblings;
|
|
54
|
+
}
|
|
55
|
+
function inertEntriesBelow(container, seq) {
|
|
56
|
+
container.querySelectorAll(`[${ENTRY_ATTRIBUTE}]`).forEach(node => {
|
|
57
|
+
setInert(node, Number(node.dataset.stackOrder) < seq);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Everything rendered below the topmost blocking entry becomes inert. */
|
|
62
|
+
function syncInert() {
|
|
63
|
+
const top = overlayStore.getBlockingTop();
|
|
64
|
+
const appRoot = document.getElementById(APP_ROOT_ID);
|
|
65
|
+
let nextPageInert = new Set();
|
|
66
|
+
const pageHost = top?.scope === 'page' ? getOverlayPageHost(top.hostKey) : undefined;
|
|
67
|
+
if (top && pageHost && appRoot?.contains(pageHost)) {
|
|
68
|
+
setInert(appRoot, false);
|
|
69
|
+
nextPageInert = siblingsOutside(pageHost, appRoot);
|
|
70
|
+
inertEntriesBelow(pageHost, top.seq);
|
|
71
|
+
} else {
|
|
72
|
+
setInert(appRoot, !!top);
|
|
73
|
+
}
|
|
74
|
+
pageInertElements.forEach(element => {
|
|
75
|
+
if (!nextPageInert.has(element)) {
|
|
76
|
+
setInert(element, false);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
nextPageInert.forEach(element => setInert(element, true));
|
|
80
|
+
pageInertElements = nextPageInert;
|
|
81
|
+
for (const [level, root] of layerRoots) {
|
|
82
|
+
// Global layers render above every page overlay.
|
|
83
|
+
const below = top?.scope === 'global' && OVERLAY_LEVEL_ORDER[level] < OVERLAY_LEVEL_ORDER[top.level];
|
|
84
|
+
setInert(root, below);
|
|
85
|
+
if (top?.scope === 'global' && level === top.level) {
|
|
86
|
+
inertEntriesBelow(root, top.seq);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function onKeyDown(event) {
|
|
91
|
+
// Escape while composing belongs to the IME.
|
|
92
|
+
if (event.key !== 'Escape' || event.isComposing || event.keyCode === 229) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const resolution = overlayStore.resolveBack();
|
|
96
|
+
if (resolution.kind === 'pass') {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
event.stopPropagation();
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
if (resolution.kind === 'dismiss') {
|
|
102
|
+
dismissRequesters.get(resolution.id)?.('back');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function installOverlayWebManager() {
|
|
106
|
+
if (installed || typeof document === 'undefined') {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
installed = true;
|
|
110
|
+
overlayStore.subscribe(syncInert);
|
|
111
|
+
document.addEventListener('keydown', onKeyDown, true);
|
|
112
|
+
}
|
|
113
|
+
export function getOverlayLayerRoot(level) {
|
|
114
|
+
installOverlayWebManager();
|
|
115
|
+
let root = layerRoots.get(level);
|
|
116
|
+
if (!root || !root.isConnected) {
|
|
117
|
+
root = createLayerRoot(level);
|
|
118
|
+
layerRoots.set(level, root);
|
|
119
|
+
}
|
|
120
|
+
return root;
|
|
121
|
+
}
|
|
122
|
+
export function registerOverlayDismissRequester(id, requester) {
|
|
123
|
+
dismissRequesters.set(id, requester);
|
|
124
|
+
return () => {
|
|
125
|
+
if (dismissRequesters.get(id) === requester) {
|
|
126
|
+
dismissRequesters.delete(id);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Re-run after entry DOM nodes mount, since the store emits before commit. */
|
|
132
|
+
export function scheduleOverlayInertSync() {
|
|
133
|
+
requestAnimationFrame(syncInert);
|
|
134
|
+
}
|
|
135
|
+
export function registerOverlayPageHost(hostKey, element) {
|
|
136
|
+
installOverlayWebManager();
|
|
137
|
+
pageHosts.set(hostKey, element);
|
|
138
|
+
return () => {
|
|
139
|
+
if (pageHosts.get(hostKey) === element) {
|
|
140
|
+
pageHosts.delete(hostKey);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
export function getOverlayPageHost(hostKey) {
|
|
145
|
+
return hostKey ? pageHosts.get(hostKey) : undefined;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=overlayLayers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["OVERLAY_LEVELS","OVERLAY_LEVEL_ORDER","OVERLAY_WEB_Z_INDEX_BASE","overlayStore","LAYER_ATTRIBUTE","ENTRY_ATTRIBUTE","APP_ROOT_ID","layerRoots","Map","pageHosts","dismissRequesters","installed","createLayerRoot","level","root","document","createElement","setAttribute","Object","assign","style","position","inset","pointerEvents","zIndex","String","isolation","next","slice","indexOf","map","l","get","find","Boolean","body","insertBefore","setInert","element","inert","pageInertElements","Set","siblingsOutside","host","siblings","node","parentElement","parent","sibling","Array","from","children","HTMLElement","add","inertEntriesBelow","container","seq","querySelectorAll","forEach","Number","dataset","stackOrder","syncInert","top","getBlockingTop","appRoot","getElementById","nextPageInert","pageHost","scope","getOverlayPageHost","hostKey","undefined","contains","has","below","onKeyDown","event","key","isComposing","keyCode","resolution","resolveBack","kind","stopPropagation","preventDefault","id","installOverlayWebManager","subscribe","addEventListener","getOverlayLayerRoot","isConnected","set","registerOverlayDismissRequester","requester","delete","scheduleOverlayInertSync","requestAnimationFrame","registerOverlayPageHost"],"sourceRoot":"../../../src","sources":["web/overlayLayers.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
/** Gap between centered content and the keyboard; matches native. */
|
|
5
|
+
export const KEYBOARD_MARGIN = 16;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* How far to lift overlay content above the software keyboard (>= 0), the
|
|
9
|
+
* same rule as iOS and Android: a sheet until its bottom clears the
|
|
10
|
+
* keyboard, other content until its bottom is `KEYBOARD_MARGIN` above it,
|
|
11
|
+
* never above the top edge. Full-window content never moves.
|
|
12
|
+
*/
|
|
13
|
+
export function computeKeyboardShift({
|
|
14
|
+
keyboardTop,
|
|
15
|
+
contentTop,
|
|
16
|
+
contentBottom,
|
|
17
|
+
isSheet,
|
|
18
|
+
safeTop = 0
|
|
19
|
+
}) {
|
|
20
|
+
if (keyboardTop === undefined) {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
const needed = isSheet ? contentBottom - keyboardTop : contentBottom + KEYBOARD_MARGIN - keyboardTop;
|
|
24
|
+
const room = contentTop - safeTop;
|
|
25
|
+
return Math.max(0, Math.min(needed, room));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Vertical extent of the rendered children of the full-window React root,
|
|
30
|
+
* relative to the content wrapper, from layout offsets (no transforms).
|
|
31
|
+
*/
|
|
32
|
+
function layoutExtent(content) {
|
|
33
|
+
const root = content?.firstElementChild;
|
|
34
|
+
if (!root) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const children = Array.from(root.children).filter(child => child instanceof HTMLElement);
|
|
38
|
+
if (children.length === 0) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
top: Math.min(...children.map(c => root.offsetTop + c.offsetTop)),
|
|
43
|
+
bottom: Math.max(...children.map(c => root.offsetTop + c.offsetTop + c.offsetHeight))
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Mobile browsers shrink the visual viewport for the keyboard while fixed
|
|
49
|
+
* layers keep the layout viewport; lift the entry's keyboard layer by the
|
|
50
|
+
* covered part.
|
|
51
|
+
*/
|
|
52
|
+
export function useKeyboardShift({
|
|
53
|
+
layerRef,
|
|
54
|
+
sheetRef,
|
|
55
|
+
contentRef,
|
|
56
|
+
isSheet,
|
|
57
|
+
enabled
|
|
58
|
+
}) {
|
|
59
|
+
const shiftRef = useRef(0);
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
const viewport = globalThis.visualViewport;
|
|
62
|
+
const layer = layerRef.current;
|
|
63
|
+
if (!viewport || !layer || !enabled) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const update = () => {
|
|
67
|
+
const keyboardBottom = viewport.offsetTop + viewport.height;
|
|
68
|
+
const covered = globalThis.innerHeight - keyboardBottom;
|
|
69
|
+
const current = shiftRef.current;
|
|
70
|
+
// Layout geometry (offsets ignore transforms), placed from the entry,
|
|
71
|
+
// which never transforms: neither the lift (maybe mid-transition) nor
|
|
72
|
+
// the enter / exit animation may skew the resting frame.
|
|
73
|
+
const origin = layer.parentElement?.getBoundingClientRect().top ?? 0;
|
|
74
|
+
let top = origin;
|
|
75
|
+
let bottom = origin + layer.offsetHeight;
|
|
76
|
+
const sheet = sheetRef.current;
|
|
77
|
+
if (isSheet && sheet) {
|
|
78
|
+
top = origin + sheet.offsetTop;
|
|
79
|
+
bottom = top + sheet.offsetHeight;
|
|
80
|
+
} else {
|
|
81
|
+
const extent = layoutExtent(contentRef.current);
|
|
82
|
+
if (extent) {
|
|
83
|
+
top = origin + extent.top;
|
|
84
|
+
bottom = origin + extent.bottom;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const shift = computeKeyboardShift({
|
|
88
|
+
keyboardTop: covered > 1 ? keyboardBottom : undefined,
|
|
89
|
+
contentTop: top,
|
|
90
|
+
contentBottom: bottom,
|
|
91
|
+
isSheet
|
|
92
|
+
});
|
|
93
|
+
if (Math.abs(shift - current) < 0.5) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
shiftRef.current = shift;
|
|
97
|
+
layer.style.transform = shift ? `translate3d(0, ${-shift}px, 0)` : '';
|
|
98
|
+
};
|
|
99
|
+
viewport.addEventListener('resize', update);
|
|
100
|
+
viewport.addEventListener('scroll', update);
|
|
101
|
+
update();
|
|
102
|
+
return () => {
|
|
103
|
+
viewport.removeEventListener('resize', update);
|
|
104
|
+
viewport.removeEventListener('scroll', update);
|
|
105
|
+
shiftRef.current = 0;
|
|
106
|
+
layer.style.transform = '';
|
|
107
|
+
};
|
|
108
|
+
}, [contentRef, enabled, isSheet, layerRef, sheetRef]);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=useKeyboardShift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","KEYBOARD_MARGIN","computeKeyboardShift","keyboardTop","contentTop","contentBottom","isSheet","safeTop","undefined","needed","room","Math","max","min","layoutExtent","content","root","firstElementChild","children","Array","from","filter","child","HTMLElement","length","top","map","c","offsetTop","bottom","offsetHeight","useKeyboardShift","layerRef","sheetRef","contentRef","enabled","shiftRef","viewport","globalThis","visualViewport","layer","current","update","keyboardBottom","height","covered","innerHeight","origin","parentElement","getBoundingClientRect","sheet","extent","shift","abs","style","transform","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["web/useKeyboardShift.ts"],"mappings":"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","ignoreList":[]}
|