react-native-edge-to-edge 1.4.1 → 1.4.3-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/zoontek/rnedgetoedge/EdgeToEdgeModuleImpl.kt +86 -42
- package/android/src/main/res/values/attrs.xml +1 -1
- package/android/src/main/res/values/styles.xml +8 -8
- package/android/src/newarch/com/zoontek/rnedgetoedge/EdgeToEdgeModule.kt +14 -3
- package/android/src/oldarch/com/zoontek/rnedgetoedge/EdgeToEdgeModule.kt +17 -3
- package/dist/commonjs/SystemBars.js +44 -44
- package/dist/commonjs/SystemBars.js.map +1 -1
- package/dist/commonjs/expo.js +18 -18
- package/dist/commonjs/expo.js.map +1 -1
- package/dist/commonjs/specs/NativeEdgeToEdgeModule.js +1 -1
- package/dist/commonjs/specs/NativeEdgeToEdgeModule.js.map +1 -1
- package/dist/commonjs/specs/NativeEdgeToEdgeModule.web.js +1 -4
- package/dist/commonjs/specs/NativeEdgeToEdgeModule.web.js.map +1 -1
- package/dist/module/SystemBars.js +45 -45
- package/dist/module/SystemBars.js.map +1 -1
- package/dist/module/expo.js +18 -18
- package/dist/module/expo.js.map +1 -1
- package/dist/module/specs/NativeEdgeToEdgeModule.js +2 -2
- package/dist/module/specs/NativeEdgeToEdgeModule.js.map +1 -1
- package/dist/module/specs/NativeEdgeToEdgeModule.web.js +1 -4
- package/dist/module/specs/NativeEdgeToEdgeModule.web.js.map +1 -1
- package/dist/typescript/SystemBars.d.ts.map +1 -1
- package/dist/typescript/specs/NativeEdgeToEdgeModule.d.ts +6 -8
- package/dist/typescript/specs/NativeEdgeToEdgeModule.d.ts.map +1 -1
- package/dist/typescript/specs/NativeEdgeToEdgeModule.web.d.ts +1 -4
- package/dist/typescript/specs/NativeEdgeToEdgeModule.web.d.ts.map +1 -1
- package/dist/typescript/types.d.ts +2 -2
- package/dist/typescript/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/SystemBars.ts +77 -74
- package/src/expo.ts +15 -15
- package/src/specs/NativeEdgeToEdgeModule.ts +11 -10
- package/src/specs/NativeEdgeToEdgeModule.web.ts +1 -6
- package/src/types.ts +2 -2
|
@@ -2,16 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useMemo, useRef } from "react";
|
|
4
4
|
import { Appearance, Platform, StatusBar, useColorScheme } from "react-native";
|
|
5
|
-
import
|
|
5
|
+
import NativeModule from "./specs/NativeEdgeToEdgeModule";
|
|
6
6
|
function getColorScheme() {
|
|
7
7
|
return Appearance?.getColorScheme() ?? "light";
|
|
8
8
|
}
|
|
9
|
+
function toNativeBarStyle(style) {
|
|
10
|
+
return style === "light" || style === "dark" ? `${style}-content` : "default";
|
|
11
|
+
}
|
|
9
12
|
|
|
10
13
|
/**
|
|
11
14
|
* Merges the entries stack.
|
|
12
15
|
*/
|
|
13
16
|
function mergeEntriesStack(entriesStack) {
|
|
14
|
-
|
|
17
|
+
return entriesStack.reduce((prev, cur) => {
|
|
15
18
|
for (const prop in cur) {
|
|
16
19
|
if (cur[prop] != null) {
|
|
17
20
|
// @ts-expect-error
|
|
@@ -21,15 +24,10 @@ function mergeEntriesStack(entriesStack) {
|
|
|
21
24
|
return prev;
|
|
22
25
|
}, {
|
|
23
26
|
statusBarStyle: undefined,
|
|
24
|
-
statusBarHidden: undefined,
|
|
25
27
|
navigationBarStyle: undefined,
|
|
26
|
-
|
|
28
|
+
statusBarHidden: false,
|
|
29
|
+
navigationBarHidden: false
|
|
27
30
|
});
|
|
28
|
-
if (mergedEntry.statusBarStyle == null && mergedEntry.statusBarHidden == null && mergedEntry.navigationBarStyle == null && mergedEntry.navigationBarHidden == null) {
|
|
29
|
-
return null;
|
|
30
|
-
} else {
|
|
31
|
-
return mergedEntry;
|
|
32
|
-
}
|
|
33
31
|
}
|
|
34
32
|
|
|
35
33
|
/**
|
|
@@ -38,8 +36,8 @@ function mergeEntriesStack(entriesStack) {
|
|
|
38
36
|
function createStackEntry(props) {
|
|
39
37
|
return {
|
|
40
38
|
statusBarStyle: typeof props.style === "string" ? props.style : props.style?.statusBar,
|
|
41
|
-
statusBarHidden: typeof props.hidden === "boolean" ? props.hidden : props.hidden?.statusBar,
|
|
42
39
|
navigationBarStyle: typeof props.style === "string" ? props.style : props.style?.navigationBar,
|
|
40
|
+
statusBarHidden: typeof props.hidden === "boolean" ? props.hidden : props.hidden?.statusBar,
|
|
43
41
|
navigationBarHidden: typeof props.hidden === "boolean" ? props.hidden : props.hidden?.navigationBar
|
|
44
42
|
};
|
|
45
43
|
}
|
|
@@ -49,7 +47,12 @@ const entriesStack = [];
|
|
|
49
47
|
let updateImmediate = null;
|
|
50
48
|
|
|
51
49
|
// The current merged values from the entries stack.
|
|
52
|
-
let currentMergedEntries =
|
|
50
|
+
let currentMergedEntries = {
|
|
51
|
+
statusBarStyle: undefined,
|
|
52
|
+
navigationBarStyle: undefined,
|
|
53
|
+
statusBarHidden: false,
|
|
54
|
+
navigationBarHidden: false
|
|
55
|
+
};
|
|
53
56
|
|
|
54
57
|
/**
|
|
55
58
|
* Updates the native system bars with the entries from the stack.
|
|
@@ -60,42 +63,39 @@ function updateEntriesStack() {
|
|
|
60
63
|
clearImmediate(updateImmediate);
|
|
61
64
|
}
|
|
62
65
|
updateImmediate = setImmediate(() => {
|
|
66
|
+
const autoBarStyle = getColorScheme() === "light" ? "dark" : "light";
|
|
63
67
|
const mergedEntries = mergeEntriesStack(entriesStack);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
}
|
|
68
|
+
const statusBarStyle = mergedEntries.statusBarStyle === "auto" ? autoBarStyle : mergedEntries.statusBarStyle;
|
|
69
|
+
const navigationBarStyle = mergedEntries.navigationBarStyle === "auto" ? autoBarStyle : mergedEntries.navigationBarStyle;
|
|
70
|
+
const {
|
|
71
|
+
statusBarHidden,
|
|
72
|
+
navigationBarHidden
|
|
73
|
+
} = mergedEntries;
|
|
74
|
+
if (statusBarStyle !== currentMergedEntries.statusBarStyle) {
|
|
75
|
+
const style = toNativeBarStyle(statusBarStyle);
|
|
76
|
+
console.log({
|
|
77
|
+
style
|
|
78
|
+
});
|
|
79
|
+
Platform.OS === "android" ? NativeModule?.setStatusBarStyle(style) : StatusBar.setBarStyle(style, true);
|
|
80
|
+
}
|
|
81
|
+
if (statusBarHidden !== currentMergedEntries.statusBarHidden) {
|
|
82
|
+
Platform.OS === "android" ? NativeModule?.setStatusBarHidden(statusBarHidden) : StatusBar.setHidden(statusBarHidden, "fade"); // 'slide' doesn't work in this context
|
|
83
|
+
}
|
|
84
|
+
if (Platform.OS === "android") {
|
|
85
|
+
if (navigationBarStyle !== currentMergedEntries.navigationBarStyle) {
|
|
86
|
+
const style = toNativeBarStyle(navigationBarStyle);
|
|
87
|
+
NativeModule?.setNavigationBarStyle(style);
|
|
88
|
+
}
|
|
89
|
+
if (navigationBarHidden !== currentMergedEntries.navigationBarHidden) {
|
|
90
|
+
NativeModule?.setNavigationBarHidden(navigationBarHidden);
|
|
89
91
|
}
|
|
90
|
-
currentMergedEntries = {
|
|
91
|
-
statusBarStyle,
|
|
92
|
-
statusBarHidden,
|
|
93
|
-
navigationBarStyle,
|
|
94
|
-
navigationBarHidden
|
|
95
|
-
};
|
|
96
|
-
} else {
|
|
97
|
-
currentMergedEntries = null;
|
|
98
92
|
}
|
|
93
|
+
currentMergedEntries = {
|
|
94
|
+
statusBarStyle,
|
|
95
|
+
navigationBarStyle,
|
|
96
|
+
statusBarHidden,
|
|
97
|
+
navigationBarHidden
|
|
98
|
+
};
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
}
|
|
@@ -146,8 +146,8 @@ export function SystemBars({
|
|
|
146
146
|
style
|
|
147
147
|
}) {
|
|
148
148
|
const statusBarStyle = typeof style === "string" ? style : style?.statusBar;
|
|
149
|
-
const statusBarHidden = typeof hidden === "boolean" ? hidden : hidden?.statusBar;
|
|
150
149
|
const navigationBarStyle = typeof style === "string" ? style : style?.navigationBar;
|
|
150
|
+
const statusBarHidden = typeof hidden === "boolean" ? hidden : hidden?.statusBar;
|
|
151
151
|
const navigationBarHidden = typeof hidden === "boolean" ? hidden : hidden?.navigationBar;
|
|
152
152
|
const stableProps = useMemo(() => ({
|
|
153
153
|
style: statusBarStyle === navigationBarStyle ? statusBarStyle : {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useMemo","useRef","Appearance","Platform","StatusBar","useColorScheme","
|
|
1
|
+
{"version":3,"names":["useEffect","useMemo","useRef","Appearance","Platform","StatusBar","useColorScheme","NativeModule","getColorScheme","toNativeBarStyle","style","mergeEntriesStack","entriesStack","reduce","prev","cur","prop","statusBarStyle","undefined","navigationBarStyle","statusBarHidden","navigationBarHidden","createStackEntry","props","statusBar","navigationBar","hidden","updateImmediate","currentMergedEntries","updateEntriesStack","OS","clearImmediate","setImmediate","autoBarStyle","mergedEntries","console","log","setStatusBarStyle","setBarStyle","setStatusBarHidden","setHidden","setNavigationBarStyle","setNavigationBarHidden","pushStackEntry","entry","push","popStackEntry","index","indexOf","splice","replaceStackEntry","newEntry","SystemBars","stableProps","colorScheme","stackEntryRef","current"],"sourceRoot":"../../src","sources":["SystemBars.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/module/expo.js
CHANGED
|
@@ -38,14 +38,6 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
|
|
|
38
38
|
if (style.item != null) {
|
|
39
39
|
style.item = style.item.filter(item => !cleanupList.has(item.$.name));
|
|
40
40
|
}
|
|
41
|
-
if (enforceNavigationBarContrast === false) {
|
|
42
|
-
style.item.push({
|
|
43
|
-
$: {
|
|
44
|
-
name: "enforceNavigationBarContrast"
|
|
45
|
-
},
|
|
46
|
-
_: String(false)
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
41
|
if (statusBarStyle != null) {
|
|
50
42
|
style.item.push({
|
|
51
43
|
$: {
|
|
@@ -61,19 +53,27 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
|
|
|
61
53
|
_: String(userInterfaceStyle === "light")
|
|
62
54
|
});
|
|
63
55
|
}
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
56
|
+
if (enforceNavigationBarContrast === false) {
|
|
57
|
+
if (navigationBarStyle != null) {
|
|
58
|
+
style.item.push({
|
|
59
|
+
$: {
|
|
60
|
+
name: "android:windowLightNavigationBar"
|
|
61
|
+
},
|
|
62
|
+
_: String(navigationBarStyle === "dark-content")
|
|
63
|
+
});
|
|
64
|
+
} else if (userInterfaceStyle !== "automatic") {
|
|
65
|
+
style.item.push({
|
|
66
|
+
$: {
|
|
67
|
+
name: "android:windowLightNavigationBar"
|
|
68
|
+
},
|
|
69
|
+
_: String(navigationBarStyle === "light")
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
72
|
style.item.push({
|
|
73
73
|
$: {
|
|
74
|
-
name: "
|
|
74
|
+
name: "enforceNavigationBarContrast"
|
|
75
75
|
},
|
|
76
|
-
_: String(
|
|
76
|
+
_: String(false)
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
}
|
package/dist/module/expo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createRunOncePlugin","withAndroidStyles","withAndroidEdgeToEdgeTheme","config","props","themes","Default","Material2","Material3","Light","cleanupList","Set","androidNavigationBar","androidStatusBar","userInterfaceStyle","barStyle","navigationBarStyle","statusBarStyle","android","enforceNavigationBarContrast","parentTheme","modResults","resources","style","map","$","name","parent","item","filter","has","push","_","String"],"sourceRoot":"../../src","sources":["expo.ts"],"mappings":";;AAAA,SAEEA,mBAAmB,EACnBC,iBAAiB,QACZ,sBAAsB;AAmB7B,MAAMC,0BAA+C,GAAGA,CACtDC,MAAM,EACNC,KAAK,GAAG,CAAC,CAAC,KACP;EACH,MAAMC,MAAmC,GAAG;IAC1CC,OAAO,EAAE,kBAAkB;IAC3BC,SAAS,EAAE,4BAA4B;IACvCC,SAAS,EAAE,4BAA4B;IACvC,mBAAmB,EAAE,oCAAoC;IAEzDC,KAAK,EAAE,wBAAwB;IAC/B,iBAAiB,EAAE,kCAAkC;IACrD,iBAAiB,EAAE,kCAAkC;IACrD,yBAAyB,EAAE;EAC7B,CAAC;EAED,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAC,CAC1B,8BAA8B,EAC9B,sCAAsC,EACtC,kCAAkC,EAClC,2BAA2B,EAC3B,4BAA4B,EAC5B,wBAAwB,EACxB,yCAAyC,EACzC,yCAAyC,EACzC,kCAAkC,EAClC,8BAA8B,EAC9B,qCAAqC,EACrC,iCAAiC,CAClC,CAAC;EAEF,OAAOV,iBAAiB,CAACE,MAAM,EAAGA,MAAM,IAAK;IAC3C,MAAM;MACJS,oBAAoB,GAAG,CAAC,CAAC;MACzBC,gBAAgB,GAAG,CAAC,CAAC;MACrBC,kBAAkB,GAAG;IACvB,CAAC,GAAGX,MAAM;IAEV,MAAM;MAAEY,QAAQ,EAAEC;IAAmB,CAAC,GAAGJ,oBAAoB;IAC7D,MAAM;MAAEG,QAAQ,EAAEE;IAAe,CAAC,GAAGJ,gBAAgB;IACrD,MAAM;MAAEK,OAAO,GAAG,CAAC;IAAE,CAAC,GAAGd,KAAK;IAC9B,MAAM;MAAEe,4BAA4B;MAAEC,WAAW,GAAG;IAAU,CAAC,GAAGF,OAAO;IAEzEf,MAAM,CAACkB,UAAU,CAACC,SAAS,CAACC,KAAK,GAAGpB,MAAM,CAACkB,UAAU,CAACC,SAAS,CAACC,KAAK,EAAEC,GAAG,CACvED,KAAK,IAAmB;MACvB,IAAIA,KAAK,CAACE,CAAC,CAACC,IAAI,KAAK,UAAU,EAAE;QAC/BH,KAAK,CAACE,CAAC,CAACE,MAAM,GAAGtB,MAAM,CAACe,WAAW,CAAC,IAAIf,MAAM,CAAC,SAAS,CAAC;QAEzD,IAAIkB,KAAK,CAACK,IAAI,IAAI,IAAI,EAAE;UACtBL,KAAK,CAACK,IAAI,GAAGL,KAAK,CAACK,IAAI,CAACC,MAAM,CAC3BD,IAAI,IAAK,CAAClB,WAAW,CAACoB,GAAG,CAACF,IAAI,CAACH,CAAC,CAACC,IAAI,CACxC,CAAC;QACH;QAEA,
|
|
1
|
+
{"version":3,"names":["createRunOncePlugin","withAndroidStyles","withAndroidEdgeToEdgeTheme","config","props","themes","Default","Material2","Material3","Light","cleanupList","Set","androidNavigationBar","androidStatusBar","userInterfaceStyle","barStyle","navigationBarStyle","statusBarStyle","android","enforceNavigationBarContrast","parentTheme","modResults","resources","style","map","$","name","parent","item","filter","has","push","_","String"],"sourceRoot":"../../src","sources":["expo.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Appearance, TurboModuleRegistry } from "react-native";
|
|
4
|
-
const NativeModule = TurboModuleRegistry.
|
|
3
|
+
import { Appearance, Platform, TurboModuleRegistry } from "react-native";
|
|
4
|
+
const NativeModule = Platform.OS === "android" ? TurboModuleRegistry.getEnforcing("RNEdgeToEdge") : null;
|
|
5
5
|
if (NativeModule != null) {
|
|
6
6
|
Appearance.addChangeListener(() => {
|
|
7
7
|
NativeModule.onColorSchemeChange();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Appearance","TurboModuleRegistry","NativeModule","
|
|
1
|
+
{"version":3,"names":["Appearance","Platform","TurboModuleRegistry","NativeModule","OS","getEnforcing","addChangeListener","onColorSchemeChange"],"sourceRoot":"../../../src","sources":["specs/NativeEdgeToEdgeModule.ts"],"mappings":";;AACA,SAASA,UAAU,EAAEC,QAAQ,EAAEC,mBAAmB,QAAQ,cAAc;AAYxE,MAAMC,YAAY,GAChBF,QAAQ,CAACG,EAAE,KAAK,SAAS,GACrBF,mBAAmB,CAACG,YAAY,CAAO,cAAc,CAAC,GACtD,IAAI;AAEV,IAAIF,YAAY,IAAI,IAAI,EAAE;EACxBH,UAAU,CAACM,iBAAiB,CAAC,MAAM;IACjCH,YAAY,CAACI,mBAAmB,CAAC,CAAC;EACpC,CAAC,CAAC;AACJ;AAEA,eAAeJ,YAAY","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["specs/NativeEdgeToEdgeModule.web.ts"],"mappings":";;AAAA,eAAe,IAAI","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SystemBars.d.ts","sourceRoot":"","sources":["../../src/SystemBars.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"SystemBars.d.ts","sourceRoot":"","sources":["../../src/SystemBars.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AA4L3E,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,eAAe,QAoD5D;yBApDe,UAAU;gCAvCK,eAAe,KAAG,eAAe;+BAYlC,eAAe,KAAG,IAAI;mCAe3C,eAAe,SACf,eAAe,KACrB,eAAe"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import type { TurboModule } from "react-native";
|
|
2
|
-
type
|
|
3
|
-
|
|
4
|
-
statusBarStyle: string | undefined;
|
|
5
|
-
navigationBarHidden: boolean | undefined;
|
|
6
|
-
navigationBarStyle: string | undefined;
|
|
7
|
-
};
|
|
8
|
-
export interface Spec extends TurboModule {
|
|
2
|
+
type SystemBarStyle = "default" | "light-content" | "dark-content";
|
|
3
|
+
interface Spec extends TurboModule {
|
|
9
4
|
onColorSchemeChange(): void;
|
|
10
|
-
|
|
5
|
+
setStatusBarStyle(style: SystemBarStyle): void;
|
|
6
|
+
setNavigationBarStyle(style: SystemBarStyle): void;
|
|
7
|
+
setStatusBarHidden(hidden: boolean): void;
|
|
8
|
+
setNavigationBarHidden(hidden: boolean): void;
|
|
11
9
|
}
|
|
12
10
|
declare const NativeModule: Spec | null;
|
|
13
11
|
export default NativeModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeEdgeToEdgeModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeEdgeToEdgeModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,
|
|
1
|
+
{"version":3,"file":"NativeEdgeToEdgeModule.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeEdgeToEdgeModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,KAAK,cAAc,GAAG,SAAS,GAAG,eAAe,GAAG,cAAc,CAAC;AAEnE,UAAU,IAAK,SAAQ,WAAW;IAChC,mBAAmB,IAAI,IAAI,CAAC;IAC5B,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/C,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACnD,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1C,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/C;AAED,QAAA,MAAM,YAAY,aAGR,CAAC;AAQX,eAAe,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeEdgeToEdgeModule.web.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeEdgeToEdgeModule.web.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NativeEdgeToEdgeModule.web.d.ts","sourceRoot":"","sources":["../../../src/specs/NativeEdgeToEdgeModule.web.ts"],"names":[],"mappings":";AAAA,wBAAoB"}
|
|
@@ -4,10 +4,10 @@ type SystemBarsProp<T> = T | {
|
|
|
4
4
|
};
|
|
5
5
|
export type SystemBarStyle = "auto" | "light" | "dark";
|
|
6
6
|
export type SystemBarsEntry = {
|
|
7
|
-
statusBarHidden: boolean | undefined;
|
|
8
7
|
statusBarStyle: SystemBarStyle | undefined;
|
|
9
|
-
navigationBarHidden: boolean | undefined;
|
|
10
8
|
navigationBarStyle: SystemBarStyle | undefined;
|
|
9
|
+
statusBarHidden: boolean | undefined;
|
|
10
|
+
navigationBarHidden: boolean | undefined;
|
|
11
11
|
};
|
|
12
12
|
export type SystemBarsProps = {
|
|
13
13
|
style?: SystemBarsProp<SystemBarStyle>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,aAAa,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,kBAAkB,EAAE,cAAc,GAAG,SAAS,CAAC;IAC/C,eAAe,EAAE,OAAO,GAAG,SAAS,CAAC;IACrC,mBAAmB,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CAClC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-edge-to-edge",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3-beta.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Effortlessly enable edge-to-edge display in React Native",
|
|
6
6
|
"author": "Mathieu Acthernoene <zoontek@gmail.com>",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"prettier": "^3.4.2",
|
|
64
64
|
"prettier-plugin-organize-imports": "^4.1.0",
|
|
65
65
|
"react": "18.3.1",
|
|
66
|
-
"react-native": "0.77.0
|
|
66
|
+
"react-native": "0.77.0",
|
|
67
67
|
"react-native-builder-bob": "^0.35.2",
|
|
68
68
|
"typescript": "^5.7.2"
|
|
69
69
|
},
|
package/src/SystemBars.ts
CHANGED
|
@@ -1,19 +1,30 @@
|
|
|
1
1
|
import { useEffect, useMemo, useRef } from "react";
|
|
2
2
|
import { Appearance, Platform, StatusBar, useColorScheme } from "react-native";
|
|
3
|
-
import
|
|
4
|
-
import { SystemBarsEntry, SystemBarsProps } from "./types";
|
|
3
|
+
import NativeModule from "./specs/NativeEdgeToEdgeModule";
|
|
4
|
+
import { SystemBarsEntry, SystemBarsProps, SystemBarStyle } from "./types";
|
|
5
|
+
|
|
6
|
+
type MergeableBarStyle = "light" | "dark" | undefined;
|
|
5
7
|
|
|
6
8
|
function getColorScheme(): "light" | "dark" {
|
|
7
9
|
return Appearance?.getColorScheme() ?? "light";
|
|
8
10
|
}
|
|
9
11
|
|
|
12
|
+
function toNativeBarStyle(
|
|
13
|
+
style: MergeableBarStyle,
|
|
14
|
+
): "default" | "light-content" | "dark-content" {
|
|
15
|
+
return style === "light" || style === "dark" ? `${style}-content` : "default";
|
|
16
|
+
}
|
|
17
|
+
|
|
10
18
|
/**
|
|
11
19
|
* Merges the entries stack.
|
|
12
20
|
*/
|
|
13
|
-
function mergeEntriesStack(
|
|
14
|
-
entriesStack
|
|
15
|
-
|
|
16
|
-
|
|
21
|
+
function mergeEntriesStack(entriesStack: SystemBarsEntry[]) {
|
|
22
|
+
return entriesStack.reduce<{
|
|
23
|
+
statusBarStyle: SystemBarStyle | undefined;
|
|
24
|
+
navigationBarStyle: SystemBarStyle | undefined;
|
|
25
|
+
statusBarHidden: boolean;
|
|
26
|
+
navigationBarHidden: boolean;
|
|
27
|
+
}>(
|
|
17
28
|
(prev, cur) => {
|
|
18
29
|
for (const prop in cur) {
|
|
19
30
|
if (cur[prop as keyof SystemBarsEntry] != null) {
|
|
@@ -25,22 +36,11 @@ function mergeEntriesStack(
|
|
|
25
36
|
},
|
|
26
37
|
{
|
|
27
38
|
statusBarStyle: undefined,
|
|
28
|
-
statusBarHidden: undefined,
|
|
29
39
|
navigationBarStyle: undefined,
|
|
30
|
-
|
|
40
|
+
statusBarHidden: false,
|
|
41
|
+
navigationBarHidden: false,
|
|
31
42
|
},
|
|
32
43
|
);
|
|
33
|
-
|
|
34
|
-
if (
|
|
35
|
-
mergedEntry.statusBarStyle == null &&
|
|
36
|
-
mergedEntry.statusBarHidden == null &&
|
|
37
|
-
mergedEntry.navigationBarStyle == null &&
|
|
38
|
-
mergedEntry.navigationBarHidden == null
|
|
39
|
-
) {
|
|
40
|
-
return null;
|
|
41
|
-
} else {
|
|
42
|
-
return mergedEntry;
|
|
43
|
-
}
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/**
|
|
@@ -50,14 +50,14 @@ function createStackEntry(props: SystemBarsProps): SystemBarsEntry {
|
|
|
50
50
|
return {
|
|
51
51
|
statusBarStyle:
|
|
52
52
|
typeof props.style === "string" ? props.style : props.style?.statusBar,
|
|
53
|
-
statusBarHidden:
|
|
54
|
-
typeof props.hidden === "boolean"
|
|
55
|
-
? props.hidden
|
|
56
|
-
: props.hidden?.statusBar,
|
|
57
53
|
navigationBarStyle:
|
|
58
54
|
typeof props.style === "string"
|
|
59
55
|
? props.style
|
|
60
56
|
: props.style?.navigationBar,
|
|
57
|
+
statusBarHidden:
|
|
58
|
+
typeof props.hidden === "boolean"
|
|
59
|
+
? props.hidden
|
|
60
|
+
: props.hidden?.statusBar,
|
|
61
61
|
navigationBarHidden:
|
|
62
62
|
typeof props.hidden === "boolean"
|
|
63
63
|
? props.hidden
|
|
@@ -72,11 +72,16 @@ let updateImmediate: NodeJS.Immediate | null = null;
|
|
|
72
72
|
|
|
73
73
|
// The current merged values from the entries stack.
|
|
74
74
|
let currentMergedEntries: {
|
|
75
|
-
statusBarStyle:
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
navigationBarHidden: boolean
|
|
79
|
-
}
|
|
75
|
+
statusBarStyle: MergeableBarStyle;
|
|
76
|
+
navigationBarStyle: MergeableBarStyle;
|
|
77
|
+
statusBarHidden: boolean;
|
|
78
|
+
navigationBarHidden: boolean;
|
|
79
|
+
} = {
|
|
80
|
+
statusBarStyle: undefined,
|
|
81
|
+
navigationBarStyle: undefined,
|
|
82
|
+
statusBarHidden: false,
|
|
83
|
+
navigationBarHidden: false,
|
|
84
|
+
};
|
|
80
85
|
|
|
81
86
|
/**
|
|
82
87
|
* Updates the native system bars with the entries from the stack.
|
|
@@ -88,55 +93,53 @@ function updateEntriesStack() {
|
|
|
88
93
|
}
|
|
89
94
|
|
|
90
95
|
updateImmediate = setImmediate(() => {
|
|
96
|
+
const autoBarStyle = getColorScheme() === "light" ? "dark" : "light";
|
|
91
97
|
const mergedEntries = mergeEntriesStack(entriesStack);
|
|
92
98
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
if (statusBarHidden != null) {
|
|
126
|
-
StatusBar.setHidden(statusBarHidden, "fade"); // 'slide' doesn't work in this context
|
|
127
|
-
}
|
|
128
|
-
}
|
|
99
|
+
const statusBarStyle: MergeableBarStyle =
|
|
100
|
+
mergedEntries.statusBarStyle === "auto"
|
|
101
|
+
? autoBarStyle
|
|
102
|
+
: mergedEntries.statusBarStyle;
|
|
103
|
+
|
|
104
|
+
const navigationBarStyle: MergeableBarStyle =
|
|
105
|
+
mergedEntries.navigationBarStyle === "auto"
|
|
106
|
+
? autoBarStyle
|
|
107
|
+
: mergedEntries.navigationBarStyle;
|
|
108
|
+
|
|
109
|
+
const { statusBarHidden, navigationBarHidden } = mergedEntries;
|
|
110
|
+
|
|
111
|
+
if (statusBarStyle !== currentMergedEntries.statusBarStyle) {
|
|
112
|
+
const style = toNativeBarStyle(statusBarStyle);
|
|
113
|
+
console.log({ style });
|
|
114
|
+
|
|
115
|
+
Platform.OS === "android"
|
|
116
|
+
? NativeModule?.setStatusBarStyle(style)
|
|
117
|
+
: StatusBar.setBarStyle(style, true);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (statusBarHidden !== currentMergedEntries.statusBarHidden) {
|
|
121
|
+
Platform.OS === "android"
|
|
122
|
+
? NativeModule?.setStatusBarHidden(statusBarHidden)
|
|
123
|
+
: StatusBar.setHidden(statusBarHidden, "fade"); // 'slide' doesn't work in this context
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (Platform.OS === "android") {
|
|
127
|
+
if (navigationBarStyle !== currentMergedEntries.navigationBarStyle) {
|
|
128
|
+
const style = toNativeBarStyle(navigationBarStyle);
|
|
129
|
+
NativeModule?.setNavigationBarStyle(style);
|
|
129
130
|
}
|
|
130
131
|
|
|
131
|
-
currentMergedEntries
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
navigationBarStyle,
|
|
135
|
-
navigationBarHidden,
|
|
136
|
-
};
|
|
137
|
-
} else {
|
|
138
|
-
currentMergedEntries = null;
|
|
132
|
+
if (navigationBarHidden !== currentMergedEntries.navigationBarHidden) {
|
|
133
|
+
NativeModule?.setNavigationBarHidden(navigationBarHidden);
|
|
134
|
+
}
|
|
139
135
|
}
|
|
136
|
+
|
|
137
|
+
currentMergedEntries = {
|
|
138
|
+
statusBarStyle,
|
|
139
|
+
navigationBarStyle,
|
|
140
|
+
statusBarHidden,
|
|
141
|
+
navigationBarHidden,
|
|
142
|
+
};
|
|
140
143
|
});
|
|
141
144
|
}
|
|
142
145
|
}
|
|
@@ -188,10 +191,10 @@ function replaceStackEntry(
|
|
|
188
191
|
|
|
189
192
|
export function SystemBars({ hidden, style }: SystemBarsProps) {
|
|
190
193
|
const statusBarStyle = typeof style === "string" ? style : style?.statusBar;
|
|
191
|
-
const statusBarHidden =
|
|
192
|
-
typeof hidden === "boolean" ? hidden : hidden?.statusBar;
|
|
193
194
|
const navigationBarStyle =
|
|
194
195
|
typeof style === "string" ? style : style?.navigationBar;
|
|
196
|
+
const statusBarHidden =
|
|
197
|
+
typeof hidden === "boolean" ? hidden : hidden?.statusBar;
|
|
195
198
|
const navigationBarHidden =
|
|
196
199
|
typeof hidden === "boolean" ? hidden : hidden?.navigationBar;
|
|
197
200
|
|
package/src/expo.ts
CHANGED
|
@@ -75,13 +75,6 @@ const withAndroidEdgeToEdgeTheme: ConfigPlugin<Props> = (
|
|
|
75
75
|
);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
if (enforceNavigationBarContrast === false) {
|
|
79
|
-
style.item.push({
|
|
80
|
-
$: { name: "enforceNavigationBarContrast" },
|
|
81
|
-
_: String(false),
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
78
|
if (statusBarStyle != null) {
|
|
86
79
|
style.item.push({
|
|
87
80
|
$: { name: "android:windowLightStatusBar" },
|
|
@@ -94,15 +87,22 @@ const withAndroidEdgeToEdgeTheme: ConfigPlugin<Props> = (
|
|
|
94
87
|
});
|
|
95
88
|
}
|
|
96
89
|
|
|
97
|
-
if (
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
90
|
+
if (enforceNavigationBarContrast === false) {
|
|
91
|
+
if (navigationBarStyle != null) {
|
|
92
|
+
style.item.push({
|
|
93
|
+
$: { name: "android:windowLightNavigationBar" },
|
|
94
|
+
_: String(navigationBarStyle === "dark-content"),
|
|
95
|
+
});
|
|
96
|
+
} else if (userInterfaceStyle !== "automatic") {
|
|
97
|
+
style.item.push({
|
|
98
|
+
$: { name: "android:windowLightNavigationBar" },
|
|
99
|
+
_: String(navigationBarStyle === "light"),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
103
|
style.item.push({
|
|
104
|
-
$: { name: "
|
|
105
|
-
_: String(
|
|
104
|
+
$: { name: "enforceNavigationBarContrast" },
|
|
105
|
+
_: String(false),
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
108
|
}
|