@onekeyfe/react-native-native-overlay 3.0.162-alpha.270 → 6.7.0-8

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.
Files changed (45) hide show
  1. package/android/build.gradle +6 -0
  2. package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayAccessibilityIsolation.kt +37 -0
  3. package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayHost.kt +27 -30
  4. package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayPageHostView.kt +21 -0
  5. package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayView.kt +7 -2
  6. package/android/src/test/java/com/onekey/nativeoverlay/NativeOverlayAccessibilityIsolationTest.kt +112 -0
  7. package/android/src/test/java/com/onekey/nativeoverlay/NativeOverlayBackTest.kt +157 -0
  8. package/docs/SPEC.md +148 -26
  9. package/ios/NativeOverlayContainerView.swift +20 -7
  10. package/ios/NativeOverlaySheetController.swift +35 -1
  11. package/lib/module/OverlayPageHost.web.js +19 -6
  12. package/lib/module/OverlayPageHost.web.js.map +1 -1
  13. package/lib/module/OverlayStore.js +13 -1
  14. package/lib/module/OverlayStore.js.map +1 -1
  15. package/lib/module/OverlayView.web.js +107 -25
  16. package/lib/module/OverlayView.web.js.map +1 -1
  17. package/lib/module/useOverlayController.js +11 -3
  18. package/lib/module/useOverlayController.js.map +1 -1
  19. package/lib/module/web/animateTransition.js +20 -12
  20. package/lib/module/web/animateTransition.js.map +1 -1
  21. package/lib/module/web/overlayLayers.js +27 -9
  22. package/lib/module/web/overlayLayers.js.map +1 -1
  23. package/lib/module/web/useKeyboardShift.js +1 -1
  24. package/lib/module/web/useKeyboardShift.js.map +1 -1
  25. package/lib/module/web/useSheetDrag.js +22 -2
  26. package/lib/module/web/useSheetDrag.js.map +1 -1
  27. package/lib/typescript/src/OverlayPageHost.web.d.ts.map +1 -1
  28. package/lib/typescript/src/OverlayStore.d.ts +2 -0
  29. package/lib/typescript/src/OverlayStore.d.ts.map +1 -1
  30. package/lib/typescript/src/OverlayView.web.d.ts.map +1 -1
  31. package/lib/typescript/src/useOverlayController.d.ts.map +1 -1
  32. package/lib/typescript/src/web/animateTransition.d.ts +2 -2
  33. package/lib/typescript/src/web/animateTransition.d.ts.map +1 -1
  34. package/lib/typescript/src/web/overlayLayers.d.ts +3 -0
  35. package/lib/typescript/src/web/overlayLayers.d.ts.map +1 -1
  36. package/lib/typescript/src/web/useSheetDrag.d.ts.map +1 -1
  37. package/package.json +2 -1
  38. package/src/OverlayPageHost.web.tsx +24 -9
  39. package/src/OverlayStore.ts +13 -1
  40. package/src/OverlayView.web.tsx +197 -56
  41. package/src/useOverlayController.ts +11 -4
  42. package/src/web/animateTransition.ts +30 -11
  43. package/src/web/overlayLayers.ts +48 -10
  44. package/src/web/useKeyboardShift.ts +1 -1
  45. package/src/web/useSheetDrag.ts +23 -2
@@ -1 +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":[]}
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":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAGzC;AACA,OAAO,MAAMC,eAAe,GAAG,EAAE;;AAEjC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAC;EACnCC,WAAW;EACXC,UAAU;EACVC,aAAa;EACbC,OAAO;EACPC,OAAO,GAAG;AAOZ,CAAC,EAAU;EACT,IAAIJ,WAAW,KAAKK,SAAS,EAAE;IAC7B,OAAO,CAAC;EACV;EACA,MAAMC,MAAM,GAAGH,OAAO,GAClBD,aAAa,GAAGF,WAAW,GAC3BE,aAAa,GAAGJ,eAAe,GAAGE,WAAW;EACjD,MAAMO,IAAI,GAAGN,UAAU,GAAGG,OAAO;EACjC,OAAOI,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAACJ,MAAM,EAAEC,IAAI,CAAC,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA,SAASI,YAAYA,CACnBC,OAA2B,EACkB;EAC7C,MAAMC,IAAI,GAAGD,OAAO,EAAEE,iBAAmD;EACzE,IAAI,CAACD,IAAI,EAAE;IACT,OAAOR,SAAS;EAClB;EACA,MAAMU,QAAQ,GAAGC,KAAK,CAACC,IAAI,CAACJ,IAAI,CAACE,QAAQ,CAAC,CAACG,MAAM,CAC9CC,KAAK,IAA2BA,KAAK,YAAYC,WACpD,CAAC;EACD,IAAIL,QAAQ,CAACM,MAAM,KAAK,CAAC,EAAE;IACzB,OAAOhB,SAAS;EAClB;EACA,OAAO;IACLiB,GAAG,EAAEd,IAAI,CAACE,GAAG,CAAC,GAAGK,QAAQ,CAACQ,GAAG,CAAEC,CAAC,IAAKX,IAAI,CAACY,SAAS,GAAGD,CAAC,CAACC,SAAS,CAAC,CAAC;IACnEC,MAAM,EAAElB,IAAI,CAACC,GAAG,CACd,GAAGM,QAAQ,CAACQ,GAAG,CAAEC,CAAC,IAAKX,IAAI,CAACY,SAAS,GAAGD,CAAC,CAACC,SAAS,GAAGD,CAAC,CAACG,YAAY,CACtE;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAC;EAC/BC,QAAQ;EACRC,QAAQ;EACRC,UAAU;EACV5B,OAAO;EACP6B;AAOF,CAAC,EAAE;EACD,MAAMC,QAAQ,GAAGpC,MAAM,CAAC,CAAC,CAAC;EAE1BD,SAAS,CAAC,MAAM;IACd,MAAMsC,QAAQ,GAAGC,UAAU,CAACC,cAAc;IAC1C,MAAMC,KAAK,GAAGR,QAAQ,CAACS,OAAO;IAC9B,IAAI,CAACJ,QAAQ,IAAI,CAACG,KAAK,IAAI,CAACL,OAAO,EAAE;MACnC;IACF;IACA,MAAMO,MAAM,GAAGA,CAAA,KAAM;MACnB,MAAMC,cAAc,GAAGN,QAAQ,CAACT,SAAS,GAAGS,QAAQ,CAACO,MAAM;MAC3D,MAAMC,OAAO,GAAGP,UAAU,CAACQ,WAAW,GAAGH,cAAc;MACvD,MAAMF,OAAO,GAAGL,QAAQ,CAACK,OAAO;MAChC;MACA;MACA;MACA,MAAMM,MAAM,GAAGP,KAAK,CAACQ,aAAa,EAAEC,qBAAqB,CAAC,CAAC,CAACxB,GAAG,IAAI,CAAC;MACpE,IAAIA,GAAG,GAAGsB,MAAM;MAChB,IAAIlB,MAAM,GAAGkB,MAAM,GAAGP,KAAK,CAACV,YAAY;MACxC,MAAMoB,KAAK,GAAGjB,QAAQ,CAACQ,OAAO;MAC9B,IAAInC,OAAO,IAAI4C,KAAK,EAAE;QACpBzB,GAAG,GAAGsB,MAAM,GAAGG,KAAK,CAACtB,SAAS;QAC9BC,MAAM,GAAGJ,GAAG,GAAGyB,KAAK,CAACpB,YAAY;MACnC,CAAC,MAAM;QACL,MAAMqB,MAAM,GAAGrC,YAAY,CAACoC,KAAK,IAAIhB,UAAU,CAACO,OAAO,CAAC;QACxD,IAAIU,MAAM,EAAE;UACV1B,GAAG,GAAGsB,MAAM,GAAGI,MAAM,CAAC1B,GAAG;UACzBI,MAAM,GAAGkB,MAAM,GAAGI,MAAM,CAACtB,MAAM;QACjC;MACF;MACA,MAAMuB,KAAK,GAAGlD,oBAAoB,CAAC;QACjCC,WAAW,EAAE0C,OAAO,GAAG,CAAC,GAAGF,cAAc,GAAGnC,SAAS;QACrDJ,UAAU,EAAEqB,GAAG;QACfpB,aAAa,EAAEwB,MAAM;QACrBvB;MACF,CAAC,CAAC;MACF,IAAIK,IAAI,CAAC0C,GAAG,CAACD,KAAK,GAAGX,OAAO,CAAC,GAAG,GAAG,EAAE;QACnC;MACF;MACAL,QAAQ,CAACK,OAAO,GAAGW,KAAK;MACxBZ,KAAK,CAACc,KAAK,CAACC,SAAS,GAAGH,KAAK,GAAG,kBAAkB,CAACA,KAAK,QAAQ,GAAG,EAAE;IACvE,CAAC;IACDf,QAAQ,CAACmB,gBAAgB,CAAC,QAAQ,EAAEd,MAAM,CAAC;IAC3CL,QAAQ,CAACmB,gBAAgB,CAAC,QAAQ,EAAEd,MAAM,CAAC;IAC3CA,MAAM,CAAC,CAAC;IACR,OAAO,MAAM;MACXL,QAAQ,CAACoB,mBAAmB,CAAC,QAAQ,EAAEf,MAAM,CAAC;MAC9CL,QAAQ,CAACoB,mBAAmB,CAAC,QAAQ,EAAEf,MAAM,CAAC;MAC9CN,QAAQ,CAACK,OAAO,GAAG,CAAC;MACpBD,KAAK,CAACc,KAAK,CAACC,SAAS,GAAG,EAAE;IAC5B,CAAC;EACH,CAAC,EAAE,CAACrB,UAAU,EAAEC,OAAO,EAAE7B,OAAO,EAAE0B,QAAQ,EAAEC,QAAQ,CAAC,CAAC;AACxD","ignoreList":[]}
@@ -111,15 +111,35 @@ export function useSheetDrag({
111
111
  once: true
112
112
  });
113
113
  };
114
+ const onPointerCancel = event => {
115
+ if (!tracking || event.pointerId !== pointerId) {
116
+ return;
117
+ }
118
+ tracking = false;
119
+ dragging = false;
120
+ velocity = 0;
121
+ if (sheet.hasPointerCapture?.(pointerId)) {
122
+ sheet.releasePointerCapture(pointerId);
123
+ }
124
+ pointerId = -1;
125
+ sheet.style.transform = '';
126
+ sheet.style.transition = '';
127
+ if (backdropRef.current) {
128
+ backdropRef.current.style.opacity = '1';
129
+ }
130
+ };
114
131
  sheet.addEventListener('pointerdown', onPointerDown);
115
132
  sheet.addEventListener('pointermove', onPointerMove);
116
133
  sheet.addEventListener('pointerup', onPointerUp);
117
- sheet.addEventListener('pointercancel', onPointerUp);
134
+ sheet.addEventListener('pointercancel', onPointerCancel);
118
135
  return () => {
136
+ if (sheet.hasPointerCapture?.(pointerId)) {
137
+ sheet.releasePointerCapture(pointerId);
138
+ }
119
139
  sheet.removeEventListener('pointerdown', onPointerDown);
120
140
  sheet.removeEventListener('pointermove', onPointerMove);
121
141
  sheet.removeEventListener('pointerup', onPointerUp);
122
- sheet.removeEventListener('pointercancel', onPointerUp);
142
+ sheet.removeEventListener('pointercancel', onPointerCancel);
123
143
  };
124
144
  }, [sheetRef, backdropRef, enabled]);
125
145
  }
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","DRAG_START_THRESHOLD","DISMISS_DISTANCE_RATIO","DISMISS_VELOCITY","UPWARD_RESISTANCE","SETTLE_TRANSITION","scrolledAncestorWithin","target","sheet","node","HTMLElement","scrollTop","scrollHeight","clientHeight","parentElement","undefined","useSheetDrag","sheetRef","backdropRef","enabled","onDismissByPan","onDismissRef","current","startY","lastY","lastTime","velocity","tracking","dragging","pointerId","setOffset","offset","style","transform","backdrop","opacity","String","Math","max","offsetHeight","onPointerDown","event","button","clientY","timeStamp","onPointerMove","dy","setPointerCapture","transition","dt","onPointerUp","height","addEventListener","clickEvent","stopPropagation","preventDefault","capture","once","removeEventListener"],"sourceRoot":"../../../src","sources":["web/useSheetDrag.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","DRAG_START_THRESHOLD","DISMISS_DISTANCE_RATIO","DISMISS_VELOCITY","UPWARD_RESISTANCE","SETTLE_TRANSITION","scrolledAncestorWithin","target","sheet","node","HTMLElement","scrollTop","scrollHeight","clientHeight","parentElement","undefined","useSheetDrag","sheetRef","backdropRef","enabled","onDismissByPan","onDismissRef","current","startY","lastY","lastTime","velocity","tracking","dragging","pointerId","setOffset","offset","style","transform","backdrop","opacity","String","Math","max","offsetHeight","onPointerDown","event","button","clientY","timeStamp","onPointerMove","dy","setPointerCapture","transition","dt","onPointerUp","height","addEventListener","clickEvent","stopPropagation","preventDefault","capture","once","onPointerCancel","hasPointerCapture","releasePointerCapture","removeEventListener"],"sourceRoot":"../../../src","sources":["web/useSheetDrag.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAGzC,MAAMC,oBAAoB,GAAG,CAAC;AAC9B,MAAMC,sBAAsB,GAAG,GAAG;AAClC,MAAMC,gBAAgB,GAAG,GAAG,CAAC,CAAC;AAC9B,MAAMC,iBAAiB,GAAG,GAAG;AAC7B,MAAMC,iBAAiB,GAAG,gDAAgD;AAE1E,SAASC,sBAAsBA,CAC7BC,MAA0B,EAC1BC,KAAkB,EAClB;EACA,IAAIC,IAAI,GAAGF,MAAM,YAAYG,WAAW,GAAGH,MAAM,GAAG,IAAI;EACxD,OAAOE,IAAI,IAAIA,IAAI,KAAKD,KAAK,EAAE;IAC7B,IAAIC,IAAI,CAACE,SAAS,GAAG,CAAC,IAAIF,IAAI,CAACG,YAAY,GAAGH,IAAI,CAACI,YAAY,EAAE;MAC/D,OAAOJ,IAAI;IACb;IACAA,IAAI,GAAGA,IAAI,CAACK,aAAa;EAC3B;EACA,OAAOC,SAAS;AAClB;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAC;EAC3BC,QAAQ;EACRC,WAAW;EACXC,OAAO;EACPC;AAMF,CAAC,EAAE;EACD,MAAMC,YAAY,GAAGrB,MAAM,CAACoB,cAAc,CAAC;EAC3CC,YAAY,CAACC,OAAO,GAAGF,cAAc;EAErCrB,SAAS,CAAC,MAAM;IACd,MAAMS,KAAK,GAAGS,QAAQ,CAACK,OAAO;IAC9B,IAAI,CAACd,KAAK,IAAI,CAACW,OAAO,EAAE;MACtB;IACF;IACA,IAAII,MAAM,GAAG,CAAC;IACd,IAAIC,KAAK,GAAG,CAAC;IACb,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAIC,QAAQ,GAAG,CAAC;IAChB,IAAIC,QAAQ,GAAG,KAAK;IACpB,IAAIC,QAAQ,GAAG,KAAK;IACpB,IAAIC,SAAS,GAAG,CAAC,CAAC;IAElB,MAAMC,SAAS,GAAIC,MAAc,IAAK;MACpCvB,KAAK,CAACwB,KAAK,CAACC,SAAS,GAAG,kBAAkBF,MAAM,QAAQ;MACxD,MAAMG,QAAQ,GAAGhB,WAAW,CAACI,OAAO;MACpC,IAAIY,QAAQ,IAAIH,MAAM,GAAG,CAAC,EAAE;QAC1BG,QAAQ,CAACF,KAAK,CAACG,OAAO,GAAGC,MAAM,CAC7BC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAGP,MAAM,GAAGvB,KAAK,CAAC+B,YAAY,CAC7C,CAAC;MACH;IACF,CAAC;IAED,MAAMC,aAAa,GAAIC,KAAmB,IAAK;MAC7C,IAAIA,KAAK,CAACC,MAAM,KAAK,CAAC,IAAIpC,sBAAsB,CAACmC,KAAK,CAAClC,MAAM,EAAEC,KAAK,CAAC,EAAE;QACrE;MACF;MACAmB,QAAQ,GAAG,IAAI;MACfC,QAAQ,GAAG,KAAK;MAChBC,SAAS,GAAGY,KAAK,CAACZ,SAAS;MAC3BN,MAAM,GAAGkB,KAAK,CAACE,OAAO;MACtBnB,KAAK,GAAGiB,KAAK,CAACE,OAAO;MACrBlB,QAAQ,GAAGgB,KAAK,CAACG,SAAS;MAC1BlB,QAAQ,GAAG,CAAC;IACd,CAAC;IAED,MAAMmB,aAAa,GAAIJ,KAAmB,IAAK;MAC7C,IAAI,CAACd,QAAQ,IAAIc,KAAK,CAACZ,SAAS,KAAKA,SAAS,EAAE;QAC9C;MACF;MACA,MAAMiB,EAAE,GAAGL,KAAK,CAACE,OAAO,GAAGpB,MAAM;MACjC,IAAI,CAACK,QAAQ,EAAE;QACb,IAAIkB,EAAE,GAAG7C,oBAAoB,EAAE;UAC7B;QACF;QACA2B,QAAQ,GAAG,IAAI;QACfpB,KAAK,CAACuC,iBAAiB,CAAClB,SAAS,CAAC;QAClCrB,KAAK,CAACwB,KAAK,CAACgB,UAAU,GAAG,MAAM;MACjC;MACA,MAAMC,EAAE,GAAGZ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEG,KAAK,CAACG,SAAS,GAAGnB,QAAQ,CAAC;MAClDC,QAAQ,GAAG,CAACe,KAAK,CAACE,OAAO,GAAGnB,KAAK,IAAIyB,EAAE;MACvCzB,KAAK,GAAGiB,KAAK,CAACE,OAAO;MACrBlB,QAAQ,GAAGgB,KAAK,CAACG,SAAS;MAC1Bd,SAAS,CAACgB,EAAE,GAAG,CAAC,GAAGA,EAAE,GAAGA,EAAE,GAAG1C,iBAAiB,CAAC;IACjD,CAAC;IAED,MAAM8C,WAAW,GAAIT,KAAmB,IAAK;MAC3C,IAAI,CAACd,QAAQ,IAAIc,KAAK,CAACZ,SAAS,KAAKA,SAAS,EAAE;QAC9C;MACF;MACAF,QAAQ,GAAG,KAAK;MAChB,IAAI,CAACC,QAAQ,EAAE;QACb;MACF;MACAA,QAAQ,GAAG,KAAK;MAChB,MAAMkB,EAAE,GAAGL,KAAK,CAACE,OAAO,GAAGpB,MAAM;MACjC,MAAM4B,MAAM,GAAG3C,KAAK,CAAC+B,YAAY;MACjC/B,KAAK,CAACwB,KAAK,CAACgB,UAAU,GAAG3C,iBAAiB;MAC1C,IAAIyC,EAAE,GAAGK,MAAM,GAAGjD,sBAAsB,IAAIwB,QAAQ,GAAGvB,gBAAgB,EAAE;QACvE2B,SAAS,CAACqB,MAAM,CAAC;QACjB9B,YAAY,CAACC,OAAO,CAAC,CAAC;MACxB,CAAC,MAAM;QACLQ,SAAS,CAAC,CAAC,CAAC;QACZ,IAAIZ,WAAW,CAACI,OAAO,EAAE;UACvBJ,WAAW,CAACI,OAAO,CAACU,KAAK,CAACG,OAAO,GAAG,GAAG;QACzC;MACF;MACA;MACA;MACA3B,KAAK,CAAC4C,gBAAgB,CACpB,OAAO,EACNC,UAAU,IAAK;QACdA,UAAU,CAACC,eAAe,CAAC,CAAC;QAC5BD,UAAU,CAACE,cAAc,CAAC,CAAC;MAC7B,CAAC,EACD;QAAEC,OAAO,EAAE,IAAI;QAAEC,IAAI,EAAE;MAAK,CAC9B,CAAC;IACH,CAAC;IAED,MAAMC,eAAe,GAAIjB,KAAmB,IAAK;MAC/C,IAAI,CAACd,QAAQ,IAAIc,KAAK,CAACZ,SAAS,KAAKA,SAAS,EAAE;QAC9C;MACF;MACAF,QAAQ,GAAG,KAAK;MAChBC,QAAQ,GAAG,KAAK;MAChBF,QAAQ,GAAG,CAAC;MACZ,IAAIlB,KAAK,CAACmD,iBAAiB,GAAG9B,SAAS,CAAC,EAAE;QACxCrB,KAAK,CAACoD,qBAAqB,CAAC/B,SAAS,CAAC;MACxC;MACAA,SAAS,GAAG,CAAC,CAAC;MACdrB,KAAK,CAACwB,KAAK,CAACC,SAAS,GAAG,EAAE;MAC1BzB,KAAK,CAACwB,KAAK,CAACgB,UAAU,GAAG,EAAE;MAC3B,IAAI9B,WAAW,CAACI,OAAO,EAAE;QACvBJ,WAAW,CAACI,OAAO,CAACU,KAAK,CAACG,OAAO,GAAG,GAAG;MACzC;IACF,CAAC;IAED3B,KAAK,CAAC4C,gBAAgB,CAAC,aAAa,EAAEZ,aAAa,CAAC;IACpDhC,KAAK,CAAC4C,gBAAgB,CAAC,aAAa,EAAEP,aAAa,CAAC;IACpDrC,KAAK,CAAC4C,gBAAgB,CAAC,WAAW,EAAEF,WAAW,CAAC;IAChD1C,KAAK,CAAC4C,gBAAgB,CAAC,eAAe,EAAEM,eAAe,CAAC;IACxD,OAAO,MAAM;MACX,IAAIlD,KAAK,CAACmD,iBAAiB,GAAG9B,SAAS,CAAC,EAAE;QACxCrB,KAAK,CAACoD,qBAAqB,CAAC/B,SAAS,CAAC;MACxC;MACArB,KAAK,CAACqD,mBAAmB,CAAC,aAAa,EAAErB,aAAa,CAAC;MACvDhC,KAAK,CAACqD,mBAAmB,CAAC,aAAa,EAAEhB,aAAa,CAAC;MACvDrC,KAAK,CAACqD,mBAAmB,CAAC,WAAW,EAAEX,WAAW,CAAC;MACnD1C,KAAK,CAACqD,mBAAmB,CAAC,eAAe,EAAEH,eAAe,CAAC;IAC7D,CAAC;EACH,CAAC,EAAE,CAACzC,QAAQ,EAAEC,WAAW,EAAEC,OAAO,CAAC,CAAC;AACtC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayPageHost.web.d.ts","sourceRoot":"","sources":["../../../src/OverlayPageHost.web.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,eAAe,uBAAuB,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,2CAsC/D;AAED,OAAO,EAAE,eAAe,IAAI,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"OverlayPageHost.web.d.ts","sourceRoot":"","sources":["../../../src/OverlayPageHost.web.tsx"],"names":[],"mappings":"AAKA,QAAA,MAAM,eAAe,uBAAuB,CAAC;AAE7C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,2CAqD/D;AAED,OAAO,EAAE,eAAe,IAAI,uBAAuB,EAAE,CAAC"}
@@ -32,6 +32,8 @@ export declare class OverlayStore {
32
32
  request(request: IOverlayRequest, handlers?: IOverlayEntryHandlers): IOverlayEntry;
33
33
  /** Starts closing an entry; the native side calls `finalize` after its exit animation. */
34
34
  dismiss(id: string, reason?: IOverlayDismissReason): void;
35
+ /** Reverses an unfinished close without creating a new presentation cycle. */
36
+ reopen(id: string): void;
35
37
  /** Removes a closing (or active) entry once its exit animation finished. */
36
38
  finalize(id: string): void;
37
39
  dismissAll(filter?: {
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayStore.d.ts","sourceRoot":"","sources":["../../../src/OverlayStore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyBD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,GAAG,CAAK;IAEhB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAE1D,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IAErE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAG1B;IAEJ,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAE7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,OAAO,CAAC,QAAQ,CAGd;gBAEU,OAAO,GAAE,oBAAyB;IAK9C,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAK9C;IAEF,WAAW,QAAO,gBAAgB,CAAkB;IAEpD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI/C,OAAO,CACL,OAAO,EAAE,eAAe,EACxB,QAAQ,GAAE,qBAA0B,GACnC,aAAa;IAiDhB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,qBAAsC,GAAG,IAAI;IAMzE,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAY1B,UAAU,CACR,MAAM,GAAE;QACN,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,qBAAqB,CAAC;KAC3B,GACL,IAAI;IAqBP,qFAAqF;IACrF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAqBxD,0DAA0D;IAC1D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAalC;;;;OAIG;IACH,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,sBAAsB;IAqB5D,6EAA6E;IAC7E,2EAA2E;IAC3E,iBAAiB,IAAI,aAAa,GAAG,SAAS;IAI9C,cAAc,IAAI,aAAa,GAAG,SAAS;IAgB3C,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,IAAI;CASb;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,GACzB,aAAa,GAAG,SAAS,CAc3B;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
1
+ {"version":3,"file":"OverlayStore.d.ts","sourceRoot":"","sources":["../../../src/OverlayStore.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAyBD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,GAAG,CAAK;IAEhB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAE1D,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IAErE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAG1B;IAEJ,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8B;IAE7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,OAAO,CAAC,QAAQ,CAGd;gBAEU,OAAO,GAAE,oBAAyB;IAK9C,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAK9C;IAEF,WAAW,QAAO,gBAAgB,CAAkB;IAEpD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI/C,OAAO,CACL,OAAO,EAAE,eAAe,EACxB,QAAQ,GAAE,qBAA0B,GACnC,aAAa;IAiDhB,0FAA0F;IAC1F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,qBAAsC,GAAG,IAAI;IAMzE,8EAA8E;IAC9E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IASxB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAY1B,UAAU,CACR,MAAM,GAAE;QACN,KAAK,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/B,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,CAAC,EAAE,qBAAqB,CAAC;KAC3B,GACL,IAAI;IAqBP,qFAAqF;IACrF,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAqBxD,0DAA0D;IAC1D,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAalC;;;;OAIG;IACH,WAAW,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,sBAAsB;IAqB5D,6EAA6E;IAC7E,2EAA2E;IAC3E,iBAAiB,IAAI,aAAa,GAAG,SAAS;IAI9C,cAAc,IAAI,aAAa,GAAG,SAAS;IAgB3C,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,IAAI;CASb;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,GACzB,aAAa,GAAG,SAAS,CAc3B;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayView.web.d.ts","sourceRoot":"","sources":["../../../src/OverlayView.web.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAGV,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAyQ5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,sCAgEnD"}
1
+ {"version":3,"file":"OverlayView.web.d.ts","sourceRoot":"","sources":["../../../src/OverlayView.web.tsx"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAGV,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAkY5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,sCA2EnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOverlayController.d.ts","sourceRoot":"","sources":["../../../src/useOverlayController.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EACV,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,yBAAyB,CAAC;IACrC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,oBAAoB,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,CAAC;CACtE;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CA+IpB"}
1
+ {"version":3,"file":"useOverlayController.d.ts","sourceRoot":"","sources":["../../../src/useOverlayController.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,KAAK,EACV,4BAA4B,EAC5B,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,qEAAqE;IACrE,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,yBAAyB,CAAC;IACrC,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,oBAAoB,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,CAAC;CACtE;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CAsJpB"}
@@ -13,6 +13,6 @@ export declare function measureContentExtent(container: HTMLElement): IContentEx
13
13
  * slide distance and scale origin come from the children of `contentRoot`,
14
14
  * because the content wrapper itself always fills the window.
15
15
  */
16
- export declare function animateTransition(element: HTMLElement, contentRoot: HTMLElement, transition: IResolvedOverlayTransition, direction: 'in' | 'out'): Animation | undefined;
17
- export declare function animateBackdrop(element: HTMLElement, motion: IOverlayMotion, direction: 'in' | 'out'): Animation;
16
+ export declare function animateTransition(element: HTMLElement, contentRoot: HTMLElement, transition: IResolvedOverlayTransition, direction: 'in' | 'out', interruptedFrames?: ReadonlyMap<HTMLElement, Keyframe>): Animation | undefined;
17
+ export declare function animateBackdrop(element: HTMLElement, motion: IOverlayMotion, direction: 'in' | 'out', interruptedFrames?: ReadonlyMap<HTMLElement, Keyframe>): Animation;
18
18
  //# sourceMappingURL=animateTransition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"animateTransition.d.ts","sourceRoot":"","sources":["../../../../src/web/animateTransition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,CAkB3E;AA8DD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,IAAI,GAAG,KAAK,GACtB,SAAS,GAAG,SAAS,CAqBvB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,IAAI,GAAG,KAAK,GACtB,SAAS,CAMX"}
1
+ {"version":3,"file":"animateTransition.d.ts","sourceRoot":"","sources":["../../../../src/web/animateTransition.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,GAAG,cAAc,CAkB3E;AA8DD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,IAAI,GAAG,KAAK,EACvB,iBAAiB,CAAC,EAAE,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,GACrD,SAAS,GAAG,SAAS,CAqCvB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,IAAI,GAAG,KAAK,EACvB,iBAAiB,CAAC,EAAE,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,GACrD,SAAS,CAOX"}
@@ -1,10 +1,13 @@
1
1
  import type { IOverlayRequestDismissReason } from '../OverlayViewTypes';
2
2
  import type { IOverlayLevel } from '../types';
3
3
  export declare const ENTRY_ATTRIBUTE = "data-onekey-overlay-entry";
4
+ /** Everything rendered below the topmost blocking entry becomes inert. */
5
+ export declare function syncOverlayInert(): void;
4
6
  export declare function getOverlayLayerRoot(level: IOverlayLevel): HTMLDivElement;
5
7
  export declare function registerOverlayDismissRequester(id: string, requester: (reason: IOverlayRequestDismissReason) => void): () => void;
6
8
  /** Re-run after entry DOM nodes mount, since the store emits before commit. */
7
9
  export declare function scheduleOverlayInertSync(): void;
8
10
  export declare function registerOverlayPageHost(hostKey: string, element: HTMLDivElement): () => void;
11
+ export declare function subscribeOverlayPageHost(hostKey: string | undefined, listener: () => void): () => void;
9
12
  export declare function getOverlayPageHost(hostKey: string | undefined): HTMLDivElement | undefined;
10
13
  //# sourceMappingURL=overlayLayers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overlayLayers.d.ts","sourceRoot":"","sources":["../../../../src/web/overlayLayers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,eAAO,MAAM,eAAe,8BAA8B,CAAC;AA8H3D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAQxE;AAED,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,GACxD,MAAM,IAAI,CAOZ;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,SAEvC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,MAAM,IAAI,CAQZ;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,cAAc,GAAG,SAAS,CAE5B"}
1
+ {"version":3,"file":"overlayLayers.d.ts","sourceRoot":"","sources":["../../../../src/web/overlayLayers.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,UAAU,CAAC;AAG7D,eAAO,MAAM,eAAe,8BAA8B,CAAC;AA+E3D,0EAA0E;AAC1E,wBAAgB,gBAAgB,SAsC/B;AA2BD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAQxE;AAED,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,GACxD,MAAM,IAAI,CAOZ;AAED,+EAA+E;AAC/E,wBAAgB,wBAAwB,SAEvC;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,cAAc,GACtB,MAAM,IAAI,CAUZ;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,IAAI,GACnB,MAAM,IAAI,CAYZ;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,cAAc,GAAG,SAAS,CAE5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSheetDrag.d.ts","sourceRoot":"","sources":["../../../../src/web/useSheetDrag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,OAAO,EACP,cAAc,GACf,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,WAAW,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,QAwGA"}
1
+ {"version":3,"file":"useSheetDrag.d.ts","sourceRoot":"","sources":["../../../../src/web/useSheetDrag.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAsBvC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,WAAW,EACX,OAAO,EACP,cAAc,GACf,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC3C,WAAW,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,QA6HA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-native-overlay",
3
- "version": "3.0.162-alpha.270",
3
+ "version": "6.7.0-8",
4
4
  "description": "Native and Web overlay hosts with ordered levels, page scope and Fabric measurement",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -77,6 +77,7 @@
77
77
  "eslint-config-prettier": "^10.1.8",
78
78
  "eslint-plugin-prettier": "^5.5.4",
79
79
  "jest": "^29.7.0",
80
+ "jest-environment-jsdom": "29.7.0",
80
81
  "lefthook": "^2.0.3",
81
82
  "prettier": "^2.8.8",
82
83
  "react": "19.2.3",
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useRef } from 'react';
2
2
 
3
3
  import { useSuspendedPageOwners } from './useSuspendedPageOwners';
4
- import { registerOverlayPageHost } from './web/overlayLayers';
4
+ import { registerOverlayPageHost, syncOverlayInert } from './web/overlayLayers';
5
5
 
6
6
  const OWNER_ATTRIBUTE = 'data-overlay-owner';
7
7
 
@@ -28,14 +28,29 @@ export function OverlayPageHost({ hostKey }: { hostKey: string }) {
28
28
  return;
29
29
  }
30
30
  const suspended = new Set(suspendedOwners);
31
- element
32
- .querySelectorAll<HTMLElement>(`[${OWNER_ATTRIBUTE}]`)
33
- .forEach((node) => {
34
- const hidden = suspended.has(node.getAttribute(OWNER_ATTRIBUTE) ?? '');
35
- node.style.visibility = hidden ? 'hidden' : '';
36
- node.inert = hidden;
37
- });
38
- }, [suspendedOwners]);
31
+ const applySuspension = () => {
32
+ element
33
+ .querySelectorAll<HTMLElement>(`[${OWNER_ATTRIBUTE}]`)
34
+ .forEach((node) => {
35
+ const hidden =
36
+ suspended.has(node.getAttribute(OWNER_ATTRIBUTE) ?? '') ||
37
+ node.getAttribute('aria-hidden') === 'true';
38
+ node.style.visibility = hidden ? 'hidden' : '';
39
+ });
40
+ // Combine suspension with blocking-level isolation; resuming an owner
41
+ // must not make an entry below a blocker interactive.
42
+ syncOverlayInert();
43
+ };
44
+ applySuspension();
45
+ const observer = new MutationObserver(applySuspension);
46
+ observer.observe(element, {
47
+ childList: true,
48
+ subtree: true,
49
+ attributes: true,
50
+ attributeFilter: [OWNER_ATTRIBUTE, 'aria-hidden'],
51
+ });
52
+ return () => observer.disconnect();
53
+ }, [hostKey, suspendedOwners]);
39
54
 
40
55
  return (
41
56
  <div
@@ -148,6 +148,16 @@ export class OverlayStore {
148
148
  }
149
149
  }
150
150
 
151
+ /** Reverses an unfinished close without creating a new presentation cycle. */
152
+ reopen(id: string): void {
153
+ const entry = this.shown.get(id);
154
+ if (!entry || entry.phase !== 'closing') return;
155
+ this.clearClosingTimer(id);
156
+ entry.phase = 'active';
157
+ entry.dismissReason = undefined;
158
+ this.emit();
159
+ }
160
+
151
161
  /** Removes a closing (or active) entry once its exit animation finished. */
152
162
  finalize(id: string): void {
153
163
  const entry = this.shown.get(id);
@@ -280,7 +290,9 @@ export class OverlayStore {
280
290
  if (queuedIndex !== -1) {
281
291
  this.queued = this.queued.filter((e) => e.id !== id);
282
292
  // Queued entries never rendered, so they leave without an exit animation.
283
- queueMicrotask(() => this.notifyRemoved(id, reason));
293
+ const handlers = this.handlers.get(id);
294
+ this.handlers.delete(id);
295
+ queueMicrotask(() => handlers?.onRemoved?.(reason));
284
296
  return true;
285
297
  }
286
298
  const entry = this.shown.get(id);
@@ -1,5 +1,12 @@
1
- import { useEffect, useId, useLayoutEffect, useRef } from 'react';
2
- import type { ReactNode, SyntheticEvent } from 'react';
1
+ import {
2
+ useCallback,
3
+ useEffect,
4
+ useId,
5
+ useLayoutEffect,
6
+ useRef,
7
+ useSyncExternalStore,
8
+ } from 'react';
9
+ import type { KeyboardEvent, ReactNode, SyntheticEvent } from 'react';
3
10
 
4
11
  import { createPortal } from 'react-dom';
5
12
  import { StyleSheet, View } from 'react-native';
@@ -7,6 +14,7 @@ import { StyleSheet, View } from 'react-native';
7
14
  import { OverlayLevelProvider } from './OverlayLevelContext';
8
15
  import { OVERLAY_LEVEL_ORDER, isBlockingLevel } from './OverlayLevels';
9
16
  import { OVERLAY_OWNER_ATTRIBUTE } from './OverlayPageHost.web';
17
+ import { overlayStore } from './OverlayStore';
10
18
  import { useOverlayController } from './useOverlayController';
11
19
  import { animateBackdrop, animateTransition } from './web/animateTransition';
12
20
  import {
@@ -15,6 +23,7 @@ import {
15
23
  getOverlayPageHost,
16
24
  registerOverlayDismissRequester,
17
25
  scheduleOverlayInertSync,
26
+ subscribeOverlayPageHost,
18
27
  } from './web/overlayLayers';
19
28
  import { useKeyboardShift } from './web/useKeyboardShift';
20
29
  import { useSheetDrag } from './web/useSheetDrag';
@@ -48,6 +57,7 @@ interface IWebOverlayEntryProps {
48
57
  /** Closed but kept mounted: hidden and inert. */
49
58
  parked?: boolean;
50
59
  stackOrder: number;
60
+ levelOrder: number;
51
61
  presented: boolean;
52
62
  animation: IResolvedOverlayAnimation;
53
63
  blocking: boolean;
@@ -69,6 +79,7 @@ function WebOverlayEntry({
69
79
  entryId,
70
80
  parked = false,
71
81
  stackOrder,
82
+ levelOrder,
72
83
  presented,
73
84
  animation,
74
85
  blocking,
@@ -92,10 +103,22 @@ function WebOverlayEntry({
92
103
  const keyboardLayerRef = useRef<HTMLDivElement>(null);
93
104
  const backdropRef = useRef<HTMLDivElement>(null);
94
105
  const directionRef = useRef<'in' | 'out' | undefined>(undefined);
106
+ const runningAnimationsRef = useRef<Animation[]>([]);
95
107
  const restoreFocusRef = useRef<HTMLElement | null>(null);
96
108
  const callbacksRef = useRef({ onPresented, onDismissed });
97
109
  callbacksRef.current = { onPresented, onDismissed };
98
110
 
111
+ useLayoutEffect(() => {
112
+ if (!isSheet && sheetRef.current) {
113
+ // The host now survives a presentation switch; clear any in-flight pan.
114
+ sheetRef.current.style.removeProperty('transform');
115
+ sheetRef.current.style.removeProperty('transition');
116
+ if (backdropRef.current) {
117
+ backdropRef.current.style.opacity = '1';
118
+ }
119
+ }
120
+ }, [isSheet]);
121
+
99
122
  useLayoutEffect(() => {
100
123
  const content = contentRef.current;
101
124
  if (!content) {
@@ -108,32 +131,61 @@ function WebOverlayEntry({
108
131
  const neverEntered = directionRef.current === undefined;
109
132
  directionRef.current = direction;
110
133
  scheduleOverlayInertSync();
134
+ const interruptedFrames = new Map<HTMLElement, Keyframe>();
135
+ for (const running of runningAnimationsRef.current) {
136
+ const target = (running.effect as KeyframeEffect | null)?.target;
137
+ if (running.playState === 'running' && target instanceof HTMLElement) {
138
+ const style = getComputedStyle(target);
139
+ interruptedFrames.set(target, {
140
+ opacity: style.opacity,
141
+ transform: style.transform,
142
+ });
143
+ }
144
+ running.cancel();
145
+ }
146
+ runningAnimationsRef.current = [];
111
147
  if (direction === 'out' && (neverEntered || pannedAwayRef.current)) {
148
+ restoreFocusRef.current?.focus?.({ preventScroll: true });
149
+ restoreFocusRef.current = null;
112
150
  callbacksRef.current.onDismissed();
113
151
  return;
114
152
  }
115
- if (direction === 'in' && blocking) {
116
- restoreFocusRef.current = document.activeElement as HTMLElement | null;
117
- entryRef.current?.focus({ preventScroll: true });
153
+ if (direction === 'in') {
154
+ pannedAwayRef.current = false;
155
+ sheetRef.current?.style.removeProperty('transform');
156
+ sheetRef.current?.style.removeProperty('transition');
157
+ if (backdropRef.current) {
158
+ backdropRef.current.style.opacity = '1';
159
+ }
160
+ if (blocking) {
161
+ restoreFocusRef.current = document.activeElement as HTMLElement | null;
162
+ entryRef.current?.focus({ preventScroll: true });
163
+ }
118
164
  }
119
- content.getAnimations().forEach((running) => running.cancel());
120
- backdropRef.current?.getAnimations().forEach((running) => running.cancel());
121
165
  // A sheet is measured as a whole; other presentations by the children
122
166
  // of the full-window React root.
123
167
  const contentRoot = isSheet
124
168
  ? content
125
- : (content.firstElementChild as HTMLElement | null) ?? content;
169
+ : (sheetRef.current?.firstElementChild as HTMLElement | null) ?? content;
126
170
  const transition = direction === 'in' ? animation.enter : animation.exit;
127
171
  const running = [
128
- animateTransition(content, contentRoot, transition, direction),
172
+ animateTransition(
173
+ content,
174
+ contentRoot,
175
+ transition,
176
+ direction,
177
+ interruptedFrames
178
+ ),
129
179
  backdropRef.current
130
180
  ? animateBackdrop(
131
181
  backdropRef.current,
132
182
  animation.backdrop.motion,
133
- direction
183
+ direction,
184
+ interruptedFrames
134
185
  )
135
186
  : undefined,
136
187
  ].filter((item): item is Animation => !!item);
188
+ runningAnimationsRef.current = running;
137
189
  void Promise.all(running.map((item) => item.finished))
138
190
  .then(() => {
139
191
  if (directionRef.current !== direction) {
@@ -190,12 +242,79 @@ function WebOverlayEntry({
190
242
  const showBackdrop = !!backdropColor || blocking;
191
243
  const cornerRadius = sheet?.cornerRadius ?? DEFAULT_SHEET_CORNER_RADIUS;
192
244
 
245
+ const onKeyDownCapture = (event: KeyboardEvent<HTMLDivElement>) => {
246
+ const root = entryRef.current;
247
+ if (
248
+ event.key !== 'Tab' ||
249
+ event.defaultPrevented ||
250
+ event.nativeEvent.isComposing ||
251
+ !root ||
252
+ !presented ||
253
+ parked ||
254
+ overlayStore.getBlockingTop()?.id !== entryId
255
+ ) {
256
+ return;
257
+ }
258
+ const tabbable = Array.from(
259
+ root.querySelectorAll<HTMLElement>(
260
+ 'a[href], area[href], button, input:not([type="hidden"]), select, textarea, iframe, object, embed, [tabindex], [contenteditable]:not([contenteditable="false"])'
261
+ )
262
+ )
263
+ .filter((node) => {
264
+ if (
265
+ (node.tabIndex < 0 &&
266
+ (node.hasAttribute('tabindex') ||
267
+ !node.hasAttribute('contenteditable'))) ||
268
+ node.matches(':disabled')
269
+ ) {
270
+ return false;
271
+ }
272
+ for (
273
+ let ancestor: HTMLElement | null = node;
274
+ ancestor;
275
+ ancestor = ancestor.parentElement
276
+ ) {
277
+ const style = getComputedStyle(ancestor);
278
+ if (
279
+ ancestor.inert ||
280
+ ancestor.hasAttribute('inert') ||
281
+ ancestor.hidden ||
282
+ ancestor.getAttribute('aria-hidden') === 'true' ||
283
+ style.display === 'none' ||
284
+ style.visibility === 'hidden'
285
+ ) {
286
+ return false;
287
+ }
288
+ }
289
+ return true;
290
+ })
291
+ .sort((a, b) => {
292
+ const aOrder = a.tabIndex > 0 ? a.tabIndex : Infinity;
293
+ const bOrder = b.tabIndex > 0 ? b.tabIndex : Infinity;
294
+ return aOrder === bOrder ? 0 : aOrder - bOrder;
295
+ });
296
+ const active = document.activeElement;
297
+ const first = tabbable[0];
298
+ const last = tabbable[tabbable.length - 1];
299
+ if (
300
+ !first ||
301
+ active === root ||
302
+ !root.contains(active) ||
303
+ active === (event.shiftKey ? first : last)
304
+ ) {
305
+ event.preventDefault();
306
+ (event.shiftKey ? last : first)?.focus({ preventScroll: true });
307
+ if (!first) root.focus({ preventScroll: true });
308
+ }
309
+ };
310
+
193
311
  return (
194
312
  <div
195
313
  ref={entryRef}
196
314
  {...{ [ENTRY_ATTRIBUTE]: '' }}
197
315
  {...(ownerKey ? { [OVERLAY_OWNER_ATTRIBUTE]: ownerKey } : {})}
198
316
  data-stack-order={stackOrder}
317
+ data-overlay-level-order={levelOrder}
199
318
  data-testid={testID}
200
319
  role={blocking ? 'dialog' : undefined}
201
320
  aria-modal={blocking || undefined}
@@ -211,6 +330,7 @@ function WebOverlayEntry({
211
330
  visibility: parked ? 'hidden' : undefined,
212
331
  }}
213
332
  {...ISOLATED_EVENT_HANDLERS}
333
+ onKeyDownCapture={onKeyDownCapture}
214
334
  >
215
335
  {showBackdrop ? (
216
336
  <div
@@ -221,7 +341,7 @@ function WebOverlayEntry({
221
341
  inset: 0,
222
342
  opacity: 0,
223
343
  background: backdropColor ?? 'transparent',
224
- pointerEvents: blocking ? 'auto' : 'none',
344
+ pointerEvents: blocking || dismissOnBackdropPress ? 'auto' : 'none',
225
345
  }}
226
346
  />
227
347
  ) : null}
@@ -241,48 +361,58 @@ function WebOverlayEntry({
241
361
  ref={contentRef}
242
362
  style={{ position: 'absolute', inset: 0, pointerEvents: 'none' }}
243
363
  >
244
- {sheet ? (
245
- <div
246
- ref={sheetRef}
247
- style={{
248
- position: 'absolute',
249
- left: 0,
250
- right: 0,
251
- bottom: 0,
252
- height: sheet.height,
253
- maxHeight: sheet.maxHeight ?? DEFAULT_SHEET_MAX_HEIGHT,
254
- display: 'flex',
255
- flexDirection: 'column',
256
- overflow: 'hidden',
257
- pointerEvents: 'auto',
258
- touchAction: 'pan-y',
259
- background: sheet.backgroundColor
260
- ? String(sheet.backgroundColor)
261
- : undefined,
262
- borderTopLeftRadius: cornerRadius,
263
- borderTopRightRadius: cornerRadius,
264
- }}
364
+ {/* Keep both hosts and the content slot stable across presentations. */}
365
+ <div
366
+ ref={sheetRef}
367
+ style={
368
+ sheet
369
+ ? {
370
+ position: 'absolute',
371
+ left: 0,
372
+ right: 0,
373
+ bottom: 0,
374
+ height: sheet.height,
375
+ maxHeight: sheet.maxHeight ?? DEFAULT_SHEET_MAX_HEIGHT,
376
+ display: 'flex',
377
+ flexDirection: 'column',
378
+ overflow: 'hidden',
379
+ pointerEvents: 'auto',
380
+ touchAction: 'pan-y',
381
+ background: sheet.backgroundColor
382
+ ? String(sheet.backgroundColor)
383
+ : undefined,
384
+ borderTopLeftRadius: cornerRadius,
385
+ borderTopRightRadius: cornerRadius,
386
+ }
387
+ : {
388
+ position: 'absolute',
389
+ inset: 0,
390
+ display: 'flex',
391
+ flexDirection: 'column',
392
+ pointerEvents: 'none',
393
+ }
394
+ }
395
+ >
396
+ {sheet?.showHandle ? (
397
+ <div
398
+ style={{
399
+ alignSelf: 'center',
400
+ width: 36,
401
+ height: 5,
402
+ marginTop: 8,
403
+ borderRadius: 2.5,
404
+ background: 'rgba(0, 0, 0, 0.2)',
405
+ flexShrink: 0,
406
+ }}
407
+ />
408
+ ) : null}
409
+ <View
410
+ pointerEvents={sheet ? undefined : 'box-none'}
411
+ style={sheet ? { flexShrink: 1 } : StyleSheet.absoluteFill}
265
412
  >
266
- {sheet.showHandle ? (
267
- <div
268
- style={{
269
- alignSelf: 'center',
270
- width: 36,
271
- height: 5,
272
- marginTop: 8,
273
- borderRadius: 2.5,
274
- background: 'rgba(0, 0, 0, 0.2)',
275
- flexShrink: 0,
276
- }}
277
- />
278
- ) : null}
279
- <View style={{ flexShrink: 1 }}>{children}</View>
280
- </div>
281
- ) : (
282
- <View pointerEvents="box-none" style={StyleSheet.absoluteFill}>
283
413
  {children}
284
414
  </View>
285
- )}
415
+ </div>
286
416
  </div>
287
417
  </div>
288
418
  </div>
@@ -317,18 +447,29 @@ export function OverlayView(props: IOverlayViewProps) {
317
447
  // Closed with `keepContentMounted`: the same entry stays in the layer,
318
448
  // hidden and inert, so the content keeps its state and can be measured.
319
449
  const parked = !mounted || !entry;
450
+ const subscribePageHost = useCallback(
451
+ (listener: () => void) => subscribeOverlayPageHost(hostKey, listener),
452
+ [hostKey]
453
+ );
454
+ const getPageHost = useCallback(() => getOverlayPageHost(hostKey), [hostKey]);
455
+ const pageHost = useSyncExternalStore(
456
+ subscribePageHost,
457
+ getPageHost,
458
+ () => undefined
459
+ );
320
460
  if (parked && !keepContentMounted) {
321
461
  return null;
322
462
  }
323
-
324
- const pageHost =
325
- !parked && scope === 'page' ? getOverlayPageHost(hostKey) : undefined;
463
+ if (scope === 'page' && !pageHost) {
464
+ return null;
465
+ }
326
466
  return createPortal(
327
467
  <WebOverlayEntry
328
468
  key="entry"
329
469
  parked={parked}
330
470
  entryId={entry?.id ?? parkedId}
331
471
  stackOrder={entry?.seq ?? 0}
472
+ levelOrder={OVERLAY_LEVEL_ORDER[level]}
332
473
  presented={!parked && presented}
333
474
  animation={animation}
334
475
  blocking={blocking ?? isBlockingLevel(level)}
@@ -342,15 +483,15 @@ export function OverlayView(props: IOverlayViewProps) {
342
483
  sheet={presentation === 'sheet' ? sheet ?? {} : undefined}
343
484
  // Inside a page host all levels share one stacking context.
344
485
  zIndex={
345
- pageHost
486
+ scope === 'page'
346
487
  ? OVERLAY_LEVEL_ORDER[level] * 1000 + (entry?.seq ?? 0)
347
488
  : entry?.seq ?? 0
348
489
  }
349
- ownerKey={pageHost ? ownerKey : undefined}
490
+ ownerKey={scope === 'page' ? ownerKey : undefined}
350
491
  testID={testID}
351
492
  >
352
493
  <OverlayLevelProvider value={level}>{children}</OverlayLevelProvider>
353
494
  </WebOverlayEntry>,
354
- pageHost ?? getOverlayLayerRoot(level)
495
+ scope === 'page' ? pageHost! : getOverlayLayerRoot(level)
355
496
  );
356
497
  }