react-native-edge-to-edge 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -47,14 +47,16 @@ $ yarn add react-native-edge-to-edge
47
47
 
48
48
  This library requires you to update the parent of your Android `AppTheme` to an edge-to-edge version. Don't worry, it's very easy to understand! You just need to choose a theme based on the current value:
49
49
 
50
- | If you currently have… | …you should use |
51
- | :---------------------------------------------- | :--------------------------------- |
52
- | `Theme.AppCompat.DayNight.NoActionBar` | `Theme.EdgeToEdge` |
53
- | `Theme.MaterialComponents.DayNight.NoActionBar` | `Theme.EdgeToEdge.Material2` |
54
- | `Theme.Material3.DayNight.NoActionBar` | `Theme.EdgeToEdge.Material3` |
55
- | `Theme.AppCompat.Light.NoActionBar` | `Theme.EdgeToEdge.Light` |
56
- | `Theme.MaterialComponents.Light.NoActionBar` | `Theme.EdgeToEdge.Material2.Light` |
57
- | `Theme.Material3.Light.NoActionBar` | `Theme.EdgeToEdge.Material3.Light` |
50
+ | If you currently have… | …you should use |
51
+ | :--------------------------------------------------- | :----------------------------------------- |
52
+ | `Theme.AppCompat.DayNight.NoActionBar` | `Theme.EdgeToEdge` |
53
+ | `Theme.MaterialComponents.DayNight.NoActionBar` | `Theme.EdgeToEdge.Material2` |
54
+ | `Theme.Material3.DayNight.NoActionBar` | `Theme.EdgeToEdge.Material3` |
55
+ | `Theme.Material3.DynamicColors.DayNight.NoActionBar` | `Theme.EdgeToEdge.Material3.Dynamic` |
56
+ | `Theme.AppCompat.Light.NoActionBar` | `Theme.EdgeToEdge.Light` |
57
+ | `Theme.MaterialComponents.Light.NoActionBar` | `Theme.EdgeToEdge.Material2.Light` |
58
+ | `Theme.Material3.Light.NoActionBar` | `Theme.EdgeToEdge.Material3.Light` |
59
+ | `Theme.Material3.DynamicColors.Light.NoActionBar` | `Theme.EdgeToEdge.Material3.Dynamic.Light` |
58
60
 
59
61
  ### Expo
60
62
 
@@ -85,9 +87,11 @@ type ParentTheme =
85
87
  | "Default" // uses `Theme.EdgeToEdge`
86
88
  | "Material2" // uses `Theme.EdgeToEdge.Material2`
87
89
  | "Material3" // uses `Theme.EdgeToEdge.Material3`
90
+ | "Material3.Dynamic" // uses `Theme.EdgeToEdge.Material3.Dynamic`
88
91
  | "Light" // uses `Theme.EdgeToEdge.Light`
89
92
  | "Material2.Light" // uses `Theme.EdgeToEdge.Material2.Light`
90
- | "Material3.Light"; // uses `Theme.EdgeToEdge.Material3.Light`
93
+ | "Material3.Light" // uses `Theme.EdgeToEdge.Material3.Light`
94
+ | "Material3.Dynamic.Light"; // uses `Theme.EdgeToEdge.Material3.Dynamic.Light`
91
95
 
92
96
  type Options = {
93
97
  android?: {
@@ -5,8 +5,10 @@
5
5
  <public name="Theme.EdgeToEdge" type="style" />
6
6
  <public name="Theme.EdgeToEdge.Material2" type="style" />
7
7
  <public name="Theme.EdgeToEdge.Material3" type="style" />
8
+ <public name="Theme.EdgeToEdge.Material3.Dynamic" type="style" />
8
9
 
9
10
  <public name="Theme.EdgeToEdge.Light" type="style" />
10
11
  <public name="Theme.EdgeToEdge.Material2.Light" type="style" />
11
12
  <public name="Theme.EdgeToEdge.Material3.Light" type="style" />
13
+ <public name="Theme.EdgeToEdge.Material3.Dynamic.Light" type="style" />
12
14
  </resources>
@@ -33,6 +33,17 @@
33
33
  <item name="android:windowLightStatusBar">@bool/windowLightSystemBars</item>
34
34
  </style>
35
35
 
36
+ <style name="Theme.EdgeToEdge.Material3.Dynamic.DayNight.Common" parent="Theme.Material3.DynamicColors.DayNight.NoActionBar">
37
+ <item name="enforceNavigationBarContrast">true</item>
38
+ <item name="enforceNavigationBarLightTheme">false</item>
39
+
40
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
41
+ <item name="android:fitsSystemWindows">false</item>
42
+ <item name="android:navigationBarColor">@color/navigationBarColor</item>
43
+ <item name="android:statusBarColor">@android:color/transparent</item>
44
+ <item name="android:windowLightStatusBar">@bool/windowLightSystemBars</item>
45
+ </style>
46
+
36
47
  <style name="Theme.EdgeToEdge.Light.Common" parent="Theme.AppCompat.Light.NoActionBar">
37
48
  <item name="enforceNavigationBarContrast">true</item>
38
49
  <item name="enforceNavigationBarLightTheme">true</item>
@@ -66,11 +77,24 @@
66
77
  <item name="android:windowLightStatusBar">true</item>
67
78
  </style>
68
79
 
80
+ <style name="Theme.EdgeToEdge.Material3.Dynamic.Light.Common" parent="Theme.Material3.DynamicColors.Light.NoActionBar">
81
+ <item name="enforceNavigationBarContrast">true</item>
82
+ <item name="enforceNavigationBarLightTheme">true</item>
83
+
84
+ <item name="android:windowDrawsSystemBarBackgrounds">true</item>
85
+ <item name="android:fitsSystemWindows">false</item>
86
+ <item name="android:navigationBarColor">@color/navigationBarColor</item>
87
+ <item name="android:statusBarColor">@android:color/transparent</item>
88
+ <item name="android:windowLightStatusBar">true</item>
89
+ </style>
90
+
69
91
  <style name="Theme.EdgeToEdge" parent="Theme.EdgeToEdge.DayNight.Common" />
70
92
  <style name="Theme.EdgeToEdge.Material2" parent="Theme.EdgeToEdge.Material2.DayNight.Common" />
71
93
  <style name="Theme.EdgeToEdge.Material3" parent="Theme.EdgeToEdge.Material3.DayNight.Common" />
94
+ <style name="Theme.EdgeToEdge.Material3.Dynamic" parent="Theme.EdgeToEdge.Material3.Dynamic.DayNight.Common" />
72
95
 
73
96
  <style name="Theme.EdgeToEdge.Light" parent="Theme.EdgeToEdge.Light.Common" />
74
97
  <style name="Theme.EdgeToEdge.Material2.Light" parent="Theme.EdgeToEdge.Material2.Light.Common" />
75
98
  <style name="Theme.EdgeToEdge.Material3.Light" parent="Theme.EdgeToEdge.Material3.Light.Common" />
99
+ <style name="Theme.EdgeToEdge.Material3.Dynamic.Light" parent="Theme.EdgeToEdge.Material3.Dynamic.Light.Common" />
76
100
  </resources>
@@ -15,6 +15,11 @@
15
15
  <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
16
16
  </style>
17
17
 
18
+ <style name="Theme.EdgeToEdge.Material3.Dynamic" parent="Theme.EdgeToEdge.Material3.Dynamic.DayNight.Common">
19
+ <item name="android:windowLightNavigationBar">@bool/windowLightSystemBars</item>
20
+ <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
21
+ </style>
22
+
18
23
  <style name="Theme.EdgeToEdge.Light" parent="Theme.EdgeToEdge.Light.Common">
19
24
  <item name="android:windowLightNavigationBar">true</item>
20
25
  <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
@@ -29,4 +34,9 @@
29
34
  <item name="android:windowLightNavigationBar">true</item>
30
35
  <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
31
36
  </style>
37
+
38
+ <style name="Theme.EdgeToEdge.Material3.Dynamic.Light" parent="Theme.EdgeToEdge.Material3.Dynamic.Light.Common">
39
+ <item name="android:windowLightNavigationBar">true</item>
40
+ <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
41
+ </style>
32
42
  </resources>
@@ -21,6 +21,13 @@
21
21
  <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
22
22
  </style>
23
23
 
24
+ <style name="Theme.EdgeToEdge.Material3.Dynamic" parent="Theme.EdgeToEdge.Material3.Dynamic.DayNight.Common">
25
+ <item name="android:windowLightNavigationBar">@bool/windowLightSystemBars</item>
26
+ <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
27
+ <item name="android:enforceStatusBarContrast">false</item>
28
+ <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
29
+ </style>
30
+
24
31
  <style name="Theme.EdgeToEdge.Light" parent="Theme.EdgeToEdge.Light.Common">
25
32
  <item name="android:windowLightNavigationBar">true</item>
26
33
  <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
@@ -41,4 +48,11 @@
41
48
  <item name="android:enforceStatusBarContrast">false</item>
42
49
  <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
43
50
  </style>
51
+
52
+ <style name="Theme.EdgeToEdge.Material3.Dynamic.Light" parent="Theme.EdgeToEdge.Material3.Dynamic.Light.Common">
53
+ <item name="android:windowLightNavigationBar">true</item>
54
+ <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
55
+ <item name="android:enforceStatusBarContrast">false</item>
56
+ <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
57
+ </style>
44
58
  </resources>
@@ -21,6 +21,13 @@
21
21
  <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
22
22
  </style>
23
23
 
24
+ <style name="Theme.EdgeToEdge.Material3.Dynamic" parent="Theme.EdgeToEdge.Material3.Dynamic.DayNight.Common">
25
+ <item name="android:windowLightNavigationBar">@bool/windowLightSystemBars</item>
26
+ <item name="android:windowLayoutInDisplayCutoutMode">always</item>
27
+ <item name="android:enforceStatusBarContrast">false</item>
28
+ <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
29
+ </style>
30
+
24
31
  <style name="Theme.EdgeToEdge.Light" parent="Theme.EdgeToEdge.Light.Common">
25
32
  <item name="android:windowLightNavigationBar">true</item>
26
33
  <item name="android:windowLayoutInDisplayCutoutMode">always</item>
@@ -41,4 +48,11 @@
41
48
  <item name="android:enforceStatusBarContrast">false</item>
42
49
  <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
43
50
  </style>
51
+
52
+ <style name="Theme.EdgeToEdge.Material3.Dynamic.Light" parent="Theme.EdgeToEdge.Material3.Dynamic.Light.Common">
53
+ <item name="android:windowLightNavigationBar">true</item>
54
+ <item name="android:windowLayoutInDisplayCutoutMode">always</item>
55
+ <item name="android:enforceStatusBarContrast">false</item>
56
+ <item name="android:enforceNavigationBarContrast">?enforceNavigationBarContrast</item>
57
+ </style>
44
58
  </resources>
@@ -10,18 +10,24 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
10
10
  Default: "Theme.EdgeToEdge",
11
11
  Material2: "Theme.EdgeToEdge.Material2",
12
12
  Material3: "Theme.EdgeToEdge.Material3",
13
+ "Material3.Dynamic": "Theme.EdgeToEdge.Material3.Dynamic",
13
14
  Light: "Theme.EdgeToEdge.Light",
14
15
  "Material2.Light": "Theme.EdgeToEdge.Material2.Light",
15
- "Material3.Light": "Theme.EdgeToEdge.Material3.Light"
16
+ "Material3.Light": "Theme.EdgeToEdge.Material3.Light",
17
+ "Material3.Dynamic.Light": "Theme.EdgeToEdge.Material3.Dynamic.Light"
16
18
  };
17
19
  const cleanupList = new Set(["enforceNavigationBarContrast", "android:enforceNavigationBarContrast", "android:enforceStatusBarContrast", "android:fitsSystemWindows", "android:navigationBarColor", "android:statusBarColor", "android:windowDrawsSystemBarBackgrounds", "android:windowLayoutInDisplayCutoutMode", "android:windowLightNavigationBar", "android:windowLightStatusBar", "android:windowTranslucentNavigation", "android:windowTranslucentStatus"]);
18
20
  return (0, _configPlugins.withAndroidStyles)(config, config => {
19
21
  const {
22
+ androidNavigationBar = {},
20
23
  androidStatusBar = {},
21
24
  userInterfaceStyle = "light"
22
25
  } = config;
23
26
  const {
24
- barStyle
27
+ barStyle: navigationBarStyle
28
+ } = androidNavigationBar;
29
+ const {
30
+ barStyle: statusBarStyle
25
31
  } = androidStatusBar;
26
32
  const {
27
33
  android = {}
@@ -44,12 +50,12 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
44
50
  _: String(false)
45
51
  });
46
52
  }
47
- if (barStyle != null) {
53
+ if (statusBarStyle != null) {
48
54
  style.item.push({
49
55
  $: {
50
56
  name: "android:windowLightStatusBar"
51
57
  },
52
- _: String(barStyle === "dark-content")
58
+ _: String(statusBarStyle === "dark-content")
53
59
  });
54
60
  } else if (userInterfaceStyle !== "automatic") {
55
61
  style.item.push({
@@ -59,6 +65,21 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
59
65
  _: String(userInterfaceStyle === "light")
60
66
  });
61
67
  }
68
+ if (navigationBarStyle != null) {
69
+ style.item.push({
70
+ $: {
71
+ name: "android:windowLightNavigationBar"
72
+ },
73
+ _: String(navigationBarStyle === "dark-content")
74
+ });
75
+ } else if (userInterfaceStyle !== "automatic") {
76
+ style.item.push({
77
+ $: {
78
+ name: "android:windowLightNavigationBar"
79
+ },
80
+ _: String(navigationBarStyle === "light")
81
+ });
82
+ }
62
83
  }
63
84
  return style;
64
85
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_configPlugins","require","withAndroidEdgeToEdgeTheme","config","props","themes","Default","Material2","Material3","Light","cleanupList","Set","withAndroidStyles","androidStatusBar","userInterfaceStyle","barStyle","android","enforceNavigationBarContrast","parentTheme","modResults","resources","style","map","$","name","parent","item","filter","has","push","_","String","_default","exports","default","createRunOncePlugin"],"sourceRoot":"../../src","sources":["expo.ts"],"mappings":";;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAqBA,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;IAEvCC,KAAK,EAAE,wBAAwB;IAC/B,iBAAiB,EAAE,kCAAkC;IACrD,iBAAiB,EAAE;EACrB,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,OAAO,IAAAC,gCAAiB,EAACT,MAAM,EAAGA,MAAM,IAAK;IAC3C,MAAM;MAAEU,gBAAgB,GAAG,CAAC,CAAC;MAAEC,kBAAkB,GAAG;IAAQ,CAAC,GAAGX,MAAM;IACtE,MAAM;MAAEY;IAAS,CAAC,GAAGF,gBAAgB;IACrC,MAAM;MAAEG,OAAO,GAAG,CAAC;IAAE,CAAC,GAAGZ,KAAK;IAC9B,MAAM;MAAEa,4BAA4B;MAAEC,WAAW,GAAG;IAAU,CAAC,GAAGF,OAAO;IAEzEb,MAAM,CAACgB,UAAU,CAACC,SAAS,CAACC,KAAK,GAAGlB,MAAM,CAACgB,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,GAAGpB,MAAM,CAACa,WAAW,CAAC,IAAIb,MAAM,CAAC,SAAS,CAAC;QAEzD,IAAIgB,KAAK,CAACK,IAAI,IAAI,IAAI,EAAE;UACtBL,KAAK,CAACK,IAAI,GAAGL,KAAK,CAACK,IAAI,CAACC,MAAM,CAC3BD,IAAI,IAAK,CAAChB,WAAW,CAACkB,GAAG,CAACF,IAAI,CAACH,CAAC,CAACC,IAAI,CACxC,CAAC;QACH;QAEA,IAAIP,4BAA4B,KAAK,KAAK,EAAE;UAC1CI,KAAK,CAACK,IAAI,CAACG,IAAI,CAAC;YACdN,CAAC,EAAE;cAAEC,IAAI,EAAE;YAA+B,CAAC;YAC3CM,CAAC,EAAEC,MAAM,CAAC,KAAK;UACjB,CAAC,CAAC;QACJ;QAEA,IAAIhB,QAAQ,IAAI,IAAI,EAAE;UACpBM,KAAK,CAACK,IAAI,CAACG,IAAI,CAAC;YACdN,CAAC,EAAE;cAAEC,IAAI,EAAE;YAA+B,CAAC;YAC3CM,CAAC,EAAEC,MAAM,CAAChB,QAAQ,KAAK,cAAc;UACvC,CAAC,CAAC;QACJ,CAAC,MAAM,IAAID,kBAAkB,KAAK,WAAW,EAAE;UAC7CO,KAAK,CAACK,IAAI,CAACG,IAAI,CAAC;YACdN,CAAC,EAAE;cAAEC,IAAI,EAAE;YAA+B,CAAC;YAC3CM,CAAC,EAAEC,MAAM,CAACjB,kBAAkB,KAAK,OAAO;UAC1C,CAAC,CAAC;QACJ;MACF;MAEA,OAAOO,KAAK;IACd,CACF,CAAC;IAED,OAAOlB,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAAC,IAAA6B,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,kCAAmB,EAChCjC,0BAA0B,EAC1B,2BACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_configPlugins","require","withAndroidEdgeToEdgeTheme","config","props","themes","Default","Material2","Material3","Light","cleanupList","Set","withAndroidStyles","androidNavigationBar","androidStatusBar","userInterfaceStyle","barStyle","navigationBarStyle","statusBarStyle","android","enforceNavigationBarContrast","parentTheme","modResults","resources","style","map","$","name","parent","item","filter","has","push","_","String","_default","exports","default","createRunOncePlugin"],"sourceRoot":"../../src","sources":["expo.ts"],"mappings":"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","ignoreList":[]}
@@ -6,18 +6,24 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
6
6
  Default: "Theme.EdgeToEdge",
7
7
  Material2: "Theme.EdgeToEdge.Material2",
8
8
  Material3: "Theme.EdgeToEdge.Material3",
9
+ "Material3.Dynamic": "Theme.EdgeToEdge.Material3.Dynamic",
9
10
  Light: "Theme.EdgeToEdge.Light",
10
11
  "Material2.Light": "Theme.EdgeToEdge.Material2.Light",
11
- "Material3.Light": "Theme.EdgeToEdge.Material3.Light"
12
+ "Material3.Light": "Theme.EdgeToEdge.Material3.Light",
13
+ "Material3.Dynamic.Light": "Theme.EdgeToEdge.Material3.Dynamic.Light"
12
14
  };
13
15
  const cleanupList = new Set(["enforceNavigationBarContrast", "android:enforceNavigationBarContrast", "android:enforceStatusBarContrast", "android:fitsSystemWindows", "android:navigationBarColor", "android:statusBarColor", "android:windowDrawsSystemBarBackgrounds", "android:windowLayoutInDisplayCutoutMode", "android:windowLightNavigationBar", "android:windowLightStatusBar", "android:windowTranslucentNavigation", "android:windowTranslucentStatus"]);
14
16
  return withAndroidStyles(config, config => {
15
17
  const {
18
+ androidNavigationBar = {},
16
19
  androidStatusBar = {},
17
20
  userInterfaceStyle = "light"
18
21
  } = config;
19
22
  const {
20
- barStyle
23
+ barStyle: navigationBarStyle
24
+ } = androidNavigationBar;
25
+ const {
26
+ barStyle: statusBarStyle
21
27
  } = androidStatusBar;
22
28
  const {
23
29
  android = {}
@@ -40,12 +46,12 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
40
46
  _: String(false)
41
47
  });
42
48
  }
43
- if (barStyle != null) {
49
+ if (statusBarStyle != null) {
44
50
  style.item.push({
45
51
  $: {
46
52
  name: "android:windowLightStatusBar"
47
53
  },
48
- _: String(barStyle === "dark-content")
54
+ _: String(statusBarStyle === "dark-content")
49
55
  });
50
56
  } else if (userInterfaceStyle !== "automatic") {
51
57
  style.item.push({
@@ -55,6 +61,21 @@ const withAndroidEdgeToEdgeTheme = (config, props = {}) => {
55
61
  _: String(userInterfaceStyle === "light")
56
62
  });
57
63
  }
64
+ if (navigationBarStyle != null) {
65
+ style.item.push({
66
+ $: {
67
+ name: "android:windowLightNavigationBar"
68
+ },
69
+ _: String(navigationBarStyle === "dark-content")
70
+ });
71
+ } else if (userInterfaceStyle !== "automatic") {
72
+ style.item.push({
73
+ $: {
74
+ name: "android:windowLightNavigationBar"
75
+ },
76
+ _: String(navigationBarStyle === "light")
77
+ });
78
+ }
58
79
  }
59
80
  return style;
60
81
  });
@@ -1 +1 @@
1
- {"version":3,"names":["createRunOncePlugin","withAndroidStyles","withAndroidEdgeToEdgeTheme","config","props","themes","Default","Material2","Material3","Light","cleanupList","Set","androidStatusBar","userInterfaceStyle","barStyle","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;AAiB7B,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;IAEvCC,KAAK,EAAE,wBAAwB;IAC/B,iBAAiB,EAAE,kCAAkC;IACrD,iBAAiB,EAAE;EACrB,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;MAAES,gBAAgB,GAAG,CAAC,CAAC;MAAEC,kBAAkB,GAAG;IAAQ,CAAC,GAAGV,MAAM;IACtE,MAAM;MAAEW;IAAS,CAAC,GAAGF,gBAAgB;IACrC,MAAM;MAAEG,OAAO,GAAG,CAAC;IAAE,CAAC,GAAGX,KAAK;IAC9B,MAAM;MAAEY,4BAA4B;MAAEC,WAAW,GAAG;IAAU,CAAC,GAAGF,OAAO;IAEzEZ,MAAM,CAACe,UAAU,CAACC,SAAS,CAACC,KAAK,GAAGjB,MAAM,CAACe,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,GAAGnB,MAAM,CAACY,WAAW,CAAC,IAAIZ,MAAM,CAAC,SAAS,CAAC;QAEzD,IAAIe,KAAK,CAACK,IAAI,IAAI,IAAI,EAAE;UACtBL,KAAK,CAACK,IAAI,GAAGL,KAAK,CAACK,IAAI,CAACC,MAAM,CAC3BD,IAAI,IAAK,CAACf,WAAW,CAACiB,GAAG,CAACF,IAAI,CAACH,CAAC,CAACC,IAAI,CACxC,CAAC;QACH;QAEA,IAAIP,4BAA4B,KAAK,KAAK,EAAE;UAC1CI,KAAK,CAACK,IAAI,CAACG,IAAI,CAAC;YACdN,CAAC,EAAE;cAAEC,IAAI,EAAE;YAA+B,CAAC;YAC3CM,CAAC,EAAEC,MAAM,CAAC,KAAK;UACjB,CAAC,CAAC;QACJ;QAEA,IAAIhB,QAAQ,IAAI,IAAI,EAAE;UACpBM,KAAK,CAACK,IAAI,CAACG,IAAI,CAAC;YACdN,CAAC,EAAE;cAAEC,IAAI,EAAE;YAA+B,CAAC;YAC3CM,CAAC,EAAEC,MAAM,CAAChB,QAAQ,KAAK,cAAc;UACvC,CAAC,CAAC;QACJ,CAAC,MAAM,IAAID,kBAAkB,KAAK,WAAW,EAAE;UAC7CO,KAAK,CAACK,IAAI,CAACG,IAAI,CAAC;YACdN,CAAC,EAAE;cAAEC,IAAI,EAAE;YAA+B,CAAC;YAC3CM,CAAC,EAAEC,MAAM,CAACjB,kBAAkB,KAAK,OAAO;UAC1C,CAAC,CAAC;QACJ;MACF;MAEA,OAAOO,KAAK;IACd,CACF,CAAC;IAED,OAAOjB,MAAM;EACf,CAAC,CAAC;AACJ,CAAC;AAED,eAAeH,mBAAmB,CAChCE,0BAA0B,EAC1B,2BACF,CAAC","ignoreList":[]}
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,5 +1,5 @@
1
1
  import { ConfigPlugin } from "@expo/config-plugins";
2
- type ParentTheme = "Default" | "Material2" | "Material3" | "Light" | "Material2.Light" | "Material3.Light";
2
+ type ParentTheme = "Default" | "Material2" | "Material3" | "Material3.Dynamic" | "Light" | "Material2.Light" | "Material3.Light" | "Material3.Dynamic.Light";
3
3
  type AndroidProps = {
4
4
  enforceNavigationBarContrast?: boolean;
5
5
  parentTheme?: ParentTheme;
@@ -1 +1 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,WAAW,GACZ,SAAS,GACT,WAAW,GACX,WAAW,GACX,OAAO,GACP,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,KAAK,YAAY,GAAG;IAClB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,KAAK,GAAG;IAAE,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAAG,SAAS,CAAC;;AA4EpD,wBAGE"}
1
+ {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../src/expo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,sBAAsB,CAAC;AAE9B,KAAK,WAAW,GACZ,SAAS,GACT,WAAW,GACX,WAAW,GACX,mBAAmB,GACnB,OAAO,GACP,iBAAiB,GACjB,iBAAiB,GACjB,yBAAyB,CAAC;AAE9B,KAAK,YAAY,GAAG;IAClB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,KAAK,GAAG;IAAE,OAAO,CAAC,EAAE,YAAY,CAAA;CAAE,GAAG,SAAS,CAAC;;AAgGpD,wBAGE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-edge-to-edge",
3
- "version": "1.3.1",
3
+ "version": "1.4.1",
4
4
  "license": "MIT",
5
5
  "description": "Effortlessly enable edge-to-edge display in React Native",
6
6
  "author": "Mathieu Acthernoene <zoontek@gmail.com>",
package/src/expo.ts CHANGED
@@ -8,9 +8,11 @@ type ParentTheme =
8
8
  | "Default"
9
9
  | "Material2"
10
10
  | "Material3"
11
+ | "Material3.Dynamic"
11
12
  | "Light"
12
13
  | "Material2.Light"
13
- | "Material3.Light";
14
+ | "Material3.Light"
15
+ | "Material3.Dynamic.Light";
14
16
 
15
17
  type AndroidProps = {
16
18
  enforceNavigationBarContrast?: boolean;
@@ -27,10 +29,12 @@ const withAndroidEdgeToEdgeTheme: ConfigPlugin<Props> = (
27
29
  Default: "Theme.EdgeToEdge",
28
30
  Material2: "Theme.EdgeToEdge.Material2",
29
31
  Material3: "Theme.EdgeToEdge.Material3",
32
+ "Material3.Dynamic": "Theme.EdgeToEdge.Material3.Dynamic",
30
33
 
31
34
  Light: "Theme.EdgeToEdge.Light",
32
35
  "Material2.Light": "Theme.EdgeToEdge.Material2.Light",
33
36
  "Material3.Light": "Theme.EdgeToEdge.Material3.Light",
37
+ "Material3.Dynamic.Light": "Theme.EdgeToEdge.Material3.Dynamic.Light",
34
38
  };
35
39
 
36
40
  const cleanupList = new Set([
@@ -49,8 +53,14 @@ const withAndroidEdgeToEdgeTheme: ConfigPlugin<Props> = (
49
53
  ]);
50
54
 
51
55
  return withAndroidStyles(config, (config) => {
52
- const { androidStatusBar = {}, userInterfaceStyle = "light" } = config;
53
- const { barStyle } = androidStatusBar;
56
+ const {
57
+ androidNavigationBar = {},
58
+ androidStatusBar = {},
59
+ userInterfaceStyle = "light",
60
+ } = config;
61
+
62
+ const { barStyle: navigationBarStyle } = androidNavigationBar;
63
+ const { barStyle: statusBarStyle } = androidStatusBar;
54
64
  const { android = {} } = props;
55
65
  const { enforceNavigationBarContrast, parentTheme = "Default" } = android;
56
66
 
@@ -72,10 +82,10 @@ const withAndroidEdgeToEdgeTheme: ConfigPlugin<Props> = (
72
82
  });
73
83
  }
74
84
 
75
- if (barStyle != null) {
85
+ if (statusBarStyle != null) {
76
86
  style.item.push({
77
87
  $: { name: "android:windowLightStatusBar" },
78
- _: String(barStyle === "dark-content"),
88
+ _: String(statusBarStyle === "dark-content"),
79
89
  });
80
90
  } else if (userInterfaceStyle !== "automatic") {
81
91
  style.item.push({
@@ -83,6 +93,18 @@ const withAndroidEdgeToEdgeTheme: ConfigPlugin<Props> = (
83
93
  _: String(userInterfaceStyle === "light"),
84
94
  });
85
95
  }
96
+
97
+ if (navigationBarStyle != null) {
98
+ style.item.push({
99
+ $: { name: "android:windowLightNavigationBar" },
100
+ _: String(navigationBarStyle === "dark-content"),
101
+ });
102
+ } else if (userInterfaceStyle !== "automatic") {
103
+ style.item.push({
104
+ $: { name: "android:windowLightNavigationBar" },
105
+ _: String(navigationBarStyle === "light"),
106
+ });
107
+ }
86
108
  }
87
109
 
88
110
  return style;