@onekeyfe/react-native-native-overlay 3.0.162-alpha.270 → 3.0.162-alpha.272
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/android/build.gradle +6 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayAccessibilityIsolation.kt +37 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayHost.kt +14 -20
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayPageHostView.kt +21 -0
- package/android/src/main/java/com/onekey/nativeoverlay/NativeOverlayView.kt +7 -2
- package/android/src/test/java/com/onekey/nativeoverlay/NativeOverlayAccessibilityIsolationTest.kt +112 -0
- package/docs/SPEC.md +28 -1
- package/lib/module/OverlayPageHost.web.js +19 -6
- package/lib/module/OverlayPageHost.web.js.map +1 -1
- package/lib/module/OverlayView.web.js +3 -0
- package/lib/module/OverlayView.web.js.map +1 -1
- package/lib/module/web/overlayLayers.js +11 -9
- package/lib/module/web/overlayLayers.js.map +1 -1
- package/lib/typescript/src/OverlayPageHost.web.d.ts.map +1 -1
- package/lib/typescript/src/OverlayView.web.d.ts.map +1 -1
- package/lib/typescript/src/web/overlayLayers.d.ts +2 -0
- package/lib/typescript/src/web/overlayLayers.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/OverlayPageHost.web.tsx +24 -9
- package/src/OverlayView.web.tsx +4 -0
- package/src/web/overlayLayers.ts +28 -10
package/android/build.gradle
CHANGED
|
@@ -60,6 +60,10 @@ android {
|
|
|
60
60
|
]
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
testOptions {
|
|
65
|
+
unitTests.includeAndroidResources = true
|
|
66
|
+
}
|
|
63
67
|
}
|
|
64
68
|
|
|
65
69
|
repositories {
|
|
@@ -73,6 +77,8 @@ dependencies {
|
|
|
73
77
|
implementation "com.facebook.react:react-android"
|
|
74
78
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
75
79
|
implementation "com.google.android.material:material:1.14.0-alpha05"
|
|
80
|
+
testImplementation "junit:junit:4.13.2"
|
|
81
|
+
testImplementation "org.robolectric:robolectric:4.17"
|
|
76
82
|
}
|
|
77
83
|
|
|
78
84
|
react {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
package com.onekey.nativeoverlay
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
|
|
6
|
+
/** Restores the caller's flags when a blocking overlay no longer covers it. */
|
|
7
|
+
internal class NativeOverlayAccessibilityIsolation {
|
|
8
|
+
private val hidden = mutableMapOf<View, Int>()
|
|
9
|
+
|
|
10
|
+
fun update(
|
|
11
|
+
root: ViewGroup,
|
|
12
|
+
activeContainer: View?,
|
|
13
|
+
entriesBelow: List<View>,
|
|
14
|
+
globalHost: View,
|
|
15
|
+
) {
|
|
16
|
+
val below = mutableSetOf<View>()
|
|
17
|
+
if (activeContainer != null) {
|
|
18
|
+
var node: View = activeContainer
|
|
19
|
+
while (node !== root && node.parent is ViewGroup) {
|
|
20
|
+
val parent = node.parent as ViewGroup
|
|
21
|
+
for (index in 0 until parent.childCount) {
|
|
22
|
+
val sibling = parent.getChildAt(index)
|
|
23
|
+
if (sibling !== node && sibling !== globalHost) below.add(sibling)
|
|
24
|
+
}
|
|
25
|
+
node = parent
|
|
26
|
+
}
|
|
27
|
+
if (node === root) below.addAll(entriesBelow) else below.clear()
|
|
28
|
+
}
|
|
29
|
+
hidden.keys.filter { it !in below }.forEach { view ->
|
|
30
|
+
view.importantForAccessibility = hidden.remove(view) ?: View.IMPORTANT_FOR_ACCESSIBILITY_AUTO
|
|
31
|
+
}
|
|
32
|
+
below.forEach { view ->
|
|
33
|
+
if (view !in hidden) hidden[view] = view.importantForAccessibility
|
|
34
|
+
view.importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -2,7 +2,6 @@ package com.onekey.nativeoverlay
|
|
|
2
2
|
|
|
3
3
|
import android.app.Activity
|
|
4
4
|
import android.view.KeyEvent
|
|
5
|
-
import android.view.View
|
|
6
5
|
import android.view.ViewGroup
|
|
7
6
|
import android.view.Window
|
|
8
7
|
import android.widget.FrameLayout
|
|
@@ -54,7 +53,7 @@ internal class NativeOverlayHost private constructor(
|
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
}
|
|
57
|
-
private val
|
|
56
|
+
private val accessibilityIsolation = NativeOverlayAccessibilityIsolation()
|
|
58
57
|
|
|
59
58
|
init {
|
|
60
59
|
clipChildren = false
|
|
@@ -136,33 +135,28 @@ internal class NativeOverlayHost private constructor(
|
|
|
136
135
|
/** Global overlays win; otherwise the topmost visible page overlay. */
|
|
137
136
|
private fun topBlockingEntry(): NativeOverlayEntryRootView? =
|
|
138
137
|
orderedEntries().lastOrNull { it.blocking && it.isShownForInput }
|
|
139
|
-
?:
|
|
140
|
-
.filter { it.isAttachedToWindow && it.isShown }
|
|
138
|
+
?: shownPageHosts()
|
|
141
139
|
.flatMap { it.shownEntries() }
|
|
142
140
|
.lastOrNull { it.blocking }
|
|
143
141
|
|
|
142
|
+
private fun shownPageHosts(): List<NativeOverlayPageHostView> =
|
|
143
|
+
NativeOverlayPageHostView.allHosts().filter {
|
|
144
|
+
it.isAttachedToWindow && it.isShown && it.rootView === activity.window.decorView
|
|
145
|
+
}
|
|
146
|
+
|
|
144
147
|
/** TalkBack only reads the topmost blocking overlay and what is above it. */
|
|
145
148
|
private fun updateAccessibility() {
|
|
146
149
|
val entries = orderedEntries()
|
|
147
150
|
val topIndex = entries.indexOfLast { it.blocking && it.isShownForInput }
|
|
148
|
-
val content =
|
|
149
|
-
val below = mutableListOf<View>()
|
|
151
|
+
val content = activity.findViewById<ViewGroup>(android.R.id.content) ?: return
|
|
150
152
|
if (topIndex >= 0) {
|
|
151
|
-
content
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
below.addAll(entries.subList(0, topIndex))
|
|
155
|
-
}
|
|
156
|
-
val restore = hiddenForAccessibility.keys.filter { it !in below }
|
|
157
|
-
restore.forEach { view ->
|
|
158
|
-
view.importantForAccessibility = hiddenForAccessibility.remove(view) ?: IMPORTANT_FOR_ACCESSIBILITY_AUTO
|
|
159
|
-
}
|
|
160
|
-
below.forEach { view ->
|
|
161
|
-
if (view !in hiddenForAccessibility) {
|
|
162
|
-
hiddenForAccessibility[view] = view.importantForAccessibility
|
|
163
|
-
view.importantForAccessibility = IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
|
|
164
|
-
}
|
|
153
|
+
accessibilityIsolation.update(content, this, entries.take(topIndex), this)
|
|
154
|
+
return
|
|
165
155
|
}
|
|
156
|
+
val pageEntry = shownPageHosts().flatMap { it.shownEntries() }.lastOrNull { it.blocking }
|
|
157
|
+
val pageHost = pageEntry?.parent as? NativeOverlayPageHostView
|
|
158
|
+
val below = pageHost?.shownEntries()?.takeWhile { it !== pageEntry }.orEmpty()
|
|
159
|
+
accessibilityIsolation.update(content, pageHost, below, this)
|
|
166
160
|
}
|
|
167
161
|
|
|
168
162
|
companion object {
|
|
@@ -3,6 +3,7 @@ package com.onekey.nativeoverlay
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.content.Context
|
|
5
5
|
import android.view.ViewGroup
|
|
6
|
+
import com.facebook.react.bridge.ReactContext
|
|
6
7
|
import com.facebook.react.uimanager.PointerEvents
|
|
7
8
|
import com.facebook.react.uimanager.ReactPointerEventsView
|
|
8
9
|
import java.lang.ref.WeakReference
|
|
@@ -33,6 +34,7 @@ class NativeOverlayPageHostView(context: Context) : ViewGroup(context), ReactPoi
|
|
|
33
34
|
if (owners == suspendedOwners) return
|
|
34
35
|
suspendedOwners = owners
|
|
35
36
|
entries().forEach(::applySuspension)
|
|
37
|
+
onEntriesChanged()
|
|
36
38
|
}
|
|
37
39
|
|
|
38
40
|
internal fun attach(entry: NativeOverlayEntryRootView) {
|
|
@@ -44,10 +46,12 @@ class NativeOverlayPageHostView(context: Context) : ViewGroup(context), ReactPoi
|
|
|
44
46
|
}
|
|
45
47
|
layoutEntries()
|
|
46
48
|
applySuspension(entry)
|
|
49
|
+
onEntriesChanged()
|
|
47
50
|
}
|
|
48
51
|
|
|
49
52
|
internal fun detach(entry: NativeOverlayEntryRootView) {
|
|
50
53
|
removeView(entry)
|
|
54
|
+
onEntriesChanged()
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
/** Visible, input-ready entries in bottom-to-top order. */
|
|
@@ -56,6 +60,23 @@ class NativeOverlayPageHostView(context: Context) : ViewGroup(context), ReactPoi
|
|
|
56
60
|
|
|
57
61
|
fun invalidateHost() {
|
|
58
62
|
if (hostKey.isNotEmpty() && registry[hostKey]?.get() === this) registry.remove(hostKey)
|
|
63
|
+
onEntriesChanged()
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
override fun onAttachedToWindow() {
|
|
67
|
+
super.onAttachedToWindow()
|
|
68
|
+
onEntriesChanged()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
override fun onDetachedFromWindow() {
|
|
72
|
+
super.onDetachedFromWindow()
|
|
73
|
+
onEntriesChanged()
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
private fun onEntriesChanged() {
|
|
77
|
+
(context as? ReactContext)?.currentActivity?.let {
|
|
78
|
+
NativeOverlayHost.of(it).onEntriesChanged()
|
|
79
|
+
}
|
|
59
80
|
}
|
|
60
81
|
|
|
61
82
|
private var layoutScheduled = false
|
|
@@ -135,6 +135,7 @@ class NativeOverlayView(
|
|
|
135
135
|
config = OverlayAnimationConfig.parse(animationConfig)
|
|
136
136
|
}
|
|
137
137
|
entry?.let(::applyEntryConfiguration)
|
|
138
|
+
notifyHostEntriesChanged()
|
|
138
139
|
if (visible) {
|
|
139
140
|
cycleOpen = true
|
|
140
141
|
if (phase == Phase.HIDDEN || phase == Phase.EXITING) present()
|
|
@@ -200,7 +201,7 @@ class NativeOverlayView(
|
|
|
200
201
|
cancelAnimators()
|
|
201
202
|
phase = Phase.ENTERING
|
|
202
203
|
target.isShownForInput = true
|
|
203
|
-
|
|
204
|
+
notifyHostEntriesChanged()
|
|
204
205
|
if (blocking) {
|
|
205
206
|
target.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED)
|
|
206
207
|
}
|
|
@@ -226,7 +227,7 @@ class NativeOverlayView(
|
|
|
226
227
|
cancelAnimators()
|
|
227
228
|
phase = Phase.EXITING
|
|
228
229
|
target.isShownForInput = false
|
|
229
|
-
|
|
230
|
+
notifyHostEntriesChanged()
|
|
230
231
|
val transition = config.exit.reduceMotionAdjusted(isReduceMotionEnabled())
|
|
231
232
|
if (transition.kind == "none") return finishDismiss("programmatic")
|
|
232
233
|
animate(target, hiddenState(target, transition), 0f, transition.motion) {
|
|
@@ -389,6 +390,10 @@ class NativeOverlayView(
|
|
|
389
390
|
}
|
|
390
391
|
}
|
|
391
392
|
|
|
393
|
+
private fun notifyHostEntriesChanged() {
|
|
394
|
+
reactContext.currentActivity?.let { NativeOverlayHost.of(it).onEntriesChanged() }
|
|
395
|
+
}
|
|
396
|
+
|
|
392
397
|
/**
|
|
393
398
|
* While hidden, keep the React child inside this invisible view. Fabric only
|
|
394
399
|
* reports onLayout for attached views, and fitted sheets size themselves
|
package/android/src/test/java/com/onekey/nativeoverlay/NativeOverlayAccessibilityIsolationTest.kt
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
package com.onekey.nativeoverlay
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import android.widget.FrameLayout
|
|
5
|
+
import org.junit.Assert.assertEquals
|
|
6
|
+
import org.junit.Test
|
|
7
|
+
import org.junit.runner.RunWith
|
|
8
|
+
import org.robolectric.RobolectricTestRunner
|
|
9
|
+
import org.robolectric.RuntimeEnvironment
|
|
10
|
+
import org.robolectric.annotation.Config
|
|
11
|
+
|
|
12
|
+
@RunWith(RobolectricTestRunner::class)
|
|
13
|
+
@Config(sdk = [34])
|
|
14
|
+
class NativeOverlayAccessibilityIsolationTest {
|
|
15
|
+
private val context get() = RuntimeEnvironment.getApplication()
|
|
16
|
+
|
|
17
|
+
private class Tree(context: android.content.Context) {
|
|
18
|
+
val root = FrameLayout(context)
|
|
19
|
+
val reactRoot = FrameLayout(context)
|
|
20
|
+
val card = FrameLayout(context)
|
|
21
|
+
val content = View(context).apply { importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_YES }
|
|
22
|
+
val chrome = View(context)
|
|
23
|
+
val pageHost = FrameLayout(context)
|
|
24
|
+
val lower = View(context)
|
|
25
|
+
val blocker = View(context)
|
|
26
|
+
val above = View(context)
|
|
27
|
+
val globalHost = FrameLayout(context)
|
|
28
|
+
|
|
29
|
+
init {
|
|
30
|
+
root.addView(reactRoot)
|
|
31
|
+
root.addView(globalHost)
|
|
32
|
+
reactRoot.addView(card)
|
|
33
|
+
reactRoot.addView(chrome)
|
|
34
|
+
card.addView(content)
|
|
35
|
+
card.addView(pageHost)
|
|
36
|
+
pageHost.addView(lower)
|
|
37
|
+
pageHost.addView(blocker)
|
|
38
|
+
pageHost.addView(above)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Test
|
|
43
|
+
fun pageBlockerHidesPageAndNavigationWithoutHidingTheHost() {
|
|
44
|
+
val tree = Tree(context)
|
|
45
|
+
val isolation = NativeOverlayAccessibilityIsolation()
|
|
46
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
47
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, tree.content.importantForAccessibility)
|
|
48
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, tree.chrome.importantForAccessibility)
|
|
49
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.pageHost.importantForAccessibility)
|
|
50
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.blocker.importantForAccessibility)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
@Test
|
|
54
|
+
fun entriesAbovePageBlockerAndGlobalHostStayAccessible() {
|
|
55
|
+
val tree = Tree(context)
|
|
56
|
+
NativeOverlayAccessibilityIsolation().update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
57
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, tree.lower.importantForAccessibility)
|
|
58
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.above.importantForAccessibility)
|
|
59
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.globalHost.importantForAccessibility)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Test
|
|
63
|
+
fun dismissalOrSuspensionRestoresOriginalFlags() {
|
|
64
|
+
val tree = Tree(context)
|
|
65
|
+
tree.lower.importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO
|
|
66
|
+
val isolation = NativeOverlayAccessibilityIsolation()
|
|
67
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
68
|
+
isolation.update(tree.root, null, emptyList(), tree.globalHost)
|
|
69
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_YES, tree.content.importantForAccessibility)
|
|
70
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO, tree.lower.importantForAccessibility)
|
|
71
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.chrome.importantForAccessibility)
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@Test
|
|
75
|
+
fun globalBlockerHidesReactRootThenPageIsolationReturns() {
|
|
76
|
+
val tree = Tree(context)
|
|
77
|
+
val globalLower = View(context)
|
|
78
|
+
tree.globalHost.addView(globalLower)
|
|
79
|
+
val isolation = NativeOverlayAccessibilityIsolation()
|
|
80
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
81
|
+
isolation.update(tree.root, tree.globalHost, listOf(globalLower), tree.globalHost)
|
|
82
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, tree.reactRoot.importantForAccessibility)
|
|
83
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, globalLower.importantForAccessibility)
|
|
84
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_YES, tree.content.importantForAccessibility)
|
|
85
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
86
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.reactRoot.importantForAccessibility)
|
|
87
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, globalLower.importantForAccessibility)
|
|
88
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, tree.content.importantForAccessibility)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@Test
|
|
92
|
+
fun detachedHostRestoresIsolationInsteadOfHidingAnotherTree() {
|
|
93
|
+
val tree = Tree(context)
|
|
94
|
+
val isolation = NativeOverlayAccessibilityIsolation()
|
|
95
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
96
|
+
tree.card.removeView(tree.pageHost)
|
|
97
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
98
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_YES, tree.content.importantForAccessibility)
|
|
99
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.lower.importantForAccessibility)
|
|
100
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.chrome.importantForAccessibility)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@Test
|
|
104
|
+
fun changingTheBlockingEntryRestoresEntriesNoLongerBelowIt() {
|
|
105
|
+
val tree = Tree(context)
|
|
106
|
+
val isolation = NativeOverlayAccessibilityIsolation()
|
|
107
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower, tree.blocker), tree.globalHost)
|
|
108
|
+
isolation.update(tree.root, tree.pageHost, listOf(tree.lower), tree.globalHost)
|
|
109
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO, tree.blocker.importantForAccessibility)
|
|
110
|
+
assertEquals(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS, tree.lower.importantForAccessibility)
|
|
111
|
+
}
|
|
112
|
+
}
|
package/docs/SPEC.md
CHANGED
|
@@ -35,7 +35,7 @@ retains its original implementation attribution in source comments.
|
|
|
35
35
|
|
|
36
36
|
### Release boundary
|
|
37
37
|
|
|
38
|
-
This branch aligns all 42 publishable workspaces to `3.0.162-alpha.
|
|
38
|
+
This branch aligns all 42 publishable workspaces to `3.0.162-alpha.272`.
|
|
39
39
|
Publish with the existing `package-publish` workflow dispatch, `npm_dist_tag=next`
|
|
40
40
|
and an empty `only_workspace`, which publishes and registry-verifies all 42.
|
|
41
41
|
Do not merge either repository PR or change the `latest` tag. The app-monorepo
|
|
@@ -273,10 +273,37 @@ Known divergences:
|
|
|
273
273
|
such as the DatePicker month-row interpolation, are clipped inside the
|
|
274
274
|
content.
|
|
275
275
|
|
|
276
|
+
### Page interaction and accessibility isolation (review correction)
|
|
277
|
+
|
|
278
|
+
The existing ordering and suspension contract also applies when a page entry
|
|
279
|
+
mounts after its owner was suspended. Such entries MUST remain hidden and inert
|
|
280
|
+
until that owner resumes. Resuming an owner MUST NOT clear isolation imposed by
|
|
281
|
+
a higher blocking entry. Web page isolation compares level first, then request
|
|
282
|
+
order within that level; dismissal restores entries no longer below a blocker.
|
|
283
|
+
|
|
284
|
+
On Android, a blocking page entry MUST hide underlying page/navigation siblings
|
|
285
|
+
from accessibility while preserving the page host and the blocking entry. Entries
|
|
286
|
+
above it, including non-blocking global overlays, remain accessible. Global
|
|
287
|
+
blockers still win over page entries. Attachment, detachment, suspension,
|
|
288
|
+
resumption, input-readiness and blocking changes MUST refresh isolation and
|
|
289
|
+
restore each view's original accessibility flag when it is no longer covered.
|
|
290
|
+
|
|
291
|
+
These are corrections within the existing contract, not new public props. DOM
|
|
292
|
+
and Robolectric tests will verify lifecycle and native flags; manual TalkBack
|
|
293
|
+
navigation remains a separate runtime acceptance item.
|
|
294
|
+
|
|
276
295
|
## 5.9 Conformance and acceptance
|
|
277
296
|
|
|
278
297
|
Automated (P0):
|
|
279
298
|
|
|
299
|
+
- `src/__tests__/pageIsolation.web.test.ts` mounts a real React portal in a
|
|
300
|
+
DOM host and verifies late suspension, level ordering and restoration after
|
|
301
|
+
the blocking entry is removed.
|
|
302
|
+
- `NativeOverlayAccessibilityIsolationTest` runs six Robolectric cases against
|
|
303
|
+
Android views: page/navigation siblings, entries above the blocker, original
|
|
304
|
+
flags, global/page transitions, detached hosts and changing blockers. These
|
|
305
|
+
tests do not replace manual TalkBack navigation.
|
|
306
|
+
|
|
280
307
|
- `src/__tests__/OverlayStore.test.ts` covers:
|
|
281
308
|
- level ordering regardless of request order;
|
|
282
309
|
- page below global;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
4
|
import { useSuspendedPageOwners } from "./useSuspendedPageOwners.js";
|
|
5
|
-
import { registerOverlayPageHost } from "./web/overlayLayers.js";
|
|
5
|
+
import { registerOverlayPageHost, syncOverlayInert } from "./web/overlayLayers.js";
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
const OWNER_ATTRIBUTE = 'data-overlay-owner';
|
|
8
8
|
|
|
@@ -29,12 +29,25 @@ export function OverlayPageHost({
|
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
31
|
const suspended = new Set(suspendedOwners);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
const applySuspension = () => {
|
|
33
|
+
element.querySelectorAll(`[${OWNER_ATTRIBUTE}]`).forEach(node => {
|
|
34
|
+
const hidden = suspended.has(node.getAttribute(OWNER_ATTRIBUTE) ?? '') || node.getAttribute('aria-hidden') === 'true';
|
|
35
|
+
node.style.visibility = hidden ? 'hidden' : '';
|
|
36
|
+
});
|
|
37
|
+
// Combine suspension with blocking-level isolation; resuming an owner
|
|
38
|
+
// must not make an entry below a blocker interactive.
|
|
39
|
+
syncOverlayInert();
|
|
40
|
+
};
|
|
41
|
+
applySuspension();
|
|
42
|
+
const observer = new MutationObserver(applySuspension);
|
|
43
|
+
observer.observe(element, {
|
|
44
|
+
childList: true,
|
|
45
|
+
subtree: true,
|
|
46
|
+
attributes: true,
|
|
47
|
+
attributeFilter: [OWNER_ATTRIBUTE, 'aria-hidden']
|
|
36
48
|
});
|
|
37
|
-
|
|
49
|
+
return () => observer.disconnect();
|
|
50
|
+
}, [hostKey, suspendedOwners]);
|
|
38
51
|
return /*#__PURE__*/_jsx("div", {
|
|
39
52
|
ref: ref,
|
|
40
53
|
style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useSuspendedPageOwners","registerOverlayPageHost","jsx","_jsx","OWNER_ATTRIBUTE","OverlayPageHost","hostKey","ref","suspendedOwners","element","current","suspended","Set","querySelectorAll","forEach","node","hidden","has","getAttribute","style","visibility","
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useSuspendedPageOwners","registerOverlayPageHost","syncOverlayInert","jsx","_jsx","OWNER_ATTRIBUTE","OverlayPageHost","hostKey","ref","suspendedOwners","element","current","suspended","Set","applySuspension","querySelectorAll","forEach","node","hidden","has","getAttribute","style","visibility","observer","MutationObserver","observe","childList","subtree","attributes","attributeFilter","disconnect","position","inset","pointerEvents","zIndex","OVERLAY_OWNER_ATTRIBUTE"],"sourceRoot":"../../src","sources":["OverlayPageHost.web.tsx"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEzC,SAASC,sBAAsB,QAAQ,6BAA0B;AACjE,SAASC,uBAAuB,EAAEC,gBAAgB,QAAQ,wBAAqB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEhF,MAAMC,eAAe,GAAG,oBAAoB;;AAE5C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAC;EAAEC;AAA6B,CAAC,EAAE;EAChE,MAAMC,GAAG,GAAGT,MAAM,CAAiB,IAAI,CAAC;EACxC,MAAMU,eAAe,GAAGT,sBAAsB,CAACO,OAAO,CAAC;EAEvDT,SAAS,CAAC,MAAM;IACd,MAAMY,OAAO,GAAGF,GAAG,CAACG,OAAO;IAC3B,IAAI,CAACD,OAAO,EAAE;MACZ;IACF;IACA,OAAOT,uBAAuB,CAACM,OAAO,EAAEG,OAAO,CAAC;EAClD,CAAC,EAAE,CAACH,OAAO,CAAC,CAAC;EAEbT,SAAS,CAAC,MAAM;IACd,MAAMY,OAAO,GAAGF,GAAG,CAACG,OAAO;IAC3B,IAAI,CAACD,OAAO,EAAE;MACZ;IACF;IACA,MAAME,SAAS,GAAG,IAAIC,GAAG,CAACJ,eAAe,CAAC;IAC1C,MAAMK,eAAe,GAAGA,CAAA,KAAM;MAC5BJ,OAAO,CACJK,gBAAgB,CAAc,IAAIV,eAAe,GAAG,CAAC,CACrDW,OAAO,CAAEC,IAAI,IAAK;QACjB,MAAMC,MAAM,GACVN,SAAS,CAACO,GAAG,CAACF,IAAI,CAACG,YAAY,CAACf,eAAe,CAAC,IAAI,EAAE,CAAC,IACvDY,IAAI,CAACG,YAAY,CAAC,aAAa,CAAC,KAAK,MAAM;QAC7CH,IAAI,CAACI,KAAK,CAACC,UAAU,GAAGJ,MAAM,GAAG,QAAQ,GAAG,EAAE;MAChD,CAAC,CAAC;MACJ;MACA;MACAhB,gBAAgB,CAAC,CAAC;IACpB,CAAC;IACDY,eAAe,CAAC,CAAC;IACjB,MAAMS,QAAQ,GAAG,IAAIC,gBAAgB,CAACV,eAAe,CAAC;IACtDS,QAAQ,CAACE,OAAO,CAACf,OAAO,EAAE;MACxBgB,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE,IAAI;MACbC,UAAU,EAAE,IAAI;MAChBC,eAAe,EAAE,CAACxB,eAAe,EAAE,aAAa;IAClD,CAAC,CAAC;IACF,OAAO,MAAMkB,QAAQ,CAACO,UAAU,CAAC,CAAC;EACpC,CAAC,EAAE,CAACvB,OAAO,EAAEE,eAAe,CAAC,CAAC;EAE9B,oBACEL,IAAA;IACEI,GAAG,EAAEA,GAAI;IACTa,KAAK,EAAE;MACLU,QAAQ,EAAE,UAAU;MACpBC,KAAK,EAAE,CAAC;MACRC,aAAa,EAAE,MAAM;MACrBC,MAAM,EAAE;IACV;EAAE,CACH,CAAC;AAEN;AAEA,SAAS7B,eAAe,IAAI8B,uBAAuB","ignoreList":[]}
|
|
@@ -32,6 +32,7 @@ function WebOverlayEntry({
|
|
|
32
32
|
entryId,
|
|
33
33
|
parked = false,
|
|
34
34
|
stackOrder,
|
|
35
|
+
levelOrder,
|
|
35
36
|
presented,
|
|
36
37
|
animation,
|
|
37
38
|
blocking,
|
|
@@ -148,6 +149,7 @@ function WebOverlayEntry({
|
|
|
148
149
|
[OVERLAY_OWNER_ATTRIBUTE]: ownerKey
|
|
149
150
|
} : {}),
|
|
150
151
|
"data-stack-order": stackOrder,
|
|
152
|
+
"data-overlay-level-order": levelOrder,
|
|
151
153
|
"data-testid": testID,
|
|
152
154
|
role: blocking ? 'dialog' : undefined,
|
|
153
155
|
"aria-modal": blocking || undefined,
|
|
@@ -267,6 +269,7 @@ export function OverlayView(props) {
|
|
|
267
269
|
parked: parked,
|
|
268
270
|
entryId: entry?.id ?? parkedId,
|
|
269
271
|
stackOrder: entry?.seq ?? 0,
|
|
272
|
+
levelOrder: OVERLAY_LEVEL_ORDER[level],
|
|
270
273
|
presented: !parked && presented,
|
|
271
274
|
animation: animation,
|
|
272
275
|
blocking: blocking ?? isBlockingLevel(level),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useId","useLayoutEffect","useRef","createPortal","StyleSheet","View","OverlayLevelProvider","OVERLAY_LEVEL_ORDER","isBlockingLevel","OVERLAY_OWNER_ATTRIBUTE","useOverlayController","animateBackdrop","animateTransition","ENTRY_ATTRIBUTE","getOverlayLayerRoot","getOverlayPageHost","registerOverlayDismissRequester","scheduleOverlayInertSync","useKeyboardShift","useSheetDrag","jsx","_jsx","jsxs","_jsxs","DEFAULT_BACKDROP_COLOR","DEFAULT_SHEET_MAX_HEIGHT","DEFAULT_SHEET_CORNER_RADIUS","stopPropagation","event","ISOLATED_EVENT_HANDLERS","onClick","onPointerDown","onPointerUp","onKeyDown","WebOverlayEntry","entryId","parked","stackOrder","presented","animation","blocking","backdropColor","dismissOnBackdropPress","onPresented","onDismissed","onRequestDismiss","sheet","zIndex","ownerKey","testID","children","sheetRef","pannedAwayRef","isSheet","entryRef","contentRef","keyboardLayerRef","backdropRef","directionRef","undefined","restoreFocusRef","callbacksRef","current","content","direction","neverEntered","document","activeElement","focus","preventScroll","getAnimations","forEach","running","cancel","contentRoot","firstElementChild","transition","enter","exit","backdrop","motion","filter","item","Promise","all","map","finished","then","catch","backdropNode","onBackdropClick","addEventListener","removeEventListener","layerRef","enabled","dismissOnPanDown","onDismissByPan","showBackdrop","cornerRadius","ref","role","tabIndex","inert","style","position","inset","pointerEvents","outline","visibility","opacity","background","left","right","bottom","height","maxHeight","display","flexDirection","overflow","touchAction","backgroundColor","String","borderTopLeftRadius","borderTopRightRadius","showHandle","alignSelf","width","marginTop","borderRadius","flexShrink","absoluteFill","OverlayView","props","level","presentation","keepContentMounted","parkedId","entry","mounted","onHostPresented","onHostDismissed","onHostRequestDismiss","scope","hostKey","pageHost","id","seq","color","dismissOnPress","value"],"sourceRoot":"../../src","sources":["OverlayView.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useEffect","useId","useLayoutEffect","useRef","createPortal","StyleSheet","View","OverlayLevelProvider","OVERLAY_LEVEL_ORDER","isBlockingLevel","OVERLAY_OWNER_ATTRIBUTE","useOverlayController","animateBackdrop","animateTransition","ENTRY_ATTRIBUTE","getOverlayLayerRoot","getOverlayPageHost","registerOverlayDismissRequester","scheduleOverlayInertSync","useKeyboardShift","useSheetDrag","jsx","_jsx","jsxs","_jsxs","DEFAULT_BACKDROP_COLOR","DEFAULT_SHEET_MAX_HEIGHT","DEFAULT_SHEET_CORNER_RADIUS","stopPropagation","event","ISOLATED_EVENT_HANDLERS","onClick","onPointerDown","onPointerUp","onKeyDown","WebOverlayEntry","entryId","parked","stackOrder","levelOrder","presented","animation","blocking","backdropColor","dismissOnBackdropPress","onPresented","onDismissed","onRequestDismiss","sheet","zIndex","ownerKey","testID","children","sheetRef","pannedAwayRef","isSheet","entryRef","contentRef","keyboardLayerRef","backdropRef","directionRef","undefined","restoreFocusRef","callbacksRef","current","content","direction","neverEntered","document","activeElement","focus","preventScroll","getAnimations","forEach","running","cancel","contentRoot","firstElementChild","transition","enter","exit","backdrop","motion","filter","item","Promise","all","map","finished","then","catch","backdropNode","onBackdropClick","addEventListener","removeEventListener","layerRef","enabled","dismissOnPanDown","onDismissByPan","showBackdrop","cornerRadius","ref","role","tabIndex","inert","style","position","inset","pointerEvents","outline","visibility","opacity","background","left","right","bottom","height","maxHeight","display","flexDirection","overflow","touchAction","backgroundColor","String","borderTopLeftRadius","borderTopRightRadius","showHandle","alignSelf","width","marginTop","borderRadius","flexShrink","absoluteFill","OverlayView","props","level","presentation","keepContentMounted","parkedId","entry","mounted","onHostPresented","onHostDismissed","onHostRequestDismiss","scope","hostKey","pageHost","id","seq","color","dismissOnPress","value"],"sourceRoot":"../../src","sources":["OverlayView.web.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -52,14 +52,16 @@ function siblingsOutside(host, root) {
|
|
|
52
52
|
}
|
|
53
53
|
return siblings;
|
|
54
54
|
}
|
|
55
|
-
function inertEntriesBelow(container,
|
|
55
|
+
function inertEntriesBelow(container, top) {
|
|
56
56
|
container.querySelectorAll(`[${ENTRY_ATTRIBUTE}]`).forEach(node => {
|
|
57
|
-
|
|
57
|
+
const level = Number(node.dataset.overlayLevelOrder);
|
|
58
|
+
const below = !!top && (level < OVERLAY_LEVEL_ORDER[top.level] || level === OVERLAY_LEVEL_ORDER[top.level] && Number(node.dataset.stackOrder) < top.seq);
|
|
59
|
+
setInert(node, below || node.style.visibility === 'hidden' || node.getAttribute('aria-hidden') === 'true');
|
|
58
60
|
});
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
/** Everything rendered below the topmost blocking entry becomes inert. */
|
|
62
|
-
function
|
|
64
|
+
export function syncOverlayInert() {
|
|
63
65
|
const top = overlayStore.getBlockingTop();
|
|
64
66
|
const appRoot = document.getElementById(APP_ROOT_ID);
|
|
65
67
|
let nextPageInert = new Set();
|
|
@@ -67,7 +69,6 @@ function syncInert() {
|
|
|
67
69
|
if (top && pageHost && appRoot?.contains(pageHost)) {
|
|
68
70
|
setInert(appRoot, false);
|
|
69
71
|
nextPageInert = siblingsOutside(pageHost, appRoot);
|
|
70
|
-
inertEntriesBelow(pageHost, top.seq);
|
|
71
72
|
} else {
|
|
72
73
|
setInert(appRoot, !!top);
|
|
73
74
|
}
|
|
@@ -78,13 +79,14 @@ function syncInert() {
|
|
|
78
79
|
});
|
|
79
80
|
nextPageInert.forEach(element => setInert(element, true));
|
|
80
81
|
pageInertElements = nextPageInert;
|
|
82
|
+
for (const [hostKey, host] of pageHosts) {
|
|
83
|
+
inertEntriesBelow(host, top?.scope === 'page' && top.hostKey === hostKey ? top : undefined);
|
|
84
|
+
}
|
|
81
85
|
for (const [level, root] of layerRoots) {
|
|
82
86
|
// Global layers render above every page overlay.
|
|
83
87
|
const below = top?.scope === 'global' && OVERLAY_LEVEL_ORDER[level] < OVERLAY_LEVEL_ORDER[top.level];
|
|
84
88
|
setInert(root, below);
|
|
85
|
-
|
|
86
|
-
inertEntriesBelow(root, top.seq);
|
|
87
|
-
}
|
|
89
|
+
inertEntriesBelow(root, top?.scope === 'global' && level === top.level ? top : undefined);
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
function onKeyDown(event) {
|
|
@@ -107,7 +109,7 @@ function installOverlayWebManager() {
|
|
|
107
109
|
return;
|
|
108
110
|
}
|
|
109
111
|
installed = true;
|
|
110
|
-
overlayStore.subscribe(
|
|
112
|
+
overlayStore.subscribe(syncOverlayInert);
|
|
111
113
|
document.addEventListener('keydown', onKeyDown, true);
|
|
112
114
|
}
|
|
113
115
|
export function getOverlayLayerRoot(level) {
|
|
@@ -130,7 +132,7 @@ export function registerOverlayDismissRequester(id, requester) {
|
|
|
130
132
|
|
|
131
133
|
/** Re-run after entry DOM nodes mount, since the store emits before commit. */
|
|
132
134
|
export function scheduleOverlayInertSync() {
|
|
133
|
-
requestAnimationFrame(
|
|
135
|
+
requestAnimationFrame(syncOverlayInert);
|
|
134
136
|
}
|
|
135
137
|
export function registerOverlayPageHost(hostKey, element) {
|
|
136
138
|
installOverlayWebManager();
|
|
@@ -1 +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","
|
|
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","top","querySelectorAll","forEach","Number","dataset","overlayLevelOrder","below","stackOrder","seq","visibility","getAttribute","syncOverlayInert","getBlockingTop","appRoot","getElementById","nextPageInert","pageHost","scope","getOverlayPageHost","hostKey","undefined","contains","has","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":[]}
|
|
@@ -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,
|
|
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"}
|
|
@@ -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;
|
|
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;AA4Q5B,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,sCAiEnD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
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. */
|
|
@@ -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,
|
|
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;AA8E3D,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,CAQZ;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,cAAc,GAAG,SAAS,CAE5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onekeyfe/react-native-native-overlay",
|
|
3
|
-
"version": "3.0.162-alpha.
|
|
3
|
+
"version": "3.0.162-alpha.272",
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
package/src/OverlayView.web.tsx
CHANGED
|
@@ -48,6 +48,7 @@ interface IWebOverlayEntryProps {
|
|
|
48
48
|
/** Closed but kept mounted: hidden and inert. */
|
|
49
49
|
parked?: boolean;
|
|
50
50
|
stackOrder: number;
|
|
51
|
+
levelOrder: number;
|
|
51
52
|
presented: boolean;
|
|
52
53
|
animation: IResolvedOverlayAnimation;
|
|
53
54
|
blocking: boolean;
|
|
@@ -69,6 +70,7 @@ function WebOverlayEntry({
|
|
|
69
70
|
entryId,
|
|
70
71
|
parked = false,
|
|
71
72
|
stackOrder,
|
|
73
|
+
levelOrder,
|
|
72
74
|
presented,
|
|
73
75
|
animation,
|
|
74
76
|
blocking,
|
|
@@ -196,6 +198,7 @@ function WebOverlayEntry({
|
|
|
196
198
|
{...{ [ENTRY_ATTRIBUTE]: '' }}
|
|
197
199
|
{...(ownerKey ? { [OVERLAY_OWNER_ATTRIBUTE]: ownerKey } : {})}
|
|
198
200
|
data-stack-order={stackOrder}
|
|
201
|
+
data-overlay-level-order={levelOrder}
|
|
199
202
|
data-testid={testID}
|
|
200
203
|
role={blocking ? 'dialog' : undefined}
|
|
201
204
|
aria-modal={blocking || undefined}
|
|
@@ -329,6 +332,7 @@ export function OverlayView(props: IOverlayViewProps) {
|
|
|
329
332
|
parked={parked}
|
|
330
333
|
entryId={entry?.id ?? parkedId}
|
|
331
334
|
stackOrder={entry?.seq ?? 0}
|
|
335
|
+
levelOrder={OVERLAY_LEVEL_ORDER[level]}
|
|
332
336
|
presented={!parked && presented}
|
|
333
337
|
animation={animation}
|
|
334
338
|
blocking={blocking ?? isBlockingLevel(level)}
|
package/src/web/overlayLayers.ts
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
import { overlayStore } from '../OverlayStore';
|
|
7
7
|
|
|
8
8
|
import type { IOverlayRequestDismissReason } from '../OverlayViewTypes';
|
|
9
|
-
import type { IOverlayLevel } from '../types';
|
|
9
|
+
import type { IOverlayEntry, IOverlayLevel } from '../types';
|
|
10
10
|
|
|
11
11
|
const LAYER_ATTRIBUTE = 'data-onekey-overlay-layer';
|
|
12
12
|
export const ENTRY_ATTRIBUTE = 'data-onekey-overlay-entry';
|
|
@@ -68,16 +68,27 @@ function siblingsOutside(host: HTMLElement, root: HTMLElement) {
|
|
|
68
68
|
return siblings;
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
function inertEntriesBelow(container: ParentNode,
|
|
71
|
+
function inertEntriesBelow(container: ParentNode, top?: IOverlayEntry) {
|
|
72
72
|
container
|
|
73
73
|
.querySelectorAll<HTMLElement>(`[${ENTRY_ATTRIBUTE}]`)
|
|
74
74
|
.forEach((node) => {
|
|
75
|
-
|
|
75
|
+
const level = Number(node.dataset.overlayLevelOrder);
|
|
76
|
+
const below =
|
|
77
|
+
!!top &&
|
|
78
|
+
(level < OVERLAY_LEVEL_ORDER[top.level] ||
|
|
79
|
+
(level === OVERLAY_LEVEL_ORDER[top.level] &&
|
|
80
|
+
Number(node.dataset.stackOrder) < top.seq));
|
|
81
|
+
setInert(
|
|
82
|
+
node,
|
|
83
|
+
below ||
|
|
84
|
+
node.style.visibility === 'hidden' ||
|
|
85
|
+
node.getAttribute('aria-hidden') === 'true'
|
|
86
|
+
);
|
|
76
87
|
});
|
|
77
88
|
}
|
|
78
89
|
|
|
79
90
|
/** Everything rendered below the topmost blocking entry becomes inert. */
|
|
80
|
-
function
|
|
91
|
+
export function syncOverlayInert() {
|
|
81
92
|
const top = overlayStore.getBlockingTop();
|
|
82
93
|
const appRoot = document.getElementById(APP_ROOT_ID);
|
|
83
94
|
let nextPageInert = new Set<HTMLElement>();
|
|
@@ -86,7 +97,6 @@ function syncInert() {
|
|
|
86
97
|
if (top && pageHost && appRoot?.contains(pageHost)) {
|
|
87
98
|
setInert(appRoot, false);
|
|
88
99
|
nextPageInert = siblingsOutside(pageHost, appRoot);
|
|
89
|
-
inertEntriesBelow(pageHost, top.seq);
|
|
90
100
|
} else {
|
|
91
101
|
setInert(appRoot, !!top);
|
|
92
102
|
}
|
|
@@ -98,15 +108,23 @@ function syncInert() {
|
|
|
98
108
|
nextPageInert.forEach((element) => setInert(element, true));
|
|
99
109
|
pageInertElements = nextPageInert;
|
|
100
110
|
|
|
111
|
+
for (const [hostKey, host] of pageHosts) {
|
|
112
|
+
inertEntriesBelow(
|
|
113
|
+
host,
|
|
114
|
+
top?.scope === 'page' && top.hostKey === hostKey ? top : undefined
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
101
118
|
for (const [level, root] of layerRoots) {
|
|
102
119
|
// Global layers render above every page overlay.
|
|
103
120
|
const below =
|
|
104
121
|
top?.scope === 'global' &&
|
|
105
122
|
OVERLAY_LEVEL_ORDER[level] < OVERLAY_LEVEL_ORDER[top.level];
|
|
106
123
|
setInert(root, below);
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
124
|
+
inertEntriesBelow(
|
|
125
|
+
root,
|
|
126
|
+
top?.scope === 'global' && level === top.level ? top : undefined
|
|
127
|
+
);
|
|
110
128
|
}
|
|
111
129
|
}
|
|
112
130
|
|
|
@@ -131,7 +149,7 @@ function installOverlayWebManager() {
|
|
|
131
149
|
return;
|
|
132
150
|
}
|
|
133
151
|
installed = true;
|
|
134
|
-
overlayStore.subscribe(
|
|
152
|
+
overlayStore.subscribe(syncOverlayInert);
|
|
135
153
|
document.addEventListener('keydown', onKeyDown, true);
|
|
136
154
|
}
|
|
137
155
|
|
|
@@ -159,7 +177,7 @@ export function registerOverlayDismissRequester(
|
|
|
159
177
|
|
|
160
178
|
/** Re-run after entry DOM nodes mount, since the store emits before commit. */
|
|
161
179
|
export function scheduleOverlayInertSync() {
|
|
162
|
-
requestAnimationFrame(
|
|
180
|
+
requestAnimationFrame(syncOverlayInert);
|
|
163
181
|
}
|
|
164
182
|
|
|
165
183
|
export function registerOverlayPageHost(
|