diff --git a/App.tsx b/App.tsx
index 919bdfc..5676491 100644
--- a/App.tsx
+++ b/App.tsx
@@ -1,36 +1,39 @@
-
import React, { useEffect } from 'react';
import { StyleSheet, useColorScheme } from 'react-native';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { PaperProvider } from 'react-native-paper';
import AppNavigator from './src/navigation/AppNavigator';
import notifee from '@notifee/react-native';
-import { backgroundHandler, foregroundListener, requestPermission, setupFirebaseHandlers, setupNotificationPressHandlers, tokenRefreshHandler } from './src/utils/firebase/firebaseServices';
+
+import {
+ backgroundHandler,
+ foregroundListener,
+ requestPermission,
+ setupFirebaseHandlers,
+ setupNotificationPressHandlers,
+ tokenRefreshHandler,
+} from './src/utils/firebase/firebaseServices';
+
+
+import { dark, light } from './src/theme/theme';
+import { ThemeProvider} from './src/theme/ThemeProvider';
function App() {
- const isDarkMode = useColorScheme() === 'dark';
-
+
useEffect(() => {
- // 🔹 Ask for permission
requestPermission();
-
- // 🔹 Handle background + quit state
backgroundHandler();
- setupFirebaseHandlers()
- setupNotificationPressHandlers()
+ setupFirebaseHandlers();
+ setupNotificationPressHandlers();
- // 🔹 Listen for foreground messages
const unsubscribe = foregroundListener();
-
- // 🔹 Listen for token refresh
const unsubscribeRefresh = tokenRefreshHandler();
- // 🔹 Create default notification channel (Android)
notifee.createChannel({
id: 'default',
name: 'Default Channel',
- importance: 4, // HIGH
+ importance: 4,
});
return () => {
@@ -39,19 +42,23 @@ function App() {
};
}, []);
+
+
return (
-
-
-
+
+
+
+
+
);
}
+export default App;
+
const styles = StyleSheet.create({
container: {
flex: 1,
},
});
-
-export default App;
diff --git a/android/app/src/main/assets/fonts/Nunito-Black.ttf b/android/app/src/main/assets/fonts/Nunito-Black.ttf
new file mode 100644
index 0000000..99491f8
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-Black.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf b/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf
new file mode 100644
index 0000000..6004938
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-Bold.ttf b/android/app/src/main/assets/fonts/Nunito-Bold.ttf
new file mode 100644
index 0000000..6909689
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-Bold.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf b/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf
new file mode 100644
index 0000000..2479c36
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf b/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf
new file mode 100644
index 0000000..6f4ccde
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf b/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..a82e6a2
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf b/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf
new file mode 100644
index 0000000..96711f9
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf b/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf
new file mode 100644
index 0000000..ff043a4
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-Italic.ttf b/android/app/src/main/assets/fonts/Nunito-Italic.ttf
new file mode 100644
index 0000000..97fd169
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-Italic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-Light.ttf b/android/app/src/main/assets/fonts/Nunito-Light.ttf
new file mode 100644
index 0000000..fb050fc
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-Light.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf b/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf
new file mode 100644
index 0000000..0914950
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-Medium.ttf b/android/app/src/main/assets/fonts/Nunito-Medium.ttf
new file mode 100644
index 0000000..a6993eb
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-Medium.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf b/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf
new file mode 100644
index 0000000..1913632
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-Regular.ttf b/android/app/src/main/assets/fonts/Nunito-Regular.ttf
new file mode 100644
index 0000000..be80c3f
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-Regular.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf b/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf
new file mode 100644
index 0000000..06f29ea
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf differ
diff --git a/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf b/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf
new file mode 100644
index 0000000..5af8133
Binary files /dev/null and b/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf differ
diff --git a/android/link-assets-manifest.json b/android/link-assets-manifest.json
new file mode 100644
index 0000000..cbba354
--- /dev/null
+++ b/android/link-assets-manifest.json
@@ -0,0 +1,69 @@
+{
+ "migIndex": 1,
+ "data": [
+ {
+ "path": "src/assets/fonts/Nunito-Black.ttf",
+ "sha1": "bede9c89e905ae0b91404768e1167e3e5d3c9c8e"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-BlackItalic.ttf",
+ "sha1": "5b27538c43c1afcd5b4a8547854522a805f4c302"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Bold.ttf",
+ "sha1": "e50cf9134308e37008cbd39da1dc637aef022641"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-BoldItalic.ttf",
+ "sha1": "5ab6843366253b2e8009cf3384e6d275004ad5f3"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraBold.ttf",
+ "sha1": "37ba2b2e9e7dd74a67b8b994a1aebe333af7fc39"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraBoldItalic.ttf",
+ "sha1": "fab683da6e0b9ff687a6ca683f96127e84919b24"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraLight.ttf",
+ "sha1": "5473261207bdc8a16cf78d26e598becddeb8155e"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraLightItalic.ttf",
+ "sha1": "fd4b64a944d4353f216df49c028cde717161dd24"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Italic.ttf",
+ "sha1": "0c994f04c2bb328d87069d32e7422b559c05d5a7"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Light.ttf",
+ "sha1": "e69e3dfdaf5baaa6fc6db1dd031ed18e1dca38f3"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-LightItalic.ttf",
+ "sha1": "6855c33fb876932b819dc445eeb4ae3267c4ef7d"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Medium.ttf",
+ "sha1": "75324fedc01df018cdf436bb5beba504bd82af0d"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-MediumItalic.ttf",
+ "sha1": "e582f36e0b5d13c9e3ac827bd879593dec1a06d0"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Regular.ttf",
+ "sha1": "929ddc840610489715952aaa10af50e9c1a6a4a6"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-SemiBold.ttf",
+ "sha1": "c4a5281a3e088e1d2604635d4d09a1583d036db6"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-SemiBoldItalic.ttf",
+ "sha1": "96d4f551a905d9dd509fec0ae085f35666d8f797"
+ }
+ ]
+}
diff --git a/ios/CircleCollect.xcodeproj/project.pbxproj b/ios/CircleCollect.xcodeproj/project.pbxproj
index 22f8603..0dccd01 100644
--- a/ios/CircleCollect.xcodeproj/project.pbxproj
+++ b/ios/CircleCollect.xcodeproj/project.pbxproj
@@ -11,6 +11,22 @@
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
+ 77E955B03ACA476189F41279 /* Nunito-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CD6281C4A8224BDC9C99061C /* Nunito-Black.ttf */; };
+ 69272C3CFEEF44F4BB88C9BB /* Nunito-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8B63FD1EEF264E8E9FF335EC /* Nunito-BlackItalic.ttf */; };
+ 84A9D5DED8094CB4A153268F /* Nunito-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AEAB2A7CD23248A9A542D0CA /* Nunito-Bold.ttf */; };
+ D67F05517BE4422F808A5EB3 /* Nunito-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4C5A03C0427D4F17A5988F0F /* Nunito-BoldItalic.ttf */; };
+ E007418A1C2740F79785A324 /* Nunito-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 60736DFE1D9549AEB020EE49 /* Nunito-ExtraBold.ttf */; };
+ CA97D53F7B8349D19F07E434 /* Nunito-ExtraBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D41A02AA33B74B74A5EA8D28 /* Nunito-ExtraBoldItalic.ttf */; };
+ FC3942C6BF94431DAF7D34CA /* Nunito-ExtraLight.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C2154C491E214E5B87CE0D6E /* Nunito-ExtraLight.ttf */; };
+ BF72BEDD2BEF41D5A740F6DB /* Nunito-ExtraLightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1BB241E150DC4271B6DB8035 /* Nunito-ExtraLightItalic.ttf */; };
+ C755B258B1CE4C7D9F669459 /* Nunito-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5E80FD17FB314B54B4070AE7 /* Nunito-Italic.ttf */; };
+ 4432DD78D2D8420098273374 /* Nunito-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8654D08FDB97420F9054EC82 /* Nunito-Light.ttf */; };
+ 7E3B3883C3FA414C9770A859 /* Nunito-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 50F514E360C2402797F5FB3B /* Nunito-LightItalic.ttf */; };
+ 4B27568F87CA45C18D781B4E /* Nunito-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 13508BA55A1D4761A085FB3C /* Nunito-Medium.ttf */; };
+ 0E89A7DC000347CCB92D18FA /* Nunito-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5744AD8D40A949D6B7F3C816 /* Nunito-MediumItalic.ttf */; };
+ 609A14F1490B46E9966AD947 /* Nunito-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FAD14762400E476AA7B1075D /* Nunito-Regular.ttf */; };
+ 430150A883E743E9A59596D5 /* Nunito-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 499363DC0EDB4DA4A3B87FA4 /* Nunito-SemiBold.ttf */; };
+ E3AC45B155004DE6BD7233A4 /* Nunito-SemiBoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 62F0D71A41214365A475156B /* Nunito-SemiBoldItalic.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -24,6 +40,22 @@
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = CircleCollect/AppDelegate.swift; sourceTree = ""; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = CircleCollect/LaunchScreen.storyboard; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ CD6281C4A8224BDC9C99061C /* Nunito-Black.ttf */ = {isa = PBXFileReference; name = "Nunito-Black.ttf"; path = "../src/assets/fonts/Nunito-Black.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 8B63FD1EEF264E8E9FF335EC /* Nunito-BlackItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-BlackItalic.ttf"; path = "../src/assets/fonts/Nunito-BlackItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ AEAB2A7CD23248A9A542D0CA /* Nunito-Bold.ttf */ = {isa = PBXFileReference; name = "Nunito-Bold.ttf"; path = "../src/assets/fonts/Nunito-Bold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 4C5A03C0427D4F17A5988F0F /* Nunito-BoldItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-BoldItalic.ttf"; path = "../src/assets/fonts/Nunito-BoldItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 60736DFE1D9549AEB020EE49 /* Nunito-ExtraBold.ttf */ = {isa = PBXFileReference; name = "Nunito-ExtraBold.ttf"; path = "../src/assets/fonts/Nunito-ExtraBold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ D41A02AA33B74B74A5EA8D28 /* Nunito-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-ExtraBoldItalic.ttf"; path = "../src/assets/fonts/Nunito-ExtraBoldItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ C2154C491E214E5B87CE0D6E /* Nunito-ExtraLight.ttf */ = {isa = PBXFileReference; name = "Nunito-ExtraLight.ttf"; path = "../src/assets/fonts/Nunito-ExtraLight.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 1BB241E150DC4271B6DB8035 /* Nunito-ExtraLightItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-ExtraLightItalic.ttf"; path = "../src/assets/fonts/Nunito-ExtraLightItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 5E80FD17FB314B54B4070AE7 /* Nunito-Italic.ttf */ = {isa = PBXFileReference; name = "Nunito-Italic.ttf"; path = "../src/assets/fonts/Nunito-Italic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 8654D08FDB97420F9054EC82 /* Nunito-Light.ttf */ = {isa = PBXFileReference; name = "Nunito-Light.ttf"; path = "../src/assets/fonts/Nunito-Light.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 50F514E360C2402797F5FB3B /* Nunito-LightItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-LightItalic.ttf"; path = "../src/assets/fonts/Nunito-LightItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 13508BA55A1D4761A085FB3C /* Nunito-Medium.ttf */ = {isa = PBXFileReference; name = "Nunito-Medium.ttf"; path = "../src/assets/fonts/Nunito-Medium.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 5744AD8D40A949D6B7F3C816 /* Nunito-MediumItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-MediumItalic.ttf"; path = "../src/assets/fonts/Nunito-MediumItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ FAD14762400E476AA7B1075D /* Nunito-Regular.ttf */ = {isa = PBXFileReference; name = "Nunito-Regular.ttf"; path = "../src/assets/fonts/Nunito-Regular.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 499363DC0EDB4DA4A3B87FA4 /* Nunito-SemiBold.ttf */ = {isa = PBXFileReference; name = "Nunito-SemiBold.ttf"; path = "../src/assets/fonts/Nunito-SemiBold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 62F0D71A41214365A475156B /* Nunito-SemiBoldItalic.ttf */ = {isa = PBXFileReference; name = "Nunito-SemiBoldItalic.ttf"; path = "../src/assets/fonts/Nunito-SemiBoldItalic.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -74,6 +106,7 @@
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
+ 20F28563BF834255BD7383AF /* Resources */,
);
indentWidth = 2;
sourceTree = "";
@@ -97,6 +130,30 @@
path = Pods;
sourceTree = "";
};
+ 20F28563BF834255BD7383AF /* Resources */ = {
+ isa = "PBXGroup";
+ children = (
+ CD6281C4A8224BDC9C99061C /* Nunito-Black.ttf */,
+ 8B63FD1EEF264E8E9FF335EC /* Nunito-BlackItalic.ttf */,
+ AEAB2A7CD23248A9A542D0CA /* Nunito-Bold.ttf */,
+ 4C5A03C0427D4F17A5988F0F /* Nunito-BoldItalic.ttf */,
+ 60736DFE1D9549AEB020EE49 /* Nunito-ExtraBold.ttf */,
+ D41A02AA33B74B74A5EA8D28 /* Nunito-ExtraBoldItalic.ttf */,
+ C2154C491E214E5B87CE0D6E /* Nunito-ExtraLight.ttf */,
+ 1BB241E150DC4271B6DB8035 /* Nunito-ExtraLightItalic.ttf */,
+ 5E80FD17FB314B54B4070AE7 /* Nunito-Italic.ttf */,
+ 8654D08FDB97420F9054EC82 /* Nunito-Light.ttf */,
+ 50F514E360C2402797F5FB3B /* Nunito-LightItalic.ttf */,
+ 13508BA55A1D4761A085FB3C /* Nunito-Medium.ttf */,
+ 5744AD8D40A949D6B7F3C816 /* Nunito-MediumItalic.ttf */,
+ FAD14762400E476AA7B1075D /* Nunito-Regular.ttf */,
+ 499363DC0EDB4DA4A3B87FA4 /* Nunito-SemiBold.ttf */,
+ 62F0D71A41214365A475156B /* Nunito-SemiBoldItalic.ttf */,
+ );
+ name = Resources;
+ sourceTree = "";
+ path = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -159,6 +216,22 @@
files = (
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ 77E955B03ACA476189F41279 /* Nunito-Black.ttf in Resources */,
+ 69272C3CFEEF44F4BB88C9BB /* Nunito-BlackItalic.ttf in Resources */,
+ 84A9D5DED8094CB4A153268F /* Nunito-Bold.ttf in Resources */,
+ D67F05517BE4422F808A5EB3 /* Nunito-BoldItalic.ttf in Resources */,
+ E007418A1C2740F79785A324 /* Nunito-ExtraBold.ttf in Resources */,
+ CA97D53F7B8349D19F07E434 /* Nunito-ExtraBoldItalic.ttf in Resources */,
+ FC3942C6BF94431DAF7D34CA /* Nunito-ExtraLight.ttf in Resources */,
+ BF72BEDD2BEF41D5A740F6DB /* Nunito-ExtraLightItalic.ttf in Resources */,
+ C755B258B1CE4C7D9F669459 /* Nunito-Italic.ttf in Resources */,
+ 4432DD78D2D8420098273374 /* Nunito-Light.ttf in Resources */,
+ 7E3B3883C3FA414C9770A859 /* Nunito-LightItalic.ttf in Resources */,
+ 4B27568F87CA45C18D781B4E /* Nunito-Medium.ttf in Resources */,
+ 0E89A7DC000347CCB92D18FA /* Nunito-MediumItalic.ttf in Resources */,
+ 609A14F1490B46E9966AD947 /* Nunito-Regular.ttf in Resources */,
+ 430150A883E743E9A59596D5 /* Nunito-SemiBold.ttf in Resources */,
+ E3AC45B155004DE6BD7233A4 /* Nunito-SemiBoldItalic.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/ios/CircleCollect/Info.plist b/ios/CircleCollect/Info.plist
index afab307..fb4e9c5 100644
--- a/ios/CircleCollect/Info.plist
+++ b/ios/CircleCollect/Info.plist
@@ -26,14 +26,13 @@
NSAppTransportSecurity
-
NSAllowsArbitraryLoads
NSAllowsLocalNetworking
NSLocationWhenInUseUsageDescription
-
+
UILaunchStoryboardName
LaunchScreen
UIRequiredDeviceCapabilities
@@ -48,5 +47,24 @@
UIViewControllerBasedStatusBarAppearance
+ UIAppFonts
+
+ Nunito-Black.ttf
+ Nunito-BlackItalic.ttf
+ Nunito-Bold.ttf
+ Nunito-BoldItalic.ttf
+ Nunito-ExtraBold.ttf
+ Nunito-ExtraBoldItalic.ttf
+ Nunito-ExtraLight.ttf
+ Nunito-ExtraLightItalic.ttf
+ Nunito-Italic.ttf
+ Nunito-Light.ttf
+ Nunito-LightItalic.ttf
+ Nunito-Medium.ttf
+ Nunito-MediumItalic.ttf
+ Nunito-Regular.ttf
+ Nunito-SemiBold.ttf
+ Nunito-SemiBoldItalic.ttf
+
diff --git a/ios/link-assets-manifest.json b/ios/link-assets-manifest.json
new file mode 100644
index 0000000..cbba354
--- /dev/null
+++ b/ios/link-assets-manifest.json
@@ -0,0 +1,69 @@
+{
+ "migIndex": 1,
+ "data": [
+ {
+ "path": "src/assets/fonts/Nunito-Black.ttf",
+ "sha1": "bede9c89e905ae0b91404768e1167e3e5d3c9c8e"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-BlackItalic.ttf",
+ "sha1": "5b27538c43c1afcd5b4a8547854522a805f4c302"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Bold.ttf",
+ "sha1": "e50cf9134308e37008cbd39da1dc637aef022641"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-BoldItalic.ttf",
+ "sha1": "5ab6843366253b2e8009cf3384e6d275004ad5f3"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraBold.ttf",
+ "sha1": "37ba2b2e9e7dd74a67b8b994a1aebe333af7fc39"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraBoldItalic.ttf",
+ "sha1": "fab683da6e0b9ff687a6ca683f96127e84919b24"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraLight.ttf",
+ "sha1": "5473261207bdc8a16cf78d26e598becddeb8155e"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-ExtraLightItalic.ttf",
+ "sha1": "fd4b64a944d4353f216df49c028cde717161dd24"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Italic.ttf",
+ "sha1": "0c994f04c2bb328d87069d32e7422b559c05d5a7"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Light.ttf",
+ "sha1": "e69e3dfdaf5baaa6fc6db1dd031ed18e1dca38f3"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-LightItalic.ttf",
+ "sha1": "6855c33fb876932b819dc445eeb4ae3267c4ef7d"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Medium.ttf",
+ "sha1": "75324fedc01df018cdf436bb5beba504bd82af0d"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-MediumItalic.ttf",
+ "sha1": "e582f36e0b5d13c9e3ac827bd879593dec1a06d0"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-Regular.ttf",
+ "sha1": "929ddc840610489715952aaa10af50e9c1a6a4a6"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-SemiBold.ttf",
+ "sha1": "c4a5281a3e088e1d2604635d4d09a1583d036db6"
+ },
+ {
+ "path": "src/assets/fonts/Nunito-SemiBoldItalic.ttf",
+ "sha1": "96d4f551a905d9dd509fec0ae085f35666d8f797"
+ }
+ ]
+}
diff --git a/package-lock.json b/package-lock.json
index 3cfd9f7..0a11ef5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -47,6 +47,7 @@
"react-native-responsive-dimensions": "^3.1.1",
"react-native-safe-area-context": "^5.6.1",
"react-native-screens": "^4.16.0",
+ "react-native-size-matters": "^0.0.3",
"react-native-svg": "^15.13.0",
"react-native-vector-icons": "^10.3.0",
"react-native-walkthrough-tooltip": "^1.6.0",
@@ -2813,7 +2814,9 @@
}
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
- "version": "3.14.1",
+ "version": "3.14.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz",
+ "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==",
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
@@ -7145,6 +7148,20 @@
"version": "1.0.0",
"license": "ISC"
},
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.2",
"license": "MIT",
@@ -8737,7 +8754,9 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.1.0",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
@@ -9628,13 +9647,16 @@
}
},
"node_modules/npm": {
- "version": "11.6.1",
+ "version": "11.6.4",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-11.6.4.tgz",
+ "integrity": "sha512-ERjKtGoFpQrua/9bG0+h3xiv/4nVdGViCjUYA1AmlV24fFvfnSB7B7dIfZnySQ1FDLd0ZVrWPsLLp78dCtJdRQ==",
"bundleDependencies": [
"@isaacs/string-locale-compare",
"@npmcli/arborist",
"@npmcli/config",
"@npmcli/fs",
"@npmcli/map-workspaces",
+ "@npmcli/metavuln-calculator",
"@npmcli/package-json",
"@npmcli/promise-spawn",
"@npmcli/redact",
@@ -9672,7 +9694,6 @@
"ms",
"node-gyp",
"nopt",
- "normalize-package-data",
"npm-audit-report",
"npm-install-checks",
"npm-package-arg",
@@ -9707,71 +9728,71 @@
],
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
- "@npmcli/arborist": "^9.1.5",
- "@npmcli/config": "^10.4.1",
- "@npmcli/fs": "^4.0.0",
- "@npmcli/map-workspaces": "^5.0.0",
- "@npmcli/package-json": "^7.0.1",
- "@npmcli/promise-spawn": "^8.0.3",
- "@npmcli/redact": "^3.2.2",
- "@npmcli/run-script": "^10.0.0",
+ "@npmcli/arborist": "^9.1.8",
+ "@npmcli/config": "^10.4.4",
+ "@npmcli/fs": "^5.0.0",
+ "@npmcli/map-workspaces": "^5.0.3",
+ "@npmcli/metavuln-calculator": "^9.0.3",
+ "@npmcli/package-json": "^7.0.4",
+ "@npmcli/promise-spawn": "^9.0.1",
+ "@npmcli/redact": "^4.0.0",
+ "@npmcli/run-script": "^10.0.3",
"@sigstore/tuf": "^4.0.0",
- "abbrev": "^3.0.1",
+ "abbrev": "^4.0.0",
"archy": "~1.0.0",
- "cacache": "^20.0.1",
+ "cacache": "^20.0.3",
"chalk": "^5.6.2",
- "ci-info": "^4.3.0",
+ "ci-info": "^4.3.1",
"cli-columns": "^4.0.0",
"fastest-levenshtein": "^1.0.16",
"fs-minipass": "^3.0.3",
- "glob": "^11.0.3",
+ "glob": "^13.0.0",
"graceful-fs": "^4.2.11",
- "hosted-git-info": "^9.0.0",
- "ini": "^5.0.0",
- "init-package-json": "^8.2.2",
- "is-cidr": "^6.0.0",
- "json-parse-even-better-errors": "^4.0.0",
- "libnpmaccess": "^10.0.2",
- "libnpmdiff": "^8.0.8",
- "libnpmexec": "^10.1.7",
- "libnpmfund": "^7.0.8",
+ "hosted-git-info": "^9.0.2",
+ "ini": "^6.0.0",
+ "init-package-json": "^8.2.4",
+ "is-cidr": "^6.0.1",
+ "json-parse-even-better-errors": "^5.0.0",
+ "libnpmaccess": "^10.0.3",
+ "libnpmdiff": "^8.0.11",
+ "libnpmexec": "^10.1.10",
+ "libnpmfund": "^7.0.11",
"libnpmorg": "^8.0.1",
- "libnpmpack": "^9.0.8",
- "libnpmpublish": "^11.1.1",
+ "libnpmpack": "^9.0.11",
+ "libnpmpublish": "^11.1.3",
"libnpmsearch": "^9.0.1",
"libnpmteam": "^8.0.2",
- "libnpmversion": "^8.0.2",
- "make-fetch-happen": "^15.0.2",
- "minimatch": "^10.0.3",
+ "libnpmversion": "^8.0.3",
+ "make-fetch-happen": "^15.0.3",
+ "minimatch": "^10.1.1",
"minipass": "^7.1.1",
"minipass-pipeline": "^1.2.4",
"ms": "^2.1.2",
- "node-gyp": "^11.4.2",
- "nopt": "^8.1.0",
- "normalize-package-data": "^8.0.0",
- "npm-audit-report": "^6.0.0",
- "npm-install-checks": "^7.1.2",
- "npm-package-arg": "^13.0.0",
- "npm-pick-manifest": "^11.0.1",
- "npm-profile": "^12.0.0",
- "npm-registry-fetch": "^19.0.0",
- "npm-user-validate": "^3.0.0",
- "p-map": "^7.0.3",
- "pacote": "^21.0.3",
- "parse-conflict-json": "^4.0.0",
- "proc-log": "^5.0.0",
+ "node-gyp": "^12.1.0",
+ "nopt": "^9.0.0",
+ "npm-audit-report": "^7.0.0",
+ "npm-install-checks": "^8.0.0",
+ "npm-package-arg": "^13.0.2",
+ "npm-pick-manifest": "^11.0.3",
+ "npm-profile": "^12.0.1",
+ "npm-registry-fetch": "^19.1.1",
+ "npm-user-validate": "^4.0.0",
+ "p-map": "^7.0.4",
+ "pacote": "^21.0.4",
+ "parse-conflict-json": "^5.0.1",
+ "proc-log": "^6.1.0",
"qrcode-terminal": "^0.12.0",
- "read": "^4.1.0",
- "semver": "^7.7.2",
+ "read": "^5.0.1",
+ "semver": "^7.7.3",
"spdx-expression-parse": "^4.0.0",
- "ssri": "^12.0.0",
+ "ssri": "^13.0.0",
"supports-color": "^10.2.2",
- "tar": "^7.5.1",
+ "tar": "^7.5.2",
"text-table": "~0.2.0",
"tiny-relative-date": "^2.0.2",
"treeverse": "^3.0.0",
- "validate-npm-package-name": "^6.0.2",
- "which": "^5.0.0"
+ "validate-npm-package-name": "^7.0.0",
+ "which": "^6.0.0"
},
"bin": {
"npm": "bin/npm-cli.js",
@@ -9811,68 +9832,6 @@
"node": "20 || >=22"
}
},
- "node_modules/npm/node_modules/@isaacs/cliui": {
- "version": "8.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^5.1.2",
- "string-width-cjs": "npm:string-width@^4.2.0",
- "strip-ansi": "^7.0.1",
- "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
- "wrap-ansi": "^8.1.0",
- "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.2.2",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
- "version": "9.2.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": {
- "version": "5.1.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
- "version": "7.1.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
"node_modules/npm/node_modules/@isaacs/fs-minipass": {
"version": "4.0.1",
"inBundle": true,
@@ -9905,41 +9864,41 @@
}
},
"node_modules/npm/node_modules/@npmcli/arborist": {
- "version": "9.1.5",
+ "version": "9.1.8",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
- "@npmcli/fs": "^4.0.0",
- "@npmcli/installed-package-contents": "^3.0.0",
+ "@npmcli/fs": "^5.0.0",
+ "@npmcli/installed-package-contents": "^4.0.0",
"@npmcli/map-workspaces": "^5.0.0",
"@npmcli/metavuln-calculator": "^9.0.2",
- "@npmcli/name-from-folder": "^3.0.0",
- "@npmcli/node-gyp": "^4.0.0",
+ "@npmcli/name-from-folder": "^4.0.0",
+ "@npmcli/node-gyp": "^5.0.0",
"@npmcli/package-json": "^7.0.0",
- "@npmcli/query": "^4.0.0",
- "@npmcli/redact": "^3.0.0",
+ "@npmcli/query": "^5.0.0",
+ "@npmcli/redact": "^4.0.0",
"@npmcli/run-script": "^10.0.0",
- "bin-links": "^5.0.0",
+ "bin-links": "^6.0.0",
"cacache": "^20.0.1",
"common-ancestor-path": "^1.0.1",
"hosted-git-info": "^9.0.0",
"json-stringify-nice": "^1.1.4",
"lru-cache": "^11.2.1",
"minimatch": "^10.0.3",
- "nopt": "^8.0.0",
- "npm-install-checks": "^7.1.0",
+ "nopt": "^9.0.0",
+ "npm-install-checks": "^8.0.0",
"npm-package-arg": "^13.0.0",
"npm-pick-manifest": "^11.0.1",
"npm-registry-fetch": "^19.0.0",
"pacote": "^21.0.2",
- "parse-conflict-json": "^4.0.0",
- "proc-log": "^5.0.0",
- "proggy": "^3.0.0",
+ "parse-conflict-json": "^5.0.1",
+ "proc-log": "^6.0.0",
+ "proggy": "^4.0.0",
"promise-all-reject-late": "^1.0.0",
"promise-call-limit": "^3.0.1",
"semver": "^7.3.7",
- "ssri": "^12.0.0",
+ "ssri": "^13.0.0",
"treeverse": "^3.0.0",
"walk-up-path": "^4.0.0"
},
@@ -9951,16 +9910,16 @@
}
},
"node_modules/npm/node_modules/@npmcli/config": {
- "version": "10.4.1",
+ "version": "10.4.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@npmcli/map-workspaces": "^5.0.0",
"@npmcli/package-json": "^7.0.0",
"ci-info": "^4.0.0",
- "ini": "^5.0.0",
- "nopt": "^8.1.0",
- "proc-log": "^5.0.0",
+ "ini": "^6.0.0",
+ "nopt": "^9.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.3.5",
"walk-up-path": "^4.0.0"
},
@@ -9969,57 +9928,57 @@
}
},
"node_modules/npm/node_modules/@npmcli/fs": {
- "version": "4.0.0",
+ "version": "5.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
"semver": "^7.3.5"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@npmcli/git": {
- "version": "7.0.0",
+ "version": "7.0.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/promise-spawn": "^8.0.0",
- "ini": "^5.0.0",
+ "@npmcli/promise-spawn": "^9.0.0",
+ "ini": "^6.0.0",
"lru-cache": "^11.2.1",
"npm-pick-manifest": "^11.0.1",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"promise-retry": "^2.0.1",
"semver": "^7.3.5",
- "which": "^5.0.0"
+ "which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@npmcli/installed-package-contents": {
- "version": "3.0.0",
+ "version": "4.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "npm-bundled": "^4.0.0",
- "npm-normalize-package-bin": "^4.0.0"
+ "npm-bundled": "^5.0.0",
+ "npm-normalize-package-bin": "^5.0.0"
},
"bin": {
"installed-package-contents": "bin/index.js"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@npmcli/map-workspaces": {
- "version": "5.0.0",
+ "version": "5.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/name-from-folder": "^3.0.0",
+ "@npmcli/name-from-folder": "^4.0.0",
"@npmcli/package-json": "^7.0.0",
- "glob": "^11.0.3",
+ "glob": "^13.0.0",
"minimatch": "^10.0.3"
},
"engines": {
@@ -10027,14 +9986,14 @@
}
},
"node_modules/npm/node_modules/@npmcli/metavuln-calculator": {
- "version": "9.0.2",
+ "version": "9.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
"cacache": "^20.0.0",
- "json-parse-even-better-errors": "^4.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
"pacote": "^21.0.0",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.3.5"
},
"engines": {
@@ -10042,31 +10001,31 @@
}
},
"node_modules/npm/node_modules/@npmcli/name-from-folder": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "ISC",
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/@npmcli/node-gyp": {
"version": "4.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
+ }
+ },
+ "node_modules/npm/node_modules/@npmcli/node-gyp": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@npmcli/package-json": {
- "version": "7.0.1",
+ "version": "7.0.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@npmcli/git": "^7.0.0",
- "glob": "^11.0.3",
+ "glob": "^13.0.0",
"hosted-git-info": "^9.0.0",
- "json-parse-even-better-errors": "^4.0.0",
- "proc-log": "^5.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.5.3",
"validate-npm-package-license": "^3.0.4"
},
@@ -10075,58 +10034,49 @@
}
},
"node_modules/npm/node_modules/@npmcli/promise-spawn": {
- "version": "8.0.3",
+ "version": "9.0.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "which": "^5.0.0"
+ "which": "^6.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@npmcli/query": {
- "version": "4.0.1",
+ "version": "5.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
"postcss-selector-parser": "^7.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@npmcli/redact": {
- "version": "3.2.2",
+ "version": "4.0.0",
"inBundle": true,
"license": "ISC",
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/@npmcli/run-script": {
- "version": "10.0.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/node-gyp": "^4.0.0",
- "@npmcli/package-json": "^7.0.0",
- "@npmcli/promise-spawn": "^8.0.0",
- "node-gyp": "^11.0.0",
- "proc-log": "^5.0.0",
- "which": "^5.0.0"
- },
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
- "node_modules/npm/node_modules/@pkgjs/parseargs": {
- "version": "0.11.0",
+ "node_modules/npm/node_modules/@npmcli/run-script": {
+ "version": "10.0.3",
"inBundle": true,
- "license": "MIT",
- "optional": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/node-gyp": "^5.0.0",
+ "@npmcli/package-json": "^7.0.0",
+ "@npmcli/promise-spawn": "^9.0.0",
+ "node-gyp": "^12.1.0",
+ "proc-log": "^6.0.0",
+ "which": "^6.0.0"
+ },
"engines": {
- "node": ">=14"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/@sigstore/bundle": {
@@ -10157,14 +10107,14 @@
}
},
"node_modules/npm/node_modules/@sigstore/sign": {
- "version": "4.0.0",
+ "version": "4.0.1",
"inBundle": true,
"license": "Apache-2.0",
"dependencies": {
"@sigstore/bundle": "^4.0.0",
"@sigstore/core": "^3.0.0",
"@sigstore/protobuf-specs": "^0.5.0",
- "make-fetch-happen": "^15.0.0",
+ "make-fetch-happen": "^15.0.2",
"proc-log": "^5.0.0",
"promise-retry": "^2.0.1"
},
@@ -10172,6 +10122,14 @@
"node": "^20.17.0 || >=22.9.0"
}
},
+ "node_modules/npm/node_modules/@sigstore/sign/node_modules/proc-log": {
+ "version": "5.0.0",
+ "inBundle": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^18.17.0 || >=20.5.0"
+ }
+ },
"node_modules/npm/node_modules/@sigstore/tuf": {
"version": "4.0.0",
"inBundle": true,
@@ -10232,11 +10190,11 @@
}
},
"node_modules/npm/node_modules/abbrev": {
- "version": "3.0.1",
+ "version": "4.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/agent-base": {
@@ -10255,17 +10213,6 @@
"node": ">=8"
}
},
- "node_modules/npm/node_modules/ansi-styles": {
- "version": "6.2.3",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/npm/node_modules/aproba": {
"version": "2.1.0",
"inBundle": true,
@@ -10282,18 +10229,18 @@
"license": "MIT"
},
"node_modules/npm/node_modules/bin-links": {
- "version": "5.0.0",
+ "version": "6.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "cmd-shim": "^7.0.0",
- "npm-normalize-package-bin": "^4.0.0",
- "proc-log": "^5.0.0",
- "read-cmd-shim": "^5.0.0",
- "write-file-atomic": "^6.0.0"
+ "cmd-shim": "^8.0.0",
+ "npm-normalize-package-bin": "^5.0.0",
+ "proc-log": "^6.0.0",
+ "read-cmd-shim": "^6.0.0",
+ "write-file-atomic": "^7.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/binary-extensions": {
@@ -10316,21 +10263,21 @@
}
},
"node_modules/npm/node_modules/cacache": {
- "version": "20.0.1",
+ "version": "20.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/fs": "^4.0.0",
+ "@npmcli/fs": "^5.0.0",
"fs-minipass": "^3.0.0",
- "glob": "^11.0.3",
+ "glob": "^13.0.0",
"lru-cache": "^11.1.0",
"minipass": "^7.0.3",
"minipass-collect": "^2.0.1",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"p-map": "^7.0.2",
- "ssri": "^12.0.0",
- "unique-filename": "^4.0.0"
+ "ssri": "^13.0.0",
+ "unique-filename": "^5.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -10356,7 +10303,7 @@
}
},
"node_modules/npm/node_modules/ci-info": {
- "version": "4.3.0",
+ "version": "4.3.1",
"funding": [
{
"type": "github",
@@ -10370,11 +10317,11 @@
}
},
"node_modules/npm/node_modules/cidr-regex": {
- "version": "5.0.0",
+ "version": "5.0.1",
"inBundle": true,
"license": "BSD-2-Clause",
"dependencies": {
- "ip-regex": "^5.0.0"
+ "ip-regex": "5.0.0"
},
"engines": {
"node": ">=20"
@@ -10393,66 +10340,18 @@
}
},
"node_modules/npm/node_modules/cmd-shim": {
- "version": "7.0.0",
+ "version": "8.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
- "node_modules/npm/node_modules/color-convert": {
- "version": "2.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/npm/node_modules/color-name": {
- "version": "1.1.4",
- "inBundle": true,
- "license": "MIT"
- },
"node_modules/npm/node_modules/common-ancestor-path": {
"version": "1.0.1",
"inBundle": true,
"license": "ISC"
},
- "node_modules/npm/node_modules/cross-spawn": {
- "version": "7.0.6",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/npm/node_modules/cross-spawn/node_modules/isexe": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/cross-spawn/node_modules/which": {
- "version": "2.0.2",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/npm/node_modules/cssesc": {
"version": "3.0.0",
"inBundle": true,
@@ -10488,11 +10387,6 @@
"node": ">=0.3.1"
}
},
- "node_modules/npm/node_modules/eastasianwidth": {
- "version": "0.2.0",
- "inBundle": true,
- "license": "MIT"
- },
"node_modules/npm/node_modules/emoji-regex": {
"version": "8.0.0",
"inBundle": true,
@@ -10521,7 +10415,7 @@
"license": "MIT"
},
"node_modules/npm/node_modules/exponential-backoff": {
- "version": "3.1.2",
+ "version": "3.1.3",
"inBundle": true,
"license": "Apache-2.0"
},
@@ -10533,21 +10427,6 @@
"node": ">= 4.9.1"
}
},
- "node_modules/npm/node_modules/foreground-child": {
- "version": "3.3.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "cross-spawn": "^7.0.6",
- "signal-exit": "^4.0.1"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/npm/node_modules/fs-minipass": {
"version": "3.0.3",
"inBundle": true,
@@ -10560,20 +10439,14 @@
}
},
"node_modules/npm/node_modules/glob": {
- "version": "11.0.3",
+ "version": "13.0.0",
"inBundle": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
- "foreground-child": "^3.3.1",
- "jackspeak": "^4.1.1",
- "minimatch": "^10.0.3",
+ "minimatch": "^10.1.1",
"minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
"path-scurry": "^2.0.0"
},
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
"engines": {
"node": "20 || >=22"
},
@@ -10587,7 +10460,7 @@
"license": "ISC"
},
"node_modules/npm/node_modules/hosted-git-info": {
- "version": "9.0.0",
+ "version": "9.0.2",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -10658,25 +10531,25 @@
}
},
"node_modules/npm/node_modules/ini": {
- "version": "5.0.0",
+ "version": "6.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/init-package-json": {
- "version": "8.2.2",
+ "version": "8.2.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@npmcli/package-json": "^7.0.0",
"npm-package-arg": "^13.0.0",
- "promzard": "^2.0.0",
- "read": "^4.0.0",
+ "promzard": "^3.0.1",
+ "read": "^5.0.1",
"semver": "^7.7.2",
"validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "^6.0.2"
+ "validate-npm-package-name": "^7.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -10702,11 +10575,11 @@
}
},
"node_modules/npm/node_modules/is-cidr": {
- "version": "6.0.0",
+ "version": "6.0.1",
"inBundle": true,
"license": "BSD-2-Clause",
"dependencies": {
- "cidr-regex": "^5.0.0"
+ "cidr-regex": "5.0.1"
},
"engines": {
"node": ">=20"
@@ -10728,26 +10601,12 @@
"node": ">=16"
}
},
- "node_modules/npm/node_modules/jackspeak": {
- "version": "4.1.1",
- "inBundle": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "engines": {
- "node": "20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/npm/node_modules/json-parse-even-better-errors": {
- "version": "4.0.0",
+ "version": "5.0.0",
"inBundle": true,
"license": "MIT",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/json-stringify-nice": {
@@ -10777,7 +10636,7 @@
"license": "MIT"
},
"node_modules/npm/node_modules/libnpmaccess": {
- "version": "10.0.2",
+ "version": "10.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -10789,12 +10648,12 @@
}
},
"node_modules/npm/node_modules/libnpmdiff": {
- "version": "8.0.8",
+ "version": "8.0.11",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.5",
- "@npmcli/installed-package-contents": "^3.0.0",
+ "@npmcli/arborist": "^9.1.8",
+ "@npmcli/installed-package-contents": "^4.0.0",
"binary-extensions": "^3.0.0",
"diff": "^8.0.2",
"minimatch": "^10.0.3",
@@ -10807,19 +10666,19 @@
}
},
"node_modules/npm/node_modules/libnpmexec": {
- "version": "10.1.7",
+ "version": "10.1.10",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.5",
+ "@npmcli/arborist": "^9.1.8",
"@npmcli/package-json": "^7.0.0",
"@npmcli/run-script": "^10.0.0",
"ci-info": "^4.0.0",
"npm-package-arg": "^13.0.0",
"pacote": "^21.0.2",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"promise-retry": "^2.0.1",
- "read": "^4.0.0",
+ "read": "^5.0.1",
"semver": "^7.3.7",
"signal-exit": "^4.1.0",
"walk-up-path": "^4.0.0"
@@ -10829,11 +10688,11 @@
}
},
"node_modules/npm/node_modules/libnpmfund": {
- "version": "7.0.8",
+ "version": "7.0.11",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.5"
+ "@npmcli/arborist": "^9.1.8"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -10852,11 +10711,11 @@
}
},
"node_modules/npm/node_modules/libnpmpack": {
- "version": "9.0.8",
+ "version": "9.0.11",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.5",
+ "@npmcli/arborist": "^9.1.8",
"@npmcli/run-script": "^10.0.0",
"npm-package-arg": "^13.0.0",
"pacote": "^21.0.2"
@@ -10866,7 +10725,7 @@
}
},
"node_modules/npm/node_modules/libnpmpublish": {
- "version": "11.1.1",
+ "version": "11.1.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -10874,10 +10733,10 @@
"ci-info": "^4.0.0",
"npm-package-arg": "^13.0.0",
"npm-registry-fetch": "^19.0.0",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.3.7",
"sigstore": "^4.0.0",
- "ssri": "^12.0.0"
+ "ssri": "^13.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -10907,14 +10766,14 @@
}
},
"node_modules/npm/node_modules/libnpmversion": {
- "version": "8.0.2",
+ "version": "8.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@npmcli/git": "^7.0.0",
"@npmcli/run-script": "^10.0.0",
- "json-parse-even-better-errors": "^4.0.0",
- "proc-log": "^5.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.3.7"
},
"engines": {
@@ -10922,7 +10781,7 @@
}
},
"node_modules/npm/node_modules/lru-cache": {
- "version": "11.2.1",
+ "version": "11.2.2",
"inBundle": true,
"license": "ISC",
"engines": {
@@ -10930,7 +10789,7 @@
}
},
"node_modules/npm/node_modules/make-fetch-happen": {
- "version": "15.0.2",
+ "version": "15.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -10938,22 +10797,22 @@
"cacache": "^20.0.1",
"http-cache-semantics": "^4.1.1",
"minipass": "^7.0.2",
- "minipass-fetch": "^4.0.0",
+ "minipass-fetch": "^5.0.0",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"negotiator": "^1.0.0",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"promise-retry": "^2.0.1",
- "ssri": "^12.0.0"
+ "ssri": "^13.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/minimatch": {
- "version": "10.0.3",
+ "version": "10.1.1",
"inBundle": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/brace-expansion": "^5.0.0"
},
@@ -10984,7 +10843,7 @@
}
},
"node_modules/npm/node_modules/minipass-fetch": {
- "version": "4.0.1",
+ "version": "5.0.0",
"inBundle": true,
"license": "MIT",
"dependencies": {
@@ -10993,7 +10852,7 @@
"minizlib": "^3.0.1"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
},
"optionalDependencies": {
"encoding": "^0.1.13"
@@ -11082,11 +10941,11 @@
"license": "MIT"
},
"node_modules/npm/node_modules/mute-stream": {
- "version": "2.0.0",
+ "version": "3.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/negotiator": {
@@ -11098,250 +10957,113 @@
}
},
"node_modules/npm/node_modules/node-gyp": {
- "version": "11.4.2",
+ "version": "12.1.0",
"inBundle": true,
"license": "MIT",
"dependencies": {
"env-paths": "^2.2.0",
"exponential-backoff": "^3.1.1",
"graceful-fs": "^4.2.6",
- "make-fetch-happen": "^14.0.3",
- "nopt": "^8.0.0",
- "proc-log": "^5.0.0",
+ "make-fetch-happen": "^15.0.0",
+ "nopt": "^9.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.3.5",
- "tar": "^7.4.3",
+ "tar": "^7.5.2",
"tinyglobby": "^0.2.12",
- "which": "^5.0.0"
+ "which": "^6.0.0"
},
"bin": {
"node-gyp": "bin/node-gyp.js"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/agent": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "agent-base": "^7.1.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.1",
- "lru-cache": "^10.0.1",
- "socks-proxy-agent": "^8.0.3"
- },
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/cacache": {
- "version": "19.0.1",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/fs": "^4.0.0",
- "fs-minipass": "^3.0.0",
- "glob": "^10.2.2",
- "lru-cache": "^10.0.1",
- "minipass": "^7.0.3",
- "minipass-collect": "^2.0.1",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "p-map": "^7.0.2",
- "ssri": "^12.0.0",
- "tar": "^7.4.3",
- "unique-filename": "^4.0.0"
- },
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/glob": {
- "version": "10.4.5",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "foreground-child": "^3.1.0",
- "jackspeak": "^3.1.2",
- "minimatch": "^9.0.4",
- "minipass": "^7.1.2",
- "package-json-from-dist": "^1.0.0",
- "path-scurry": "^1.11.1"
- },
- "bin": {
- "glob": "dist/esm/bin.mjs"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/jackspeak": {
- "version": "3.4.3",
- "inBundle": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "@isaacs/cliui": "^8.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- },
- "optionalDependencies": {
- "@pkgjs/parseargs": "^0.11.0"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/lru-cache": {
- "version": "10.4.3",
- "inBundle": true,
- "license": "ISC"
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": {
- "version": "14.0.3",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "@npmcli/agent": "^3.0.0",
- "cacache": "^19.0.1",
- "http-cache-semantics": "^4.1.1",
- "minipass": "^7.0.2",
- "minipass-fetch": "^4.0.0",
- "minipass-flush": "^1.0.5",
- "minipass-pipeline": "^1.2.4",
- "negotiator": "^1.0.0",
- "proc-log": "^5.0.0",
- "promise-retry": "^2.0.1",
- "ssri": "^12.0.0"
- },
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": {
- "version": "9.0.5",
- "inBundle": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/npm/node_modules/node-gyp/node_modules/path-scurry": {
- "version": "1.11.1",
- "inBundle": true,
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "lru-cache": "^10.2.0",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "engines": {
- "node": ">=16 || 14 >=14.18"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/nopt": {
- "version": "8.1.0",
+ "version": "9.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "abbrev": "^3.0.0"
+ "abbrev": "^4.0.0"
},
"bin": {
"nopt": "bin/nopt.js"
},
- "engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/normalize-package-data": {
- "version": "8.0.0",
- "inBundle": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "hosted-git-info": "^9.0.0",
- "semver": "^7.3.5",
- "validate-npm-package-license": "^3.0.4"
- },
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-audit-report": {
- "version": "6.0.0",
+ "version": "7.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-bundled": {
- "version": "4.0.0",
+ "version": "5.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "npm-normalize-package-bin": "^4.0.0"
+ "npm-normalize-package-bin": "^5.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-install-checks": {
- "version": "7.1.2",
+ "version": "8.0.0",
"inBundle": true,
"license": "BSD-2-Clause",
"dependencies": {
"semver": "^7.1.1"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-normalize-package-bin": {
- "version": "4.0.0",
+ "version": "5.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-package-arg": {
- "version": "13.0.0",
+ "version": "13.0.2",
"inBundle": true,
"license": "ISC",
"dependencies": {
"hosted-git-info": "^9.0.0",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"semver": "^7.3.5",
- "validate-npm-package-name": "^6.0.0"
+ "validate-npm-package-name": "^7.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-packlist": {
- "version": "10.0.1",
+ "version": "10.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "ignore-walk": "^8.0.0"
+ "ignore-walk": "^8.0.0",
+ "proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-pick-manifest": {
- "version": "11.0.1",
+ "version": "11.0.3",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "npm-install-checks": "^7.1.0",
- "npm-normalize-package-bin": "^4.0.0",
+ "npm-install-checks": "^8.0.0",
+ "npm-normalize-package-bin": "^5.0.0",
"npm-package-arg": "^13.0.0",
"semver": "^7.3.5"
},
@@ -11350,45 +11072,45 @@
}
},
"node_modules/npm/node_modules/npm-profile": {
- "version": "12.0.0",
+ "version": "12.0.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
"npm-registry-fetch": "^19.0.0",
- "proc-log": "^5.0.0"
+ "proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-registry-fetch": {
- "version": "19.0.0",
+ "version": "19.1.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/redact": "^3.0.0",
+ "@npmcli/redact": "^4.0.0",
"jsonparse": "^1.3.1",
"make-fetch-happen": "^15.0.0",
"minipass": "^7.0.2",
- "minipass-fetch": "^4.0.0",
+ "minipass-fetch": "^5.0.0",
"minizlib": "^3.0.1",
"npm-package-arg": "^13.0.0",
- "proc-log": "^5.0.0"
+ "proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/npm-user-validate": {
- "version": "3.0.0",
+ "version": "4.0.0",
"inBundle": true,
"license": "BSD-2-Clause",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/p-map": {
- "version": "7.0.3",
+ "version": "7.0.4",
"inBundle": true,
"license": "MIT",
"engines": {
@@ -11398,20 +11120,15 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/npm/node_modules/package-json-from-dist": {
- "version": "1.0.1",
- "inBundle": true,
- "license": "BlueOak-1.0.0"
- },
"node_modules/npm/node_modules/pacote": {
- "version": "21.0.3",
+ "version": "21.0.4",
"inBundle": true,
"license": "ISC",
"dependencies": {
"@npmcli/git": "^7.0.0",
- "@npmcli/installed-package-contents": "^3.0.0",
+ "@npmcli/installed-package-contents": "^4.0.0",
"@npmcli/package-json": "^7.0.0",
- "@npmcli/promise-spawn": "^8.0.0",
+ "@npmcli/promise-spawn": "^9.0.0",
"@npmcli/run-script": "^10.0.0",
"cacache": "^20.0.0",
"fs-minipass": "^3.0.0",
@@ -11420,10 +11137,10 @@
"npm-packlist": "^10.0.1",
"npm-pick-manifest": "^11.0.1",
"npm-registry-fetch": "^19.0.0",
- "proc-log": "^5.0.0",
+ "proc-log": "^6.0.0",
"promise-retry": "^2.0.1",
"sigstore": "^4.0.0",
- "ssri": "^12.0.0",
+ "ssri": "^13.0.0",
"tar": "^7.4.3"
},
"bin": {
@@ -11434,24 +11151,16 @@
}
},
"node_modules/npm/node_modules/parse-conflict-json": {
- "version": "4.0.0",
+ "version": "5.0.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "json-parse-even-better-errors": "^4.0.0",
+ "json-parse-even-better-errors": "^5.0.0",
"just-diff": "^6.0.0",
"just-diff-apply": "^5.2.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/path-key": {
- "version": "3.1.1",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/path-scurry": {
@@ -11482,19 +11191,19 @@
}
},
"node_modules/npm/node_modules/proc-log": {
- "version": "5.0.0",
+ "version": "6.1.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/proggy": {
- "version": "3.0.0",
+ "version": "4.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/promise-all-reject-late": {
@@ -11526,14 +11235,14 @@
}
},
"node_modules/npm/node_modules/promzard": {
- "version": "2.0.0",
+ "version": "3.0.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "read": "^4.0.0"
+ "read": "^5.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/qrcode-terminal": {
@@ -11544,22 +11253,22 @@
}
},
"node_modules/npm/node_modules/read": {
- "version": "4.1.0",
+ "version": "5.0.1",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "mute-stream": "^2.0.0"
+ "mute-stream": "^3.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/read-cmd-shim": {
- "version": "5.0.0",
+ "version": "6.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/retry": {
@@ -11577,7 +11286,7 @@
"optional": true
},
"node_modules/npm/node_modules/semver": {
- "version": "7.7.2",
+ "version": "7.7.3",
"inBundle": true,
"license": "ISC",
"bin": {
@@ -11587,25 +11296,6 @@
"node": ">=10"
}
},
- "node_modules/npm/node_modules/shebang-command": {
- "version": "2.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm/node_modules/shebang-regex": {
- "version": "3.0.0",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/npm/node_modules/signal-exit": {
"version": "4.1.0",
"inBundle": true,
@@ -11706,14 +11396,14 @@
"license": "CC0-1.0"
},
"node_modules/npm/node_modules/ssri": {
- "version": "12.0.0",
+ "version": "13.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
"minipass": "^7.0.3"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/string-width": {
@@ -11729,20 +11419,6 @@
"node": ">=8"
}
},
- "node_modules/npm/node_modules/string-width-cjs": {
- "name": "string-width",
- "version": "4.2.3",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/npm/node_modules/strip-ansi": {
"version": "6.0.1",
"inBundle": true,
@@ -11754,18 +11430,6 @@
"node": ">=8"
}
},
- "node_modules/npm/node_modules/strip-ansi-cjs": {
- "name": "strip-ansi",
- "version": "6.0.1",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/npm/node_modules/supports-color": {
"version": "10.2.2",
"inBundle": true,
@@ -11778,9 +11442,9 @@
}
},
"node_modules/npm/node_modules/tar": {
- "version": "7.5.1",
+ "version": "7.5.2",
"inBundle": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/fs-minipass": "^4.0.0",
"chownr": "^3.0.0",
@@ -11874,25 +11538,25 @@
}
},
"node_modules/npm/node_modules/unique-filename": {
- "version": "4.0.0",
+ "version": "5.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
- "unique-slug": "^5.0.0"
+ "unique-slug": "^6.0.0"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/unique-slug": {
- "version": "5.0.0",
+ "version": "6.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/util-deprecate": {
@@ -11919,11 +11583,11 @@
}
},
"node_modules/npm/node_modules/validate-npm-package-name": {
- "version": "6.0.2",
+ "version": "7.0.0",
"inBundle": true,
"license": "ISC",
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/walk-up-path": {
@@ -11935,7 +11599,7 @@
}
},
"node_modules/npm/node_modules/which": {
- "version": "5.0.0",
+ "version": "6.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -11945,104 +11609,11 @@
"node-which": "bin/which.js"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi": {
- "version": "8.1.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.1.0",
- "string-width": "^5.0.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi-cjs": {
- "name": "wrap-ansi",
- "version": "7.0.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
- "version": "4.3.0",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": {
- "version": "6.2.2",
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": {
- "version": "9.2.2",
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": {
- "version": "5.1.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^9.2.2",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": {
- "version": "7.1.2",
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/write-file-atomic": {
- "version": "6.0.0",
+ "version": "7.0.0",
"inBundle": true,
"license": "ISC",
"dependencies": {
@@ -12050,7 +11621,7 @@
"signal-exit": "^4.0.1"
},
"engines": {
- "node": "^18.17.0 || >=20.5.0"
+ "node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/npm/node_modules/yallist": {
@@ -12888,6 +12459,15 @@
"version": "1.1.3",
"license": "MIT"
},
+ "node_modules/react-native-elements/node_modules/react-native-size-matters": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.3.1.tgz",
+ "integrity": "sha512-mKOfBLIBFBcs9br1rlZDvxD5+mAl8Gfr5CounwJtxI6Z82rGrMO+Kgl9EIg3RMVf3G855a85YVqHJL2f5EDRlw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react-native": "*"
+ }
+ },
"node_modules/react-native-fast-confetti": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/react-native-fast-confetti/-/react-native-fast-confetti-1.1.1.tgz",
@@ -13081,8 +12661,10 @@
}
},
"node_modules/react-native-size-matters": {
- "version": "0.3.1",
- "license": "MIT",
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/react-native-size-matters/-/react-native-size-matters-0.0.3.tgz",
+ "integrity": "sha512-BdB4SrUicQiSN49X0V6oBZVdicsaaZ7vV4K03T5ZzWWlL7jcPf4JENrkJ4/2A9ljCI6vtAdp+YLkuEbe1eLM+g==",
+ "license": "ISC",
"peerDependencies": {
"react-native": "*"
}
@@ -14432,7 +14014,7 @@
},
"node_modules/typescript": {
"version": "5.9.2",
- "dev": true,
+ "devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
diff --git a/package.json b/package.json
index 419bedc..e69be6f 100644
--- a/package.json
+++ b/package.json
@@ -49,6 +49,7 @@
"react-native-responsive-dimensions": "^3.1.1",
"react-native-safe-area-context": "^5.6.1",
"react-native-screens": "^4.16.0",
+ "react-native-size-matters": "^0.0.3",
"react-native-svg": "^15.13.0",
"react-native-vector-icons": "^10.3.0",
"react-native-walkthrough-tooltip": "^1.6.0",
diff --git a/react-native.config.js b/react-native.config.js
new file mode 100644
index 0000000..8906a57
--- /dev/null
+++ b/react-native.config.js
@@ -0,0 +1,7 @@
+module.exports = {
+ project: {
+ ios: {},
+ android: {},
+ },
+ assets: ['./src/assets/fonts/'], // Path to your fonts
+};
diff --git a/src/assets/fonts/Nunito-Black.ttf b/src/assets/fonts/Nunito-Black.ttf
new file mode 100644
index 0000000..99491f8
Binary files /dev/null and b/src/assets/fonts/Nunito-Black.ttf differ
diff --git a/src/assets/fonts/Nunito-BlackItalic.ttf b/src/assets/fonts/Nunito-BlackItalic.ttf
new file mode 100644
index 0000000..6004938
Binary files /dev/null and b/src/assets/fonts/Nunito-BlackItalic.ttf differ
diff --git a/src/assets/fonts/Nunito-Bold.ttf b/src/assets/fonts/Nunito-Bold.ttf
new file mode 100644
index 0000000..6909689
Binary files /dev/null and b/src/assets/fonts/Nunito-Bold.ttf differ
diff --git a/src/assets/fonts/Nunito-BoldItalic.ttf b/src/assets/fonts/Nunito-BoldItalic.ttf
new file mode 100644
index 0000000..2479c36
Binary files /dev/null and b/src/assets/fonts/Nunito-BoldItalic.ttf differ
diff --git a/src/assets/fonts/Nunito-ExtraBold.ttf b/src/assets/fonts/Nunito-ExtraBold.ttf
new file mode 100644
index 0000000..6f4ccde
Binary files /dev/null and b/src/assets/fonts/Nunito-ExtraBold.ttf differ
diff --git a/src/assets/fonts/Nunito-ExtraBoldItalic.ttf b/src/assets/fonts/Nunito-ExtraBoldItalic.ttf
new file mode 100644
index 0000000..a82e6a2
Binary files /dev/null and b/src/assets/fonts/Nunito-ExtraBoldItalic.ttf differ
diff --git a/src/assets/fonts/Nunito-ExtraLight.ttf b/src/assets/fonts/Nunito-ExtraLight.ttf
new file mode 100644
index 0000000..96711f9
Binary files /dev/null and b/src/assets/fonts/Nunito-ExtraLight.ttf differ
diff --git a/src/assets/fonts/Nunito-ExtraLightItalic.ttf b/src/assets/fonts/Nunito-ExtraLightItalic.ttf
new file mode 100644
index 0000000..ff043a4
Binary files /dev/null and b/src/assets/fonts/Nunito-ExtraLightItalic.ttf differ
diff --git a/src/assets/fonts/Nunito-Italic.ttf b/src/assets/fonts/Nunito-Italic.ttf
new file mode 100644
index 0000000..97fd169
Binary files /dev/null and b/src/assets/fonts/Nunito-Italic.ttf differ
diff --git a/src/assets/fonts/Nunito-Light.ttf b/src/assets/fonts/Nunito-Light.ttf
new file mode 100644
index 0000000..fb050fc
Binary files /dev/null and b/src/assets/fonts/Nunito-Light.ttf differ
diff --git a/src/assets/fonts/Nunito-LightItalic.ttf b/src/assets/fonts/Nunito-LightItalic.ttf
new file mode 100644
index 0000000..0914950
Binary files /dev/null and b/src/assets/fonts/Nunito-LightItalic.ttf differ
diff --git a/src/assets/fonts/Nunito-Medium.ttf b/src/assets/fonts/Nunito-Medium.ttf
new file mode 100644
index 0000000..a6993eb
Binary files /dev/null and b/src/assets/fonts/Nunito-Medium.ttf differ
diff --git a/src/assets/fonts/Nunito-MediumItalic.ttf b/src/assets/fonts/Nunito-MediumItalic.ttf
new file mode 100644
index 0000000..1913632
Binary files /dev/null and b/src/assets/fonts/Nunito-MediumItalic.ttf differ
diff --git a/src/assets/fonts/Nunito-Regular.ttf b/src/assets/fonts/Nunito-Regular.ttf
new file mode 100644
index 0000000..be80c3f
Binary files /dev/null and b/src/assets/fonts/Nunito-Regular.ttf differ
diff --git a/src/assets/fonts/Nunito-SemiBold.ttf b/src/assets/fonts/Nunito-SemiBold.ttf
new file mode 100644
index 0000000..06f29ea
Binary files /dev/null and b/src/assets/fonts/Nunito-SemiBold.ttf differ
diff --git a/src/assets/fonts/Nunito-SemiBoldItalic.ttf b/src/assets/fonts/Nunito-SemiBoldItalic.ttf
new file mode 100644
index 0000000..5af8133
Binary files /dev/null and b/src/assets/fonts/Nunito-SemiBoldItalic.ttf differ
diff --git a/src/components/CostomAlart.tsx b/src/components/CostomAlart.tsx
index 3d8f2c1..4dbc7c2 100644
--- a/src/components/CostomAlart.tsx
+++ b/src/components/CostomAlart.tsx
@@ -11,6 +11,8 @@ import { BlurView } from "@react-native-community/blur";
import { Ionicons } from "@react-native-vector-icons/ionicons";
import colors from "./colors";
import { responsiveFontSize } from "react-native-responsive-dimensions";
+import { useTheme } from "../theme/ThemeProvider";
+import FontsFamily from "../constents/FontsFamily";
export interface AlertButton {
text: string;
@@ -29,7 +31,6 @@ export interface CustomAlertProps {
onClose?: () => void;
}
-const BORDER_WIDTH = 6;
const RADIUS = 24;
const CustomAlert: React.FC = ({
@@ -40,6 +41,8 @@ const CustomAlert: React.FC = ({
alertType = 'info',
onClose,
}) => {
+ const { theme } = useTheme();
+
const getIcon = () => {
switch (alertType) {
case 'error':
@@ -47,7 +50,7 @@ const CustomAlert: React.FC = ({
case 'success':
return { name: "checkmark-circle", color: colors.success };
default:
- return { name: "information-circle", color: colors.primary };
+ return { name: "information-circle", color: theme.colors.primary };
}
};
const icon = getIcon();
@@ -64,34 +67,30 @@ const CustomAlert: React.FC = ({
const getButtonStyle = (styleType: string | undefined) => {
switch (styleType) {
case "primary":
- return [styles.button, styles.primaryButton];
+ return [styles.primaryButton,{ backgroundColor: theme.colors.textPrimary }];
case "secondary":
- return [styles.button, styles.secondaryButton];
+ return [styles.primaryButton,{ backgroundColor: theme.colors.textPrimary }];
case "outline":
- return [styles.button, styles.outlineButton];
+ return [styles.primaryButton,{ backgroundColor: theme.colors.textPrimary }];
case "destructive":
- return [styles.button, styles.destructiveButton];
+ return [styles.primaryButton,{ backgroundColor: theme.colors.textPrimary }];
case "cancel":
- return [styles.button, styles.cancelButton];
+ return [styles.primaryButton,{ backgroundColor: theme.colors.textPrimary }];
default:
- return [styles.button, styles.defaultButton];
+ return [styles.primaryButton,{ backgroundColor: theme.colors.textPrimary }];
}
};
const getButtonTextStyle = (styleType: string | undefined) => {
switch (styleType) {
- case "primary":
- return [styles.buttonText, styles.primaryButtonText];
- case "secondary":
- return [styles.buttonText, styles.secondaryButtonText];
case "outline":
- return [styles.buttonText, styles.outlineButtonText];
- case "destructive":
- return [styles.buttonText, styles.destructiveButtonText];
+ return { color: theme.colors.reverseText };
case "cancel":
- return [styles.buttonText, styles.cancelButtonText];
+ return { color: colors.error };
+ case "secondary":
+ return { color: theme.colors.reverseText };
default:
- return [styles.buttonText, styles.defaultButtonText];
+ return { color: theme.colors.reverseText };
}
};
@@ -103,35 +102,49 @@ const CustomAlert: React.FC = ({
onRequestClose={handleRequestClose}
>
+ {/* Background Overlay */}
{Platform.OS === 'ios' ? (
-
+
) : (
-
+
)}
-
-
+ {/* Alert Box */}
+
+
- {/* smaller icon for vertical compression */}
+
- {title}
- {message}
+
+ {title}
+ {message}
+
{buttons.length > 0 && (
{buttons.map((button, index) => (
{button.text}
@@ -153,112 +166,83 @@ const styles = StyleSheet.create({
alignItems: "center",
},
absolute: {
- position: 'absolute',
- top: 0,
- left: 0,
- bottom: 0,
- right: 0,
+ ...StyleSheet.absoluteFillObject,
},
box: {
- paddingHorizontal: 2, // reduce horizontal padding
- padding: BORDER_WIDTH + 2, // reduce overall padding
- borderRadius: RADIUS + BORDER_WIDTH,
- width: '90%',
- maxWidth: 400,
- alignSelf: 'center',
- margin: 10, // reduce margin for vertical compression
- backgroundColor: colors.pastelPink,
- position: 'relative',
- overflow: 'hidden',
- },
- faintOverlay: {
- ...StyleSheet.absoluteFillObject,
- backgroundColor: "rgba(255,255,255,0.77)",
- zIndex: 1,
+ width: '85%',
+ maxWidth: 340,
borderRadius: RADIUS,
+ alignSelf: 'center',
+ overflow: 'hidden',
+ shadowColor: "#000",
+ shadowOffset: { width: 0, height: 10 },
+ shadowOpacity: 0.25,
+ shadowRadius: 10,
+ elevation: 10,
},
contentContainer: {
- zIndex: 2,
- padding: 12, // reduce container padding
+ padding: 20,
alignItems: "center",
},
iconContainer: {
- marginBottom: 8, // reduce vertical space below icon
+ marginBottom: 12,
},
alertTitle: {
- fontSize: responsiveFontSize(1.8), // smaller font size
- fontWeight: "bold",
- color: colors.textDark,
- marginBottom: 4, // less space below title
+ fontSize: responsiveFontSize(2),
+ fontFamily: FontsFamily.nunitoExtraBold,
+ marginBottom: 8,
textAlign: "center",
+
},
alertMessage: {
- fontSize: responsiveFontSize(1.4), // smaller font size
- color: colors.textLight,
+ fontFamily: FontsFamily.nunitoRegular,
+ fontSize: responsiveFontSize(1.6),
textAlign: "center",
- marginBottom: 12, // tighter spacing
- lineHeight: 18, // reduced line height
+ marginBottom: 20,
+ lineHeight: 20,
},
buttonContainer: {
flexDirection: "row",
justifyContent: 'flex-end',
width: "100%",
- gap: 8, // reduce gap between buttons
+ gap: 10,
+ flexWrap: 'wrap', // Allow wrapping if many buttons
},
button: {
- paddingVertical: 8, // less vertical padding
- paddingHorizontal: 16, // less horizontal padding
- borderRadius: 16,
+ paddingVertical: 10,
+ paddingHorizontal: 20,
+ borderRadius: 12,
justifyContent: 'center',
alignItems: 'center',
- minWidth: 72, // slightly smaller minimum width
- borderWidth: 0,
+ minWidth: 80,
},
- // === BUTTON STYLE VARIANTS ===
+ buttonText: {
+ fontSize: responsiveFontSize(1.6),
+ fontFamily: FontsFamily.nunitoBold,
+ },
+
+ // === BUTTON STYLES ===
defaultButton: {
- backgroundColor: colors.pastelPink,
- },
- destructiveButton: {
- backgroundColor: colors.error,
+ backgroundColor: colors.pastelPink, // Or theme.colors.primary
},
primaryButton: {
backgroundColor: colors.primary,
},
secondaryButton: {
- backgroundColor: colors.pastelBlue,
+ backgroundColor: '#E0E0E0', // Neutral gray
+ },
+ destructiveButton: {
+ backgroundColor: colors.error,
},
outlineButton: {
- borderColor: colors.primary,
- borderWidth: 2,
- backgroundColor: "transparent",
+ borderWidth: 1.5,
+ borderColor: colors.primary, // Will be overridden by theme in render if needed
+ backgroundColor: 'transparent',
},
cancelButton: {
- borderColor: colors.error,
borderWidth: 1,
- backgroundColor: "transparent",
- },
- // === BUTTON TEXT COLOR VARIANTS ===
- buttonText: {
- fontSize: responsiveFontSize(1.4), // smaller text
- fontWeight: "700",
- },
- defaultButtonText: {
- color: colors.white,
- },
- destructiveButtonText: {
- color: colors.white,
- },
- primaryButtonText: {
- color: colors.white,
- },
- secondaryButtonText: {
- color: colors.textDark,
- },
- outlineButtonText: {
- color: colors.primary,
- },
- cancelButtonText: {
- color: colors.error,
+ borderColor: colors.error,
+ backgroundColor: 'transparent',
},
});
diff --git a/src/components/common/AnimatedCard.tsx b/src/components/common/AnimatedCard.tsx
index 0278f1b..5243710 100644
--- a/src/components/common/AnimatedCard.tsx
+++ b/src/components/common/AnimatedCard.tsx
@@ -1,9 +1,11 @@
-import React, { useRef } from "react";
+import React, { use, useRef } from "react";
import { View, Text, StyleSheet, Animated, TouchableWithoutFeedback } from "react-native";
import LinearGradient from "react-native-linear-gradient";
import { Ionicons } from "@react-native-vector-icons/ionicons";
import colors from "../colors";
import { responsiveFontSize } from "react-native-responsive-dimensions";
+import { useTheme } from "../../theme/ThemeProvider";
+import FontsFamily from "../../constents/FontsFamily";
type CardProps = {
title: string;
@@ -23,7 +25,7 @@ const AnimatedCard: React.FC = ({
backTwo = colors.pastelPink,
}) => {
const scale = useRef(new Animated.Value(1)).current;
-
+ const{ theme } = useTheme()
const handlePress = () => {
Animated.sequence([
Animated.spring(scale, { toValue: 0.95, useNativeDriver: true }),
@@ -33,11 +35,11 @@ const AnimatedCard: React.FC = ({
return (
-
-
- {title}
- {subtitle && {subtitle}}
-
+
+
+ {title}
+ {subtitle && {subtitle}}
+
);
@@ -58,8 +60,8 @@ const styles = StyleSheet.create({
alignItems: "center",
},
icon: { marginBottom: 10 },
- title: { fontSize: responsiveFontSize(1.8), fontWeight: "bold", color: "#fff" },
- subtitle: { fontSize: responsiveFontSize(1.3), color: "#fff", opacity: 0.9 },
+ title: { fontSize: responsiveFontSize(2.2), fontFamily: FontsFamily.nunitoExtraBold, color: "#fff" },
+ subtitle: { fontSize: responsiveFontSize(1.5), fontFamily: FontsFamily.nunitoRegular, opacity: 0.9 },
});
export default AnimatedCard;
diff --git a/src/constents/FontsFamily.tsx b/src/constents/FontsFamily.tsx
new file mode 100644
index 0000000..0594667
--- /dev/null
+++ b/src/constents/FontsFamily.tsx
@@ -0,0 +1,29 @@
+const FontsFamily = {
+ nunitoLight: 'Nunito-Light',
+
+ nunitoBlack: 'Nunito-Black',
+ nunitoBlackItalic: 'Nunito-BlackItalic',
+
+ nunitoBold: 'Nunito-Bold',
+ nunitoBoldItalic: 'Nunito-BoldItalic',
+
+ nunitoExtraBold: 'Nunito-ExtraBold',
+ nunitoExtraBoldItalic: 'Nunito-ExtraBoldItalic',
+
+ nunitoExtraLight: 'Nunito-ExtraLight',
+ nunitoExtraLightItalic: 'Nunito-ExtraLightItalic',
+
+ nunitoItalic: 'Nunito-Italic',
+
+ nunitoLightItalic: 'Nunito-LightItalic',
+
+ nunitoMedium: 'Nunito-Medium',
+ nunitoMediumItalic: 'Nunito-MediumItalic',
+
+ nunitoRegular: 'Nunito-Regular',
+
+ nunitoSemiBold: 'Nunito-SemiBold',
+ nunitoSemiBoldItalic: 'Nunito-SemiBoldItalic',
+};
+
+export default FontsFamily;
diff --git a/src/navigation/BottomTabs.tsx b/src/navigation/BottomTabs.tsx
index 051e829..8f4e9e5 100644
--- a/src/navigation/BottomTabs.tsx
+++ b/src/navigation/BottomTabs.tsx
@@ -1,6 +1,15 @@
-import React from "react";
-import { BottomTabNavigationProp, createBottomTabNavigator } from "@react-navigation/bottom-tabs";
-import { View, Text, StyleSheet, Platform, AccessibilityInfo } from "react-native";
+import React, { useState, useEffect } from "react";
+import {
+ BottomTabNavigationProp,
+ createBottomTabNavigator,
+} from "@react-navigation/bottom-tabs";
+import {
+ View,
+ Text,
+ StyleSheet,
+ Platform,
+ AccessibilityInfo,
+} from "react-native";
import { Ionicons, IoniconsIconName } from "@react-native-vector-icons/ionicons";
import GroupScreen from "../screens/GroupScreen";
import Profile from "../screens/profile/Profile";
@@ -8,8 +17,12 @@ import Home from "../screens/home/Home";
import colors from "../components/colors";
import Setting from "../screens/setting/Setting";
import ManagementScreen from "../screens/management/ManagementScreen";
-import { responsiveFontSize, responsiveHeight } from "react-native-responsive-dimensions";
-
+import {
+ responsiveFontSize,
+ responsiveHeight,
+} from "react-native-responsive-dimensions";
+import { useTheme } from "../theme/ThemeProvider";
+import { useSafeAreaInsets } from "react-native-safe-area-context";
const TAB_CONFIG = {
activeColor: "#000",
@@ -19,60 +32,72 @@ const TAB_CONFIG = {
iconSize: 28,
};
-// Background (tab highlight) colors
const activeTabColors: { [key: string]: string } = {
- Home: colors.pastelPink, // Soft pink
- Profile: colors.pastelBlue, // Light sky blue
- Group: colors.pastelGreen, // Gentle mint green
- Management: colors.pastelOrange, // Warm pastel yellow
+ Home: colors.pastelPink,
+ Profile: colors.pastelBlue,
+ Group: colors.pastelGreen,
+ Management: colors.pastelOrange,
};
-// Icon/Text colors on active tabs
const activeIconColors: { [key: string]: string } = {
Home: "#333",
Profile: "#333",
Group: "#333",
Management: "#333",
-}
-
+};
export type RootTabParamList = {
Home: undefined;
Profile: undefined;
Group: undefined;
- Management: { actionTab?: "My Groups" | "Joined Groups" | "Requests" | "Your Requests" };
+ Management: {
+ actionTab?: "My Groups" | "Joined Groups" | "Requests" | "Your Requests";
+ };
};
-// Define the navigation prop type for screens within the tab navigator
+
export type TabNavigationProp = BottomTabNavigationProp;
const Tab = createBottomTabNavigator();
const BottomTabs: React.FC = () => {
+ const { theme } = useTheme();
+ const insets = useSafeAreaInsets();
- const [isReduceMotionEnabled, setIsReduceMotionEnabled] = React.useState(false);
- const [isScreenReaderEnabled, setIsScreenReaderEnabled] = React.useState(false);
+ const [isReduceMotionEnabled, setIsReduceMotionEnabled] =
+ useState(false);
+ const [isScreenReaderEnabled, setIsScreenReaderEnabled] =
+ useState(false);
- React.useEffect(() => {
- // Check for accessibility settings
+ useEffect(() => {
AccessibilityInfo.isScreenReaderEnabled().then(setIsScreenReaderEnabled);
AccessibilityInfo.isReduceMotionEnabled().then(setIsReduceMotionEnabled);
const screenReaderSubscription = AccessibilityInfo.addEventListener(
- 'screenReaderChanged',
+ "screenReaderChanged",
setIsScreenReaderEnabled
);
return () => screenReaderSubscription.remove();
}, []);
-
-
- // console.log("isReduceMotionEnabled : ", isReduceMotionEnabled)
- // console.log("isScreenReaderEnabled : ", isScreenReaderEnabled)
return (
({
headerShown: false,
- tabBarStyle: [styles.tabBar, {marginVertical:isReduceMotionEnabled ? responsiveHeight(0.5) : responsiveHeight(3.5) || isScreenReaderEnabled ? responsiveHeight(0.5) : responsiveHeight(3.5)}],
+ tabBarStyle: [
+ [styles.tabBar,{ backgroundColor: theme.colors.reverseBackground }],
+ {
+ bottom: insets.bottom + 10
+ },
+ ],
+
+ // Make each tab item occupy the full bar height and center its content
+ tabBarItemStyle: {
+ height: "100%",
+ justifyContent: "center",
+ alignItems: "center",
+ padding: 0,
+ margin: 0,
+ },
tabBarLabel: ({ focused, color }) =>
!focused ? (
@@ -82,32 +107,33 @@ const BottomTabs: React.FC = () => {
tabBarIcon: ({ focused }) => {
let iconName: IoniconsIconName = "home-outline";
- // Determine icon based on route
- if (route.name === "Home") iconName = focused ? "home" : "home-outline";
- else if (route.name === "Profile") iconName = focused ? "person" : "person-outline";
- else if (route.name === "Management") iconName = focused ? "settings" : "settings-outline";
- else if (route.name === "Group") iconName = focused ? "people" : "people-outline";
+ if (route.name === "Home")
+ iconName = focused ? "home" : "home-outline";
+ else if (route.name === "Profile")
+ iconName = focused ? "person" : "person-outline";
+ else if (route.name === "Management")
+ iconName = focused ? "settings" : "settings-outline";
+ else if (route.name === "Group")
+ iconName = focused ? "people" : "people-outline";
- // 3. Get the active background color and icon color from the maps
- const activeBackgroundColor = activeTabColors[route.name];
+ const activeBackgroundColor = theme.colors.background;
const activeIconColor = activeIconColors[route.name];
return (
- (route.name === "Management"{}:null)
+ />
);
},
@@ -119,7 +145,7 @@ const BottomTabs: React.FC = () => {
);
-}
+};
const styles = StyleSheet.create({
screen: {
@@ -135,19 +161,16 @@ const styles = StyleSheet.create({
},
tabBar: {
position: "absolute",
- bottom: 20,
left: 20,
right: 20,
height: TAB_CONFIG.height,
- // backgroundColor: TAB_CONFIG.backgroundColor,
borderRadius: 20,
shadowColor: "#000",
shadowOpacity: 0.1,
shadowOffset: { width: 0, height: 5 },
shadowRadius: 8,
elevation: 10,
- paddingBottom: Platform.OS === "ios" ? 25 : 10,
- paddingTop: 10,
+ paddingTop: 0,
marginHorizontal: 10,
},
label: {
@@ -155,19 +178,18 @@ const styles = StyleSheet.create({
fontSize: responsiveFontSize(1.2),
},
iconContainer: {
+ width: 60,
+ height: 50,
justifyContent: "center",
alignItems: "center",
- width: 80, // Reduced size for a sleeker look
- height: 60, // Reduced size
- marginTop: 10,
borderRadius: 15,
},
activeIconContainer: {
- // The default active style, background color is now applied dynamically
elevation: 2,
- shadowColor: '#000',
+ shadowColor: "#000",
shadowOpacity: 0.1,
shadowRadius: 5,
},
});
-export default BottomTabs
\ No newline at end of file
+
+export default BottomTabs;
diff --git a/src/screens/LoginScreen.tsx b/src/screens/LoginScreen.tsx
index 806bd56..e0a618e 100644
--- a/src/screens/LoginScreen.tsx
+++ b/src/screens/LoginScreen.tsx
@@ -19,17 +19,27 @@ import type { StackNavigationProp } from '@react-navigation/stack';
import { RootStackParamList } from '../navigation/AppNavigator';
import LinearGradient from 'react-native-linear-gradient';
import Ionicons from '@react-native-vector-icons/ionicons';
-import MaterialRipple from 'react-native-material-ripple';
+import MaterialRipple from 'react-native-material-ripple';
import CustomAlert from '../components/CostomAlart';
import colors from '../components/colors';
-import { responsiveFontSize } from 'react-native-responsive-dimensions';
+import {
+ responsiveHeight,
+ responsiveWidth,
+ responsiveFontSize
+} from "react-native-responsive-dimensions";
+import { useTheme } from '../theme/ThemeProvider';
+import FontsFamily from '../constents/FontsFamily';
+
+
const { width } = Dimensions.get('window');
const BLOCK_SIZE = width / 3;
+
// Note: You will need to install react-native-material-ripple
// npm install react-native-material-ripple
+
export default function LoginScreen() {
const navigation = useNavigation>();
const [mobile, setMobile] = useState('');
@@ -42,9 +52,12 @@ export default function LoginScreen() {
alertType: 'info' as 'info' | 'success' | 'error',
});
+
const fade = useRef(new Animated.Value(0)).current;
const slide = useRef(new Animated.Value(30)).current;
const ctaScale = useRef(new Animated.Value(1)).current;
+ const { theme } = useTheme();
+
useEffect(() => {
Animated.parallel([
@@ -53,6 +66,7 @@ export default function LoginScreen() {
]).start();
}, []);
+
const showAlert = (
title: string,
message: string,
@@ -62,10 +76,12 @@ export default function LoginScreen() {
setAlertInfo({ visible: true, title, message, buttons, alertType });
};
+
const hideAlert = () => {
setAlertInfo({ ...alertInfo, visible: false });
};
+
const handleContinue = async () => {
if (mobile.length === 10) {
setLoading(true);
@@ -87,58 +103,64 @@ export default function LoginScreen() {
}
};
+
const colorsBlocks = [
- colors.pastelPink,
- colors.pastelBlue,
- colors.pastelGreen,
- colors.pastelOrange,
- colors.pastelBlue,
- colors.pastelPink,
- colors.pastelGreen,
- colors.pastelOrange,
- colors.pastelPink,
+ theme.colors.logincard,
+ theme.colors.logincard1,
+ theme.colors.logincard1,
+ theme.colors.logincard,
+ theme.colors.logincard,
+ theme.colors.logincard1,
+ theme.colors.logincard1,
+ theme.colors.logincard,
+ theme.colors.logincard,
];
- return (
-
-
- {/* Funky grid blocks background (Unchanged) */}
-
- {colorsBlocks.map((bgColor, index) => (
-
- ))}
-
+ return (
+
+
+
+
+ {/* Funky grid blocks background (Unchanged) */}
+
+ {colorsBlocks.map((bgColor, index) => (
+
+
+ ))}
+
+
-
+
- CircleCollect
- Welcome Back!
-
+ CircleCollect
+ Welcome Back!
+
Let's get you signed in to your community.
-
-
-
+
+
+
+
-
+
+
-
+
{loading ? (
-
+
) : (
- Continue
-
+ Continue
+
)}
-
+
Your privacy is our priority. Your information is always secure.
@@ -180,6 +198,7 @@ export default function LoginScreen() {
+
>([]);
const route = useRoute();
@@ -133,17 +136,17 @@ export default function OtpVerificationScreen() {
await getFcmToken(res.data?.data?.userId);
let hasActionRun = false;
- const successAction = () => {
- if (hasActionRun) return;
- hasActionRun = true;
- hideAlert();
- navigation.dispatch(
- CommonActions.reset({
- index: 0,
- routes: [{ name: 'Home' }],
- })
- );
-};
+ const successAction = () => {
+ if (hasActionRun) return;
+ hasActionRun = true;
+ hideAlert();
+ navigation.dispatch(
+ CommonActions.reset({
+ index: 0,
+ routes: [{ name: 'Home' }],
+ })
+ );
+ };
triggerAlert(
'Success!',
@@ -238,56 +241,64 @@ export default function OtpVerificationScreen() {
}
};
- const colorsBlocks = [
- colors.pastelPink,
- colors.pastelBlue,
- colors.pastelGreen,
- colors.pastelOrange,
- colors.pastelBlue,
- colors.pastelPink,
- colors.pastelGreen,
- colors.pastelOrange,
- colors.pastelPink,
+ const colorsBlocks = [
+ theme.colors.logincard,
+ theme.colors.logincard1,
+ theme.colors.logincard1,
+ theme.colors.logincard,
+ theme.colors.logincard,
+ theme.colors.logincard1,
+ theme.colors.logincard1,
+ theme.colors.logincard,
+ theme.colors.logincard,
];
return (
-
-
+
+
{colorsBlocks.map((bgColor, index) => (
-
- ))}
+
+ ))}
-
-
+
- Verify Your Code
- We’ve sent a 6-digit verification code to +91 {mobile}.
+ Verify Your Code
+ We’ve sent a 6-digit verification code to +91 {mobile}.
-
+
{Array.from({ length: CELL_COUNT }).map((_, i) => (
{ inputs.current[i] = r; }}
- style={[styles.cell, code[i] ? styles.cellFilled : null]}
+ // UPDATED CELL STYLE
+ style={[
+ styles.cell,
+ code[i] ? styles.cellFilled : null,
+ {
+ backgroundColor: theme.colors.optCard,
+ color: theme.colors.reverseText,
+ }
+ ]}
+
keyboardType="number-pad"
maxLength={i === 0 ? CELL_COUNT : 1}
value={code[i]}
onChangeText={(t) => (i === 0 ? handleFirstCellChange(t) : updateIndex(i, t))}
onKeyPress={(e) => handleKeyPress(i, e)}
- placeholder="•"
+ placeholder="*"
placeholderTextColor="#BDBDBD"
textContentType="oneTimeCode"
/>
@@ -300,16 +311,16 @@ export default function OtpVerificationScreen() {
onPressIn={() => Animated.spring(ctaScale, { toValue: 0.97, useNativeDriver: true }).start()}
onPressOut={() => Animated.spring(ctaScale, { toValue: 1, useNativeDriver: true }).start()}
onPress={() => onSubmit(code.join(""), mobile)}
- style={styles.button}
+ style={[styles.button, { backgroundColor: theme.colors.background }]}
>
- Verify & Continue
+ Verify & Continue
{timer > 0 ? (
- Resend code in 00:{timer.toString().padStart(2, "0")}
+ Resend code in 00:{timer.toString().padStart(2, "0")}
) : (
-
+
{isResending ? "Resending..." : "Resend Code"}
@@ -335,16 +346,15 @@ const styles = StyleSheet.create({
borderRadius: 16,
},
elevatedBlock: {
- shadowColor: '#000',
- shadowOffset: { width: 0, height: 5 },
- shadowOpacity: 0.15,
- shadowRadius: 10,
- elevation: 7,
+ shadowColor: '#ffffffff',
+ shadowOffset: { width: 1, height: 5 },
+ shadowOpacity: 1,
+ shadowRadius: 15,
+ elevation: 10,
},
keyboardAvoidingContainer: { flex: 1, justifyContent: 'center' },
contentPanel: {
marginHorizontal: 24,
- backgroundColor: 'rgba(255, 255, 255, 0.95)',
borderRadius: 32,
padding: 28,
shadowColor: '#000',
@@ -354,13 +364,33 @@ const styles = StyleSheet.create({
elevation: 12,
},
topSection: { alignItems: 'center', marginBottom: 24 },
- title: { fontSize: 28, fontWeight: "bold", color: colors.textDark, textAlign: 'center', marginBottom: 12 },
- subtitle: { fontSize: 16, color: colors.textLight, textAlign: 'center', marginBottom: 32, lineHeight: 24, maxWidth: 300 },
- otpRow: { flexDirection: "row", justifyContent: "space-between", width: '100%', paddingHorizontal: 10 },
- cell: { width: 48, height: 56, borderRadius: 12, borderWidth: 1.5, borderColor: colors.inputBorder, backgroundColor: colors.white, textAlign: "center", fontSize: 22, fontWeight: '700', color: colors.textDark, shadowColor: "#000", shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.08, shadowRadius: 8, elevation: 3 },
- cellFilled: { borderColor: colors.primary, backgroundColor: '#F7F2FF' },
+ title: { fontSize: 28, color: colors.textDark, textAlign: 'center', marginBottom: 12 ,fontFamily: FontsFamily.nunitoExtraBold},
+ subtitle: { fontSize: 16, color: colors.textLight, textAlign: 'center', marginBottom: 32, lineHeight: 24, maxWidth: 300 ,fontFamily: FontsFamily.nunitoMedium},
+
+ otpRow: {
+ flexDirection: "row",
+ justifyContent: "space-between",
+ width: '100%',
+ paddingHorizontal: 0, // Removed padding to use full width
+ },
+
+ // FIX: Updated Cell Styling for clean smooth radius
+ cell: {
+ width: 45,
+ height: 52,
+ borderRadius: 14, // Smoother radius
+ textAlign: "center",
+ fontSize: 20,
+ fontWeight: "600",
+ elevation: 0, // Removed elevation for flat look (or keep if you want shadow)
+ overflow: 'hidden',
+ },
+ cellFilled: {
+ // Optional: Add specific style when filled if needed, handled inline above
+ },
+
bottomSection: { paddingBottom: Platform.OS === "ios" ? 20 : 10, paddingTop: 10 },
- button: { backgroundColor: colors.pastelPink, paddingVertical: 18, borderRadius: 30, alignItems: "center", justifyContent: "center", shadowColor: colors.primary, shadowOffset: { width: 0, height: 8 }, shadowOpacity: 0.3, shadowRadius: 15, elevation: 8 ,borderWidth:2, borderColor:colors.pastelPink},
- buttonText: { color: colors.white, fontWeight: "700", fontSize: 16 },
- footerText: { textAlign: "center", color: colors.textLight, fontSize: 14, marginTop: 20 },
+ button: { backgroundColor: colors.pastelPink, paddingVertical: 18, borderRadius: 30, alignItems: "center", justifyContent: "center",},
+ buttonText: { color: colors.white, fontSize: 16, fontFamily: FontsFamily.nunitoBold },
+ footerText: { textAlign: "center", fontFamily: FontsFamily.nunitoBold, fontSize: 14, marginTop: 20 },
});
diff --git a/src/screens/home/Home.tsx b/src/screens/home/Home.tsx
index f508743..35964a9 100644
--- a/src/screens/home/Home.tsx
+++ b/src/screens/home/Home.tsx
@@ -10,6 +10,7 @@ import {
ListRenderItem,
Alert,
RefreshControl,
+ StatusBar,
} from "react-native";
import AppView from "../../components/AppView";
import colors from "../../components/colors";
@@ -23,6 +24,10 @@ import AnimatedCard from "../../components/common/AnimatedCard";
import { Ionicons } from "@react-native-vector-icons/ionicons";
import { apiCall } from "../../utils/ApiHelper";
import CustomAlert, { CustomAlertProps } from "../../components/CostomAlart";
+import { useTheme } from "../../theme/ThemeProvider";
+import FontsFamily from "../../constents/FontsFamily";
+import { responsiveFontSize, responsiveHeight } from "react-native-responsive-dimensions";
+import { useSafeAreaInsets } from "react-native-safe-area-context";
if (Platform.OS === "android" && UIManager.setLayoutAnimationEnabledExperimental) {
UIManager.setLayoutAnimationEnabledExperimental(true);
@@ -80,6 +85,8 @@ const Home: React.FC = () => {
const [userDashboard, setUserDashboard] = useState(null);
const [refreshing, setRefreshing] = useState(false);
const [statusData, setStatusData] = useState(null);
+ const insets = useSafeAreaInsets();
+ const {theme} = useTheme();
const getDashboardData = async () => {
try {
const result = (await apiCall(DASHBOARD_URL, "GET")) as any;
@@ -186,7 +193,8 @@ const Home: React.FC = () => {
};
return (
-
+
+
{
ListHeaderComponent={
<>
-
-
- Hello, {user.firstName || apiUser?.firstName || "User"}
+
+
+ Hello,
+ {user.firstName || apiUser?.firstName || "User"}
- navigation.navigate("Notification" as never)}>
+ navigation.navigate("Notification" as never)} style={{ marginTop: responsiveHeight(2) ,}}>
{unreadCount > 0 && (
{unreadCount}
)}
-
+
@@ -217,7 +226,7 @@ const Home: React.FC = () => {
/>
- Quick Actions
+ Quick Actions
>
@@ -243,7 +252,7 @@ const Home: React.FC = () => {
onClose={() => setAlertVisible(false)}
/>
)}
-
+
);
};
@@ -252,7 +261,6 @@ export default Home;
const styles = StyleSheet.create({
container: {
flex: 1,
- backgroundColor: colors.white,
},
header: {
flexDirection: "row",
@@ -262,8 +270,8 @@ const styles = StyleSheet.create({
paddingTop: 24,
paddingBottom: 16,
},
- greeting: { fontSize: 22, color: colors.textDark },
- sectionTitle: { fontSize: 20, fontWeight: "600", color: colors.textDark, flex: 1 },
+ greeting: { fontSize: 22,fontFamily: FontsFamily.nunitoLight },
+ sectionTitle: { fontSize: 20, fontWeight: "600", color: colors.textDark, flex: 1 ,fontFamily: FontsFamily.nunitoSemiBold},
actionHeader: {
flexDirection: "row",
justifyContent: "space-between",
diff --git a/src/screens/home/UserProfileStatus.tsx b/src/screens/home/UserProfileStatus.tsx
index 2c00a05..797a80d 100644
--- a/src/screens/home/UserProfileStatus.tsx
+++ b/src/screens/home/UserProfileStatus.tsx
@@ -21,6 +21,8 @@ import {
responsiveWidth,
responsiveFontSize
} from "react-native-responsive-dimensions";
+import { useTheme } from "../../theme/ThemeProvider";
+import FontsFamily from "../../constents/FontsFamily";
type StatusData = {
role?: string;
@@ -73,7 +75,7 @@ const UserProfileStatus: React.FC = ({
const [showPayDialog, setShowPayDialog] = useState(false);
const [selectedGroupIds, setSelectedGroupIds] = useState([]);
const [submitting, setSubmitting] = useState(false);
-
+ const {theme} = useTheme();
// console.log("user me : ", userDashboard)
// Preselect all due groups at mount and on change
useEffect(() => {
@@ -92,12 +94,12 @@ const UserProfileStatus: React.FC = ({
// Top grid info items
const infoItems = useMemo(
() => [
- { icon: , label: "Role", value: statusData?.role || "-" },
- { icon: , label: "Active Groups", value: userDashboard?.activeStatusMyGroupCount?.toString() || "0" },
- { icon: , label: "Joined Groups", value: userDashboard?.myJoinedGroups?.length?.toString() || "0" },
- { icon: , label: "My Groups", value: userDashboard?.myCreatedGroups?.length?.toString() || "0" },
- { icon: , label: "Total Due", value: `₹${userDashboard?.multiplePayAmount || 0}` },
- { icon: , label: "Completed", value: userDashboard?.completeStatusMyGroupCount?.toString() || "0" },
+ { icon: , label: "Role", value: statusData?.role || "-" },
+ { icon: , label: "Active Groups", value: userDashboard?.activeStatusMyGroupCount?.toString() || "0" },
+ { icon: , label: "Joined Groups", value: userDashboard?.myJoinedGroups?.length?.toString() || "0" },
+ { icon: , label: "My Groups", value: userDashboard?.myCreatedGroups?.length?.toString() || "0" },
+ { icon: , label: "Total Due", value: `₹${userDashboard?.multiplePayAmount || 0}` },
+ { icon: , label: "Completed", value: userDashboard?.completeStatusMyGroupCount?.toString() || "0" },
],
[userDashboard, statusData]
);
@@ -153,18 +155,18 @@ const UserProfileStatus: React.FC = ({
// Bottom bar
const renderDueBar = () => (
-
-
- Total Due: ₹{totalDue}
+
+
+ Total Due: ₹{totalDue}
setShowPayDialog(true)}
disabled={dueGroups.length === 0}
activeOpacity={0.8}
>
-
- Pay All
+
+ Pay All
);
@@ -173,17 +175,14 @@ const UserProfileStatus: React.FC = ({
const renderPayDialog = () => (
setShowPayDialog(false)}>
-
-
- Select Groups to Pay
+
+ Select Groups to Pay
setShowPayDialog(false)}>
-
+
= ({
{dueGroups.map((group) => (
handleToggleGroup(group.groupId)}
activeOpacity={0.85}
>
- {group.groupName}
-
+ {group.groupName}
+
₹{group.baseAmount}
{group.lateFee > 0 ? ` (Late: ₹${group.lateFee})` : ""}
- ₹{group.totalDue}
+ {/* ₹{group.totalDue} */}
))}
-
- Total: ₹{totalDueSelected}
+
+ Total : ₹{totalDueSelected}
{submitting ? (
-
+
) : (
<>
-
- Pay Selected
+
+ Pay Selected
>
)}
-
+
);
return (
-
-
- Profile Overview
+
+ Profile Overview
-
-
-
+
+
+
{statusData?.profileStatus ? "Verified" : "Pending"}
@@ -265,16 +267,16 @@ const UserProfileStatus: React.FC = ({
{infoItems.map((item, idx) => (
-
+
-
+
{item.icon}
-
+
{item.label}
-
+
{item.value}
@@ -296,16 +298,16 @@ const UserProfileStatus: React.FC = ({
)}
-
- Total Paid Amount {userDashboard?.totalPaidAmountMonth}
- {/* Total Paid Amount {userDashboard?.totalPaidAmountMonth} */}
+
+ Total Paid Amount
+ {userDashboard?.totalPaidAmountMonth}
{renderDueBar()}
-
+
{renderPayDialog()}
@@ -377,8 +379,8 @@ const styles = StyleSheet.create({
marginRight: 8
},
header: {
- fontSize: responsiveWidth(3.5),
- fontWeight: "700",
+ fontSize: responsiveWidth(4.5),
+ fontFamily: FontsFamily.nunitoBold,
color: "#fff"
},
statusBadge: {
@@ -411,14 +413,11 @@ const styles = StyleSheet.create({
gap: 10
},
infoCard: {
- backgroundColor: 'rgba(255,255,255,0.15)',
- borderRadius: 14,
padding: 12,
- borderWidth: 1,
- borderColor: 'rgba(255,255,255,0.2)',
flex: 1,
minWidth: '45%',
marginBottom: 8,
+ borderRadius:12
},
infoCardOne: {
backgroundColor: 'rgba(255,255,255,0.15)',
@@ -436,25 +435,22 @@ const styles = StyleSheet.create({
marginBottom: 6
},
iconContainer: {
- width: 28,
- height: 28,
- backgroundColor: '#fff',
- borderRadius: 8,
+ width: responsiveWidth(8),
+ height: responsiveHeight(3.5),
+ borderRadius: responsiveWidth(2),
justifyContent: 'center',
alignItems: 'center',
marginRight: 8,
},
infoLabel: {
- color: "rgba(255,255,255,0.9)",
- fontSize: responsiveWidth(2),
- fontWeight: '500',
+ fontSize: responsiveWidth(3),
+ fontFamily: FontsFamily.nunitoSemiBold,
flexShrink: 1,
},
infoValue: {
- fontWeight: "700",
- fontSize: responsiveWidth(2.5),
+ fontFamily: FontsFamily.nunitoBold,
+ fontSize: responsiveWidth(3),
textAlign: 'left',
- color: "#fff"
},
profileSection: {
width: 90,
@@ -498,16 +494,13 @@ const styles = StyleSheet.create({
alignItems: "center",
padding: 16,
borderTopWidth: 1,
- borderColor: "rgba(255,255,255,0.15)",
- backgroundColor: "rgba(0,0,0,0.15)",
},
dueBarText: {
- color: "#fff",
- fontSize: responsiveWidth(2.5),
- fontWeight: "600"
+fontFamily: FontsFamily.nunitoExtraBold,
+ fontSize: responsiveWidth(4),
+
},
payAllButton: {
- backgroundColor: "#ffffffff",
flexDirection: "row",
alignItems: "center",
paddingHorizontal: 16,
@@ -516,8 +509,7 @@ const styles = StyleSheet.create({
gap: 6,
},
payAllButtonText: {
- color: "#000000ff",
- fontWeight: "bold",
+ fontFamily: FontsFamily.nunitoBold,
fontSize: responsiveWidth(2.5)
},
payModalOverlay: {
@@ -527,7 +519,7 @@ const styles = StyleSheet.create({
alignItems: "center",
},
payModalBox: {
- width: "92%",
+ width: "90%",
borderRadius: 24,
overflow: "hidden",
alignItems: "center",
@@ -547,9 +539,10 @@ const styles = StyleSheet.create({
borderColor: "rgba(255,255,255,0.1)",
},
payDialogTitle: {
- color: "#000000ff",
- fontSize: responsiveWidth(1.8),
- fontWeight: "700"
+
+ fontSize: responsiveWidth(4),
+ fontFamily: FontsFamily.nunitoBold,
+
},
payGroupOption: {
flexDirection: "row",
@@ -557,24 +550,20 @@ const styles = StyleSheet.create({
gap: 16,
paddingVertical: 12,
paddingHorizontal: 14,
- borderColor: colors.primary,
- borderWidth: 1,
borderRadius: 12,
marginBottom: 8,
},
payOptionSelected: {
- backgroundColor: "rgba(166, 49, 255, 0.2)",
- borderColor: colors.primary,
+
borderWidth: 1,
},
payGroupName: {
- color: "#000000ff",
- fontWeight: "700",
- fontSize: responsiveWidth(2.5)
+ fontFamily: FontsFamily.nunitoSemiBold,
+ fontSize: responsiveWidth(3)
},
payDueText: {
- color: "rgba(0, 0, 0, 0.8)",
- fontSize: responsiveWidth(1.3),
+ fontSize: responsiveWidth(3),
+ fontFamily: FontsFamily.nunitoRegular,
marginTop: 2
},
payAmount: {
@@ -591,26 +580,23 @@ const styles = StyleSheet.create({
paddingHorizontal: 18,
},
payDialogTotal: {
- color: "#000000ff",
- fontWeight: "600",
- fontSize: responsiveWidth(1.7)
+fontFamily: FontsFamily.nunitoBold,
+ fontSize: responsiveWidth(3.5)
},
payConfirmButton: {
flexDirection: "row",
alignItems: "center",
- backgroundColor: colors.primary,
- paddingVertical: 12,
- paddingHorizontal: 24,
- borderRadius: 20,
+ paddingVertical: 8,
+ paddingHorizontal: 18,
+ borderRadius: 12,
elevation: 4,
- borderColor: colors.primary,
- borderWidth: 1,
+
gap: 8,
},
payButtonText: {
color: "#ffffffff",
fontWeight: "bold",
- fontSize: responsiveWidth(2.5)
+ fontSize: responsiveWidth(3),
},
modalOverlay: {
flex: 1,
diff --git a/src/screens/management/ManagementScreen.tsx b/src/screens/management/ManagementScreen.tsx
index be3661d..8ea888a 100644
--- a/src/screens/management/ManagementScreen.tsx
+++ b/src/screens/management/ManagementScreen.tsx
@@ -1,4 +1,4 @@
-// src/screens/ManagementScreen.tsx
+ // src/screens/ManagementScreen.tsx
import React, { useState, useCallback, FC, useEffect } from "react";
import {
View,
diff --git a/src/theme/ThemeProvider.tsx b/src/theme/ThemeProvider.tsx
new file mode 100644
index 0000000..a1f0cbc
--- /dev/null
+++ b/src/theme/ThemeProvider.tsx
@@ -0,0 +1,61 @@
+// ThemeProvider.tsx
+
+import React, { createContext, useContext, useEffect, useState } from 'react';
+import { Appearance } from 'react-native';
+import AsyncStorage from '@react-native-async-storage/async-storage';
+import { Theme, ThemeMode, light, dark } from './theme';
+
+interface ThemeContextProps {
+ theme: Theme;
+ mode: ThemeMode;
+ setThemeMode: (mode: ThemeMode | 'system') => void;
+}
+
+const ThemeContext = createContext(null);
+
+export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
+ const [mode, setMode] = useState('system');
+ const [theme, setTheme] = useState(light);
+
+ // Load saved theme mode
+ useEffect(() => {
+ (async () => {
+ const stored = await AsyncStorage.getItem('app_theme');
+ if (stored) setMode(stored as ThemeMode | 'system');
+ })();
+ }, []);
+
+ // Detect system theme + apply user choice
+ useEffect(() => {
+ const applyTheme = () => {
+ const system = Appearance.getColorScheme() === 'dark' ? 'dark' : 'light';
+ const finalMode = mode === 'system' ? system : mode;
+
+ setTheme(finalMode === 'dark' ? dark : light);
+ };
+
+ applyTheme();
+
+ const listener = Appearance.addChangeListener(applyTheme);
+ return () => listener.remove();
+ }, [mode]);
+
+ // Update & save theme mode
+ const setThemeMode = async (newMode: ThemeMode | 'system') => {
+ setMode(newMode);
+ await AsyncStorage.setItem('app_theme', newMode);
+ };
+
+ return (
+
+ {children}
+
+ );
+};
+
+// Custom hook
+export const useTheme = () => {
+ const context = useContext(ThemeContext);
+ if (!context) throw new Error("useTheme must be used inside ThemeProvider");
+ return context;
+};
diff --git a/src/theme/theme.ts b/src/theme/theme.ts
new file mode 100644
index 0000000..920eb06
--- /dev/null
+++ b/src/theme/theme.ts
@@ -0,0 +1,75 @@
+export type ThemeMode = 'light' | 'dark';
+
+export interface ThemeColors {
+ primary: string;
+ secondary: string;
+ background: string;
+ card: string;
+ textPrimary: string;
+ textSecondary: string;
+ success: string;
+ border: string;
+ logincard?: string;
+ logincard1?: string;
+ reverseBackground: string;
+ reverseText?: string;
+ optCard?: string;
+ gray?: string;
+ black?: string;
+ white?: string;
+ red?: string;
+ green?: string;
+}
+
+export interface Theme {
+ mode: ThemeMode;
+ colors: ThemeColors;
+}
+
+export const light: Theme = {
+ mode: 'light',
+ colors: {
+ primary: '#F4721E',
+ secondary: '#FF9A62',
+ reverseBackground: '#000000',
+ background: '#FFFFFF',
+ card: '#F3F4F6',
+ textPrimary: '#000000',
+ reverseText: '#FFFFFF',
+ textSecondary: '#666666',
+ success: '#008e02',
+ border: '#E5E7EB',
+ logincard: '#e0e0e0',
+ logincard1: '#66666eb3',
+ optCard: '#66666eb3',
+ gray:'#e0e0e0ff',
+ black:'#000000',
+ white:'#FFFFFF',
+ red:'#FF0000',
+ green:'#00C853'
+ },
+};
+
+export const dark: Theme = {
+ mode: 'dark',
+ colors: {
+ primary: '#F4721E',
+ secondary: '#FF9A62',
+ reverseBackground: '#FFFFFF',
+ background: '#000000', // Fixed: Dark mode = Black bg
+ card: '#111214',
+ textPrimary: '#FFFFFF',
+ textSecondary: '#A1A1A1',
+ reverseText: '#000000',
+ success: '#00C853',
+ border: '#222427',
+ logincard: '#000000',
+ logincard1: '#8d8d8f',
+ optCard: '#e0e0e0',
+ gray:'#66666eb3',
+ black:'#000000',
+ white:'#FFFFFF',
+ red:'#FF0000',
+ green:'#00C853'
+ },
+};