diff --git a/App.tsx b/App.tsx
index 120f0e1..01c532b 100644
--- a/App.tsx
+++ b/App.tsx
@@ -114,7 +114,7 @@ async function onDisplayNotification(remoteMessage: any) {
'Matn yo‘q',
android: {
channelId,
- smallIcon: 'ic_launcher_foreground',
+ largeIcon: 'ic_launcher_foreground',
sound: 'default',
pressAction: {
id: 'default',
@@ -285,7 +285,9 @@ export default function App() {
-
+ {Platform.OS === 'android' && (
+
+ )}
diff --git a/android/app/build.gradle b/android/app/build.gradle
index f0c82c4..02cce0d 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -1,7 +1,6 @@
apply plugin: "com.android.application"
apply plugin: "org.jetbrains.kotlin.android"
apply plugin: "com.facebook.react"
-apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
/**
* This is the configuration block to customize your React Native Android app.
@@ -86,8 +85,8 @@ android {
applicationId "uz.felix.cpost"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode 3
- versionName "0.3"
+ versionCode 4
+ versionName "0.4"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
diff --git a/android/app/src/main/assets/fonts/GolosText-Black.ttf b/android/app/src/main/assets/fonts/GolosText-Black.ttf
new file mode 100644
index 0000000..299e76a
Binary files /dev/null and b/android/app/src/main/assets/fonts/GolosText-Black.ttf differ
diff --git a/android/app/src/main/assets/fonts/GolosText-Bold.ttf b/android/app/src/main/assets/fonts/GolosText-Bold.ttf
new file mode 100644
index 0000000..e203ff5
Binary files /dev/null and b/android/app/src/main/assets/fonts/GolosText-Bold.ttf differ
diff --git a/android/app/src/main/assets/fonts/GolosText-ExtraBold.ttf b/android/app/src/main/assets/fonts/GolosText-ExtraBold.ttf
new file mode 100644
index 0000000..b67847d
Binary files /dev/null and b/android/app/src/main/assets/fonts/GolosText-ExtraBold.ttf differ
diff --git a/android/app/src/main/assets/fonts/GolosText-Medium.ttf b/android/app/src/main/assets/fonts/GolosText-Medium.ttf
new file mode 100644
index 0000000..c8daaa6
Binary files /dev/null and b/android/app/src/main/assets/fonts/GolosText-Medium.ttf differ
diff --git a/android/app/src/main/assets/fonts/GolosText-Regular.ttf b/android/app/src/main/assets/fonts/GolosText-Regular.ttf
new file mode 100644
index 0000000..f2f0a9a
Binary files /dev/null and b/android/app/src/main/assets/fonts/GolosText-Regular.ttf differ
diff --git a/android/app/src/main/assets/fonts/GolosText-SemiBold.ttf b/android/app/src/main/assets/fonts/GolosText-SemiBold.ttf
new file mode 100644
index 0000000..60f05d3
Binary files /dev/null and b/android/app/src/main/assets/fonts/GolosText-SemiBold.ttf differ
diff --git a/android/link-assets-manifest.json b/android/link-assets-manifest.json
new file mode 100644
index 0000000..9f6f7af
--- /dev/null
+++ b/android/link-assets-manifest.json
@@ -0,0 +1,29 @@
+{
+ "migIndex": 1,
+ "data": [
+ {
+ "path": "assets/fonts/GolosText-Black.ttf",
+ "sha1": "e6722eaddeeabed103be8b1118c6f95df427fa8b"
+ },
+ {
+ "path": "assets/fonts/GolosText-Bold.ttf",
+ "sha1": "551718ded281a8d4183a6177ae49c3253721a430"
+ },
+ {
+ "path": "assets/fonts/GolosText-ExtraBold.ttf",
+ "sha1": "f2f3712a3f91ebe32524efa14df5d832b65c3409"
+ },
+ {
+ "path": "assets/fonts/GolosText-Medium.ttf",
+ "sha1": "f984e30c8b0362809380a6c36a11dd219fa4e4ca"
+ },
+ {
+ "path": "assets/fonts/GolosText-Regular.ttf",
+ "sha1": "48870644b5ac1f213fe5422ade65f3e3163b1ae0"
+ },
+ {
+ "path": "assets/fonts/GolosText-SemiBold.ttf",
+ "sha1": "f9c8af5f76e6fdf4ce77eac72ea5fadf296ecefc"
+ }
+ ]
+}
diff --git a/assets/fonts/GolosText-Black.ttf b/assets/fonts/GolosText-Black.ttf
new file mode 100644
index 0000000..299e76a
Binary files /dev/null and b/assets/fonts/GolosText-Black.ttf differ
diff --git a/assets/fonts/GolosText-Bold.ttf b/assets/fonts/GolosText-Bold.ttf
new file mode 100644
index 0000000..e203ff5
Binary files /dev/null and b/assets/fonts/GolosText-Bold.ttf differ
diff --git a/assets/fonts/GolosText-ExtraBold.ttf b/assets/fonts/GolosText-ExtraBold.ttf
new file mode 100644
index 0000000..b67847d
Binary files /dev/null and b/assets/fonts/GolosText-ExtraBold.ttf differ
diff --git a/assets/fonts/GolosText-Medium.ttf b/assets/fonts/GolosText-Medium.ttf
new file mode 100644
index 0000000..c8daaa6
Binary files /dev/null and b/assets/fonts/GolosText-Medium.ttf differ
diff --git a/assets/fonts/GolosText-Regular.ttf b/assets/fonts/GolosText-Regular.ttf
new file mode 100644
index 0000000..f2f0a9a
Binary files /dev/null and b/assets/fonts/GolosText-Regular.ttf differ
diff --git a/assets/fonts/GolosText-SemiBold.ttf b/assets/fonts/GolosText-SemiBold.ttf
new file mode 100644
index 0000000..60f05d3
Binary files /dev/null and b/assets/fonts/GolosText-SemiBold.ttf differ
diff --git a/index.js b/index.js
index e601e59..943d304 100644
--- a/index.js
+++ b/index.js
@@ -29,7 +29,7 @@ messaging().setBackgroundMessageHandler(async remoteMessage => {
'Matn yo‘q',
android: {
channelId,
- smallIcon: 'ic_launcher',
+ largeIcon: 'ic_launcher_foreground',
sound: 'default',
pressAction: {
id: 'default',
diff --git a/ios/first.xcodeproj/project.pbxproj b/ios/first.xcodeproj/project.pbxproj
index d336448..81b4417 100644
--- a/ios/first.xcodeproj/project.pbxproj
+++ b/ios/first.xcodeproj/project.pbxproj
@@ -12,6 +12,12 @@
761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
CEF180279D89A214CE1D1A56 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; };
+ C4FA443D7B874C5591EE5A24 /* GolosText-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DBA376D1D07543FDBD9DEA11 /* GolosText-Black.ttf */; };
+ D2E5D175A94F48ED90CA2608 /* GolosText-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A1684FE1A56840B488CFA0E8 /* GolosText-Bold.ttf */; };
+ 9AD72184E50F42369259E4EC /* GolosText-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 72C2AFC5B4934788BD5C73B3 /* GolosText-ExtraBold.ttf */; };
+ 5C74F28B61464A939C6BC8E9 /* GolosText-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 860701A2063545D18EB20379 /* GolosText-Medium.ttf */; };
+ 2DF5B129960A483591501792 /* GolosText-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3015B60A17ED4B2F81A772B6 /* GolosText-Regular.ttf */; };
+ E6BDDBE6D26D47ADACA19701 /* GolosText-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7FEFB3AFCAB24FA39CAF6EE3 /* GolosText-SemiBold.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -25,6 +31,12 @@
761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = first/AppDelegate.swift; sourceTree = ""; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = first/LaunchScreen.storyboard; sourceTree = ""; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ DBA376D1D07543FDBD9DEA11 /* GolosText-Black.ttf */ = {isa = PBXFileReference; name = "GolosText-Black.ttf"; path = "../assets/fonts/GolosText-Black.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ A1684FE1A56840B488CFA0E8 /* GolosText-Bold.ttf */ = {isa = PBXFileReference; name = "GolosText-Bold.ttf"; path = "../assets/fonts/GolosText-Bold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 72C2AFC5B4934788BD5C73B3 /* GolosText-ExtraBold.ttf */ = {isa = PBXFileReference; name = "GolosText-ExtraBold.ttf"; path = "../assets/fonts/GolosText-ExtraBold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 860701A2063545D18EB20379 /* GolosText-Medium.ttf */ = {isa = PBXFileReference; name = "GolosText-Medium.ttf"; path = "../assets/fonts/GolosText-Medium.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 3015B60A17ED4B2F81A772B6 /* GolosText-Regular.ttf */ = {isa = PBXFileReference; name = "GolosText-Regular.ttf"; path = "../assets/fonts/GolosText-Regular.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
+ 7FEFB3AFCAB24FA39CAF6EE3 /* GolosText-SemiBold.ttf */ = {isa = PBXFileReference; name = "GolosText-SemiBold.ttf"; path = "../assets/fonts/GolosText-SemiBold.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -75,6 +87,7 @@
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
+ 9B5408F660B24B4A8E6C28A9 /* Resources */,
);
indentWidth = 2;
sourceTree = "";
@@ -98,6 +111,20 @@
path = Pods;
sourceTree = "";
};
+ 9B5408F660B24B4A8E6C28A9 /* Resources */ = {
+ isa = "PBXGroup";
+ children = (
+ DBA376D1D07543FDBD9DEA11 /* GolosText-Black.ttf */,
+ A1684FE1A56840B488CFA0E8 /* GolosText-Bold.ttf */,
+ 72C2AFC5B4934788BD5C73B3 /* GolosText-ExtraBold.ttf */,
+ 860701A2063545D18EB20379 /* GolosText-Medium.ttf */,
+ 3015B60A17ED4B2F81A772B6 /* GolosText-Regular.ttf */,
+ 7FEFB3AFCAB24FA39CAF6EE3 /* GolosText-SemiBold.ttf */,
+ );
+ name = Resources;
+ sourceTree = "";
+ path = "";
+ };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -161,6 +188,12 @@
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
CEF180279D89A214CE1D1A56 /* PrivacyInfo.xcprivacy in Resources */,
+ C4FA443D7B874C5591EE5A24 /* GolosText-Black.ttf in Resources */,
+ D2E5D175A94F48ED90CA2608 /* GolosText-Bold.ttf in Resources */,
+ 9AD72184E50F42369259E4EC /* GolosText-ExtraBold.ttf in Resources */,
+ 5C74F28B61464A939C6BC8E9 /* GolosText-Medium.ttf in Resources */,
+ 2DF5B129960A483591501792 /* GolosText-Regular.ttf in Resources */,
+ E6BDDBE6D26D47ADACA19701 /* GolosText-SemiBold.ttf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/ios/first/Info.plist b/ios/first/Info.plist
index 6b49341..060433a 100644
--- a/ios/first/Info.plist
+++ b/ios/first/Info.plist
@@ -59,5 +59,14 @@
UIViewControllerBasedStatusBarAppearance
+ UIAppFonts
+
+ GolosText-Black.ttf
+ GolosText-Bold.ttf
+ GolosText-ExtraBold.ttf
+ GolosText-Medium.ttf
+ GolosText-Regular.ttf
+ GolosText-SemiBold.ttf
+
diff --git a/ios/link-assets-manifest.json b/ios/link-assets-manifest.json
new file mode 100644
index 0000000..9f6f7af
--- /dev/null
+++ b/ios/link-assets-manifest.json
@@ -0,0 +1,29 @@
+{
+ "migIndex": 1,
+ "data": [
+ {
+ "path": "assets/fonts/GolosText-Black.ttf",
+ "sha1": "e6722eaddeeabed103be8b1118c6f95df427fa8b"
+ },
+ {
+ "path": "assets/fonts/GolosText-Bold.ttf",
+ "sha1": "551718ded281a8d4183a6177ae49c3253721a430"
+ },
+ {
+ "path": "assets/fonts/GolosText-ExtraBold.ttf",
+ "sha1": "f2f3712a3f91ebe32524efa14df5d832b65c3409"
+ },
+ {
+ "path": "assets/fonts/GolosText-Medium.ttf",
+ "sha1": "f984e30c8b0362809380a6c36a11dd219fa4e4ca"
+ },
+ {
+ "path": "assets/fonts/GolosText-Regular.ttf",
+ "sha1": "48870644b5ac1f213fe5422ade65f3e3163b1ae0"
+ },
+ {
+ "path": "assets/fonts/GolosText-SemiBold.ttf",
+ "sha1": "f9c8af5f76e6fdf4ce77eac72ea5fadf296ecefc"
+ }
+ ]
+}
diff --git a/package-lock.json b/package-lock.json
index b85691c..fd2174f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,66 +13,42 @@
"@react-native-async-storage/async-storage": "^2.2.0",
"@react-native-clipboard/clipboard": "^1.16.3",
"@react-native-community/datetimepicker": "^8.4.2",
- "@react-native-community/geolocation": "^3.4.0",
- "@react-native-community/image-editor": "^4.3.0",
- "@react-native-community/push-notification-ios": "^1.11.0",
"@react-native-firebase/app": "^23.2.0",
"@react-native-firebase/messaging": "^23.2.0",
- "@react-native-picker/picker": "^2.11.1",
- "@react-native/new-app-screen": "0.80.1",
"@react-navigation/native": "^7.1.17",
"@react-navigation/native-stack": "^7.3.25",
- "@shopify/react-native-skia": "^2.2.2",
"@tanstack/react-query": "^5.84.2",
"axios": "^1.11.0",
- "date-fns": "^4.1.0",
"i18next": "^25.3.2",
- "i18next-browser-languagedetector": "^8.2.0",
- "i18next-http-backend": "^3.0.2",
- "link": "^2.1.1",
"lottie-react-native": "^7.3.0",
"react": "19.1.0",
"react-hook-form": "^7.61.1",
"react-i18next": "^15.6.1",
"react-native": "^0.80.1",
"react-native-app-link": "^1.0.1",
+ "react-native-asset": "^2.1.1",
"react-native-biometrics": "^3.0.1",
"react-native-config": "^1.5.6",
"react-native-confirmation-code-field": "^8.0.1",
"react-native-device-info": "^14.0.4",
"react-native-dotenv": "^3.4.11",
- "react-native-fs": "^2.20.0",
- "react-native-geolocation-service": "^5.3.1",
- "react-native-gesture-handler": "^2.28.0",
"react-native-gesture-password": "^0.4.0",
- "react-native-haptic-feedback": "^2.3.3",
"react-native-image-crop-picker": "^0.50.1",
"react-native-image-picker": "^8.2.1",
- "react-native-keychain": "^10.0.0",
"react-native-linear-gradient": "^2.8.3",
"react-native-localize": "^3.5.1",
- "react-native-maps": "^1.25.0",
"react-native-mask-input": "^1.2.3",
- "react-native-mask-text": "^0.15.0",
"react-native-modal": "^14.0.0-rc.1",
- "react-native-modal-datetime-picker": "^18.0.0",
- "react-native-permissions": "^5.4.2",
- "react-native-photo-manipulator": "^1.9.2",
"react-native-push-notification": "^8.1.1",
"react-native-reanimated": "^4.0.2",
- "react-native-reanimated-carousel": "^4.0.2",
"react-native-safe-area-context": "^5.6.0",
- "react-native-screens": "^4.14.1",
+ "react-native-screens": "^4.15.4",
"react-native-send-intent": "^1.3.0",
- "react-native-share": "^12.2.0",
- "react-native-skia": "^0.0.1",
"react-native-smooth-pincode-input": "^1.0.9",
- "react-native-splash-screen": "^3.3.0",
"react-native-svg": "^15.12.1",
"react-native-toast-message": "^2.3.3",
- "react-native-vector-icons": "^10.3.0",
"react-native-webview": "^13.15.0",
- "react-native-worklets": "^0.4.1",
+ "react-native-worklets": "0.4.1",
"zod": "^4.0.10",
"zustand": "^5.0.6"
},
@@ -2287,18 +2263,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/@egjs/hammerjs": {
- "version": "2.0.17",
- "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz",
- "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==",
- "license": "MIT",
- "dependencies": {
- "@types/hammerjs": "^2.0.36"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
@@ -4219,38 +4183,12 @@
}
}
},
- "node_modules/@react-native-community/geolocation": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/geolocation/-/geolocation-3.4.0.tgz",
- "integrity": "sha512-bzZH89/cwmpkPMKKveoC72C4JH0yF4St5Ceg/ZM9pA1SqX9MlRIrIrrOGZ/+yi++xAvFDiYfihtn9TvXWU9/rA==",
- "license": "MIT",
- "engines": {
- "node": ">=18.0.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-community/image-editor": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@react-native-community/image-editor/-/image-editor-4.3.0.tgz",
- "integrity": "sha512-JMHE+6D1hHhLwboEcbxdqk47FQ9nDrSGTlHrxDgmwUnE6wA1bQh0Ver7EyDcKxfxLqBNnHUx54mbtWVuP182vA==",
- "license": "MIT",
- "peerDependencies": {
- "react-native": ">=0.57.0"
- },
- "peerDependenciesMeta": {
- "react-native": {
- "optional": true
- }
- }
- },
"node_modules/@react-native-community/push-notification-ios": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/@react-native-community/push-notification-ios/-/push-notification-ios-1.11.0.tgz",
"integrity": "sha512-nfkUs8P2FeydOCR4r7BNmtGxAxI22YuGP6RmqWt6c8EEMUpqvIhNKWkRSFF3pHjkgJk2tpRb9wQhbezsqTyBvA==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"invariant": "^2.2.4"
},
@@ -4293,19 +4231,6 @@
}
}
},
- "node_modules/@react-native-picker/picker": {
- "version": "2.11.1",
- "resolved": "https://registry.npmjs.org/@react-native-picker/picker/-/picker-2.11.1.tgz",
- "integrity": "sha512-ThklnkK4fV3yynnIIRBkxxjxR4IFbdMNJVF6tlLdOJ/zEFUEFUEdXY0KmH0iYzMwY8W4/InWsLiA7AkpAbnexA==",
- "license": "MIT",
- "workspaces": [
- "example"
- ],
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/@react-native/assets-registry": {
"version": "0.80.2",
"resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.80.2.tgz",
@@ -4899,25 +4824,6 @@
"node": ">=18"
}
},
- "node_modules/@react-native/new-app-screen": {
- "version": "0.80.1",
- "resolved": "https://registry.npmjs.org/@react-native/new-app-screen/-/new-app-screen-0.80.1.tgz",
- "integrity": "sha512-i1dqF76zBBoyg9D2+8nN+eD4ikSnEFd0HKCTfmG6LO+NAuCBdxWzPhe2HJytlSsfV+3uNP+P/JfduBnY/+/Tcw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@types/react": "^19.0.0",
- "react": "*",
- "react-native": "*"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
"node_modules/@react-native/normalize-colors": {
"version": "0.80.2",
"resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.80.2.tgz",
@@ -5015,32 +4921,6 @@
"nanoid": "^3.3.11"
}
},
- "node_modules/@shopify/react-native-skia": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@shopify/react-native-skia/-/react-native-skia-2.2.3.tgz",
- "integrity": "sha512-B2g/V5HVbsGblUDjETDh+Vo91PQoZnqufYcXBFA3zD6GkNG+BNyU4SiDnXye27hpJ+ZvcJopXGwDCc4b2m8dqQ==",
- "license": "MIT",
- "dependencies": {
- "canvaskit-wasm": "0.40.0",
- "react-reconciler": "0.31.0"
- },
- "bin": {
- "setup-skia-web": "scripts/setup-canvaskit.js"
- },
- "peerDependencies": {
- "react": ">=19.0",
- "react-native": ">=0.78",
- "react-native-reanimated": "^3.0"
- },
- "peerDependenciesMeta": {
- "react-native": {
- "optional": true
- },
- "react-native-reanimated": {
- "optional": true
- }
- }
- },
"node_modules/@sideway/address": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -5169,12 +5049,6 @@
"@babel/types": "^7.28.2"
}
},
- "node_modules/@types/geojson": {
- "version": "7946.0.16",
- "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
- "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
- "license": "MIT"
- },
"node_modules/@types/graceful-fs": {
"version": "4.1.9",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
@@ -5184,12 +5058,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/hammerjs": {
- "version": "2.0.46",
- "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz",
- "integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==",
- "license": "MIT"
- },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
@@ -5608,11 +5476,14 @@
"devOptional": true,
"license": "MIT"
},
- "node_modules/@webgpu/types": {
- "version": "0.1.21",
- "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.21.tgz",
- "integrity": "sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==",
- "license": "BSD-3-Clause"
+ "node_modules/@xmldom/xmldom": {
+ "version": "0.8.11",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz",
+ "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
"node_modules/abort-controller": {
"version": "3.0.0",
@@ -5810,6 +5681,59 @@
"devOptional": true,
"license": "MIT"
},
+ "node_modules/aproba": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "license": "ISC"
+ },
+ "node_modules/are-we-there-yet": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
+ "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "license": "MIT"
+ },
+ "node_modules/are-we-there-yet/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/are-we-there-yet/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
+ },
+ "node_modules/are-we-there-yet/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -6286,11 +6210,6 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"license": "MIT"
},
- "node_modules/base-64": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
- "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
- },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -6311,13 +6230,13 @@
],
"license": "MIT"
},
- "node_modules/bignumber.js": {
- "version": "9.3.1",
- "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
- "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
- "license": "MIT",
+ "node_modules/big-integer": {
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+ "license": "Unlicense",
"engines": {
- "node": "*"
+ "node": ">=0.6"
}
},
"node_modules/bl": {
@@ -6380,6 +6299,27 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"license": "ISC"
},
+ "node_modules/bplist-creator": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz",
+ "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==",
+ "license": "MIT",
+ "dependencies": {
+ "stream-buffers": "2.2.x"
+ }
+ },
+ "node_modules/bplist-parser": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz",
+ "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==",
+ "license": "MIT",
+ "dependencies": {
+ "big-integer": "1.6.x"
+ },
+ "engines": {
+ "node": ">= 5.10.0"
+ }
+ },
"node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
@@ -6605,15 +6545,6 @@
],
"license": "CC-BY-4.0"
},
- "node_modules/canvaskit-wasm": {
- "version": "0.40.0",
- "resolved": "https://registry.npmjs.org/canvaskit-wasm/-/canvaskit-wasm-0.40.0.tgz",
- "integrity": "sha512-Od2o+ZmoEw9PBdN/yCGvzfu0WVqlufBPEWNG452wY7E9aT8RBE+ChpZF526doOlg7zumO4iCS+RAeht4P0Gbpw==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@webgpu/types": "0.1.21"
- }
- },
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -6794,6 +6725,15 @@
"node": ">= 0.12.0"
}
},
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/collect-v8-coverage": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
@@ -6832,40 +6772,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
- "node_modules/color-parse": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz",
- "integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==",
- "license": "MIT",
- "dependencies": {
- "color-name": "^2.0.0"
- }
- },
- "node_modules/color-parse/node_modules/color-name": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz",
- "integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- }
- },
- "node_modules/color-rgba": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz",
- "integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==",
- "license": "MIT",
- "dependencies": {
- "color-parse": "^2.0.0",
- "color-space": "^2.0.0"
- }
- },
- "node_modules/color-space": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/color-space/-/color-space-2.3.2.tgz",
- "integrity": "sha512-BcKnbOEsOarCwyoLstcoEztwT0IJxqqQkNwDuA3a65sICvvHL2yoeV13psoDFh5IuiOMnIOKdQDwB4Mk3BypiA==",
- "license": "Unlicense"
- },
"node_modules/color-string": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
@@ -7004,6 +6910,12 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
+ "node_modules/console-control-strings": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
+ "license": "ISC"
+ },
"node_modules/content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
@@ -7034,6 +6946,12 @@
"url": "https://opencollective.com/core-js"
}
},
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "license": "MIT"
+ },
"node_modules/cosmiconfig": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
@@ -7083,15 +7001,6 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/cross-fetch": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
- "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
- "license": "MIT",
- "dependencies": {
- "node-fetch": "^2.6.12"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -7209,16 +7118,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/date-fns": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
- "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/kossnocorp"
- }
- },
"node_modules/dayjs": {
"version": "1.11.13",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
@@ -7352,6 +7251,12 @@
"node": ">=0.4.0"
}
},
+ "node_modules/delegates": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
+ "license": "MIT"
+ },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -7538,31 +7443,6 @@
"node": ">= 0.8"
}
},
- "node_modules/encoding": {
- "version": "0.1.13",
- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
- "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
- "node_modules/encoding/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
@@ -9055,6 +8935,70 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/gauge": {
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "dependencies": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "node_modules/gauge/node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "license": "MIT",
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "license": "MIT",
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/gauge/node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -9363,6 +9307,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-unicode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
+ "license": "ISC"
+ },
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -9390,21 +9340,6 @@
"hermes-estree": "0.28.1"
}
},
- "node_modules/hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "react-is": "^16.7.0"
- }
- },
- "node_modules/hoist-non-react-statics/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
- },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -9506,24 +9441,6 @@
}
}
},
- "node_modules/i18next-browser-languagedetector": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.2.0.tgz",
- "integrity": "sha512-P+3zEKLnOF0qmiesW383vsLdtQVyKtCNA9cjSoKCppTKPQVfKd2W8hbVo5ZhNJKDqeM7BOcvNoKJOjpHh4Js9g==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.23.2"
- }
- },
- "node_modules/i18next-http-backend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-3.0.2.tgz",
- "integrity": "sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==",
- "license": "MIT",
- "dependencies": {
- "cross-fetch": "4.0.0"
- }
- },
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -11360,7 +11277,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "devOptional": true,
"license": "MIT",
"optionalDependencies": {
"graceful-fs": "^4.1.6"
@@ -11478,18 +11394,6 @@
"devOptional": true,
"license": "MIT"
},
- "node_modules/link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/link/-/link-2.1.1.tgz",
- "integrity": "sha512-NV3AUVYBovJ6eVQcTeRoPnZSxzt2LOijNd+ugEZKRy/XeQlpTRhVRkuDv5kOlXwMAUx30vfUc7asRFb9RT65yg==",
- "license": "MIT",
- "bin": {
- "link": "dist/cli.js"
- },
- "funding": {
- "url": "https://github.com/privatenumber/link?sponsor=1"
- }
- },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -11510,7 +11414,6 @@
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true,
"license": "MIT"
},
"node_modules/lodash.camelcase": {
@@ -12971,26 +12874,6 @@
"node": "*"
}
},
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
@@ -13039,6 +12922,19 @@
"node": ">=8"
}
},
+ "node_modules/npmlog": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
+ "deprecated": "This package is no longer supported.",
+ "license": "ISC",
+ "dependencies": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
"node_modules/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -13057,6 +12953,15 @@
"integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==",
"license": "MIT"
},
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/ob1": {
"version": "0.83.1",
"resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.1.tgz",
@@ -13643,6 +13548,20 @@
"node": ">=4"
}
},
+ "node_modules/plist": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
+ "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@xmldom/xmldom": "^0.8.8",
+ "base64-js": "^1.5.1",
+ "xmlbuilder": "^15.1.1"
+ },
+ "engines": {
+ "node": ">=10.4.0"
+ }
+ },
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
@@ -13729,6 +13648,12 @@
"devOptional": true,
"license": "MIT"
},
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "license": "MIT"
+ },
"node_modules/promise": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
@@ -14092,6 +14017,40 @@
"react-native": ">=0.20.0"
}
},
+ "node_modules/react-native-asset": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/react-native-asset/-/react-native-asset-2.1.1.tgz",
+ "integrity": "sha512-fBtQkyuaVEHClfNFO2bep7yhbURz+Vft4eyjA1Gb4+eQ9DI5kQRFtKRoGBjr4QqXpgEELAC1Y5IDmHthGvBJ8Q==",
+ "license": "ISC",
+ "dependencies": {
+ "fs-extra": "^7.0.1",
+ "lodash": "4.17.21",
+ "npmlog": "^4.1.2",
+ "plist": "^3.0.1",
+ "sha1-file": "^1.0.4",
+ "xcode": "^2.0.0"
+ },
+ "bin": {
+ "react-native-asset": "lib/cli.js"
+ },
+ "peerDependencies": {
+ "react-native": ">=0.60.0"
+ }
+ },
+ "node_modules/react-native-asset/node_modules/fs-extra": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
"node_modules/react-native-biometrics": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/react-native-biometrics/-/react-native-biometrics-3.0.1.tgz",
@@ -14167,46 +14126,6 @@
"@babel/runtime": "^7.20.6"
}
},
- "node_modules/react-native-fs": {
- "version": "2.20.0",
- "resolved": "https://registry.npmjs.org/react-native-fs/-/react-native-fs-2.20.0.tgz",
- "integrity": "sha512-VkTBzs7fIDUiy/XajOSNk0XazFE9l+QlMAce7lGuebZcag5CnjszB+u4BdqzwaQOdcYb5wsJIsqq4kxInIRpJQ==",
- "license": "MIT",
- "dependencies": {
- "base-64": "^0.1.0",
- "utf8": "^3.0.0"
- },
- "peerDependencies": {
- "react-native": "*",
- "react-native-windows": "*"
- },
- "peerDependenciesMeta": {
- "react-native-windows": {
- "optional": true
- }
- }
- },
- "node_modules/react-native-geolocation-service": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/react-native-geolocation-service/-/react-native-geolocation-service-5.3.1.tgz",
- "integrity": "sha512-LTXPtPNmrdhx+yeWG47sAaCgQc3nG1z+HLLHlhK/5YfOgfLcAb9HAkhREPjQKPZOUx8pKZMIpdGFUGfJYtimXQ==",
- "license": "MIT"
- },
- "node_modules/react-native-gesture-handler": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.28.0.tgz",
- "integrity": "sha512-0msfJ1vRxXKVgTgvL+1ZOoYw3/0z1R+Ked0+udoJhyplC2jbVKIJ8Z1bzWdpQRCV3QcQ87Op0zJVE5DhKK2A0A==",
- "license": "MIT",
- "dependencies": {
- "@egjs/hammerjs": "^2.0.17",
- "hoist-non-react-statics": "^3.3.0",
- "invariant": "^2.2.4"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/react-native-gesture-password": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/react-native-gesture-password/-/react-native-gesture-password-0.4.0.tgz",
@@ -14219,18 +14138,6 @@
"react-native": ">=15.5"
}
},
- "node_modules/react-native-haptic-feedback": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/react-native-haptic-feedback/-/react-native-haptic-feedback-2.3.3.tgz",
- "integrity": "sha512-svS4D5PxfNv8o68m9ahWfwje5NqukM3qLS48+WTdhbDkNUkOhP9rDfDSRHzlhk4zq+ISjyw95EhLeh8NkKX5vQ==",
- "license": "MIT",
- "workspaces": [
- "example"
- ],
- "peerDependencies": {
- "react-native": ">=0.60.0"
- }
- },
"node_modules/react-native-image-crop-picker": {
"version": "0.50.1",
"resolved": "https://registry.npmjs.org/react-native-image-crop-picker/-/react-native-image-crop-picker-0.50.1.tgz",
@@ -14261,19 +14168,6 @@
"react-native": "*"
}
},
- "node_modules/react-native-keychain": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/react-native-keychain/-/react-native-keychain-10.0.0.tgz",
- "integrity": "sha512-YzPKSAnSzGEJ12IK6CctNLU79T1W15WDrElRQ+1/FsOazGX9ucFPTQwgYe8Dy8jiSEDJKM4wkVa3g4lD2Z+Pnw==",
- "license": "MIT",
- "workspaces": [
- "KeychainExample",
- "website"
- ],
- "engines": {
- "node": ">=16"
- }
- },
"node_modules/react-native-linear-gradient": {
"version": "2.8.3",
"resolved": "https://registry.npmjs.org/react-native-linear-gradient/-/react-native-linear-gradient-2.8.3.tgz",
@@ -14304,28 +14198,6 @@
}
}
},
- "node_modules/react-native-maps": {
- "version": "1.25.3",
- "resolved": "https://registry.npmjs.org/react-native-maps/-/react-native-maps-1.25.3.tgz",
- "integrity": "sha512-Mi/uPvBBWqEJYj/wNIM40bIf7tnVWm8dM52X6LWiiN7cajozXtydKoVeuShHpK07cvi565maY+3QiB5yTxmb0w==",
- "license": "MIT",
- "dependencies": {
- "@types/geojson": "^7946.0.13"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "react": ">= 18.3.1",
- "react-native": ">= 0.76.0",
- "react-native-web": ">= 0.11"
- },
- "peerDependenciesMeta": {
- "react-native-web": {
- "optional": true
- }
- }
- },
"node_modules/react-native-mask-input": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/react-native-mask-input/-/react-native-mask-input-1.2.3.tgz",
@@ -14336,19 +14208,6 @@
"react-native": "*"
}
},
- "node_modules/react-native-mask-text": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/react-native-mask-text/-/react-native-mask-text-0.15.0.tgz",
- "integrity": "sha512-KtE/DKFtf6/Glyt3uFRMa+8/RpgTDJVV9rrkZYbwMiGO3AzvDPsRxp5FoLNJk0NXhRCRn8Frs8Z2S6a+uB2ZdQ==",
- "license": "MIT",
- "dependencies": {
- "bignumber.js": "^9.0.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/react-native-modal": {
"version": "14.0.0-rc.1",
"resolved": "https://registry.npmjs.org/react-native-modal/-/react-native-modal-14.0.0-rc.1.tgz",
@@ -14362,51 +14221,6 @@
"react-native": ">=0.70.0"
}
},
- "node_modules/react-native-modal-datetime-picker": {
- "version": "18.0.0",
- "resolved": "https://registry.npmjs.org/react-native-modal-datetime-picker/-/react-native-modal-datetime-picker-18.0.0.tgz",
- "integrity": "sha512-0jdvhhraZQlRACwr7pM6vmZ2kxgzJ4CpnmV6J3TVA6MrXMXK6Zo/upRBKkRp0+fTOiKuNblzesA2U59rYo6SGA==",
- "license": "MIT",
- "dependencies": {
- "prop-types": "^15.7.2"
- },
- "peerDependencies": {
- "@react-native-community/datetimepicker": ">=6.7.0",
- "react-native": ">=0.65.0"
- }
- },
- "node_modules/react-native-permissions": {
- "version": "5.4.2",
- "resolved": "https://registry.npmjs.org/react-native-permissions/-/react-native-permissions-5.4.2.tgz",
- "integrity": "sha512-XNMoG1fxrB9q73MLn/ZfTaP7pS8qPu0KWypbeFKVTvoR+JJ3O7uedMOTH/mts9bTG+GKhShOoZ+k0CR63q9jwA==",
- "license": "MIT",
- "peerDependencies": {
- "react": ">=18.1.0",
- "react-native": ">=0.70.0",
- "react-native-windows": ">=0.70.0"
- },
- "peerDependenciesMeta": {
- "react-native-windows": {
- "optional": true
- }
- }
- },
- "node_modules/react-native-photo-manipulator": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/react-native-photo-manipulator/-/react-native-photo-manipulator-1.9.2.tgz",
- "integrity": "sha512-Q3Y3mGAIYTk0QhXYvCb1/m6amkFZ2ieUvkOkHaOa/zWECyGP5Pi+z0Z0PvtM2acdb2oBv7SZyeVg9W4g3ZggQw==",
- "license": "MIT",
- "workspaces": [
- "example"
- ],
- "dependencies": {
- "color-rgba": "^3.0.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/react-native-push-notification": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/react-native-push-notification/-/react-native-push-notification-8.1.1.tgz",
@@ -14433,18 +14247,6 @@
"react-native-worklets": ">=0.4.0"
}
},
- "node_modules/react-native-reanimated-carousel": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/react-native-reanimated-carousel/-/react-native-reanimated-carousel-4.0.3.tgz",
- "integrity": "sha512-YZXlvZNghR5shFcI9hTA7h7bEhh97pfUSLZvLBAshpbkuYwJDKmQXejO/199T6hqGq0wCRwR0CWf2P4Vs6A4Fw==",
- "license": "MIT",
- "peerDependencies": {
- "react": ">=18.0.0",
- "react-native": ">=0.70.3",
- "react-native-gesture-handler": ">=2.9.0",
- "react-native-reanimated": ">=3.0.0"
- }
- },
"node_modules/react-native-reanimated/node_modules/semver": {
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
@@ -14468,9 +14270,9 @@
}
},
"node_modules/react-native-screens": {
- "version": "4.14.1",
- "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.14.1.tgz",
- "integrity": "sha512-/7zxVdk2H4BH/dvqpQQh45VCA05UeC+LCE8TPtGfjn5A+9/UJfKPB8LHhAcWxciLYfMCyW8J2u5dGLGQJH/Ecg==",
+ "version": "4.15.4",
+ "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-4.15.4.tgz",
+ "integrity": "sha512-aKHPDScUbpQiZEG9eZssHdG5jEQs4yiJ8eMx6g81Ex/xU7DZkv3911enzdCb+v4eJE79X8waizY0ZhauZJQmrw==",
"license": "MIT",
"dependencies": {
"react-freeze": "^1.0.0",
@@ -14491,21 +14293,6 @@
"react-native": "*"
}
},
- "node_modules/react-native-share": {
- "version": "12.2.0",
- "resolved": "https://registry.npmjs.org/react-native-share/-/react-native-share-12.2.0.tgz",
- "integrity": "sha512-f6MB9BsKa9xVvu0DKbxq5jw4IyYHqQeqUlCNkD8eAFoJx6SD31ObPAn7SQ6NG9AOuhCy6aYuSJYJvx25DaoMZQ==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/react-native-skia": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/react-native-skia/-/react-native-skia-0.0.1.tgz",
- "integrity": "sha512-etuNQDOiDBmncaw17aij6ygh9rb7P3v6Hz+moU5QcmznoeD2tXRepOJO2wSN0PzibVhMNZrBqTyA8Yg5OkHwuA==",
- "license": "MIT"
- },
"node_modules/react-native-smooth-pincode-input": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/react-native-smooth-pincode-input/-/react-native-smooth-pincode-input-1.0.9.tgz",
@@ -14519,15 +14306,6 @@
"react-native": "*"
}
},
- "node_modules/react-native-splash-screen": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/react-native-splash-screen/-/react-native-splash-screen-3.3.0.tgz",
- "integrity": "sha512-rGjt6HkoSXxMqH4SQUJ1gnPQlPJV8+J47+4yhgTIan4bVvAwJhEeJH7wWt9hXSdH4+VfwTS0GTaflj1Tw83IhA==",
- "license": "MIT",
- "peerDependencies": {
- "react-native": ">=0.57.0"
- }
- },
"node_modules/react-native-svg": {
"version": "15.12.1",
"resolved": "https://registry.npmjs.org/react-native-svg/-/react-native-svg-15.12.1.tgz",
@@ -14553,61 +14331,6 @@
"react-native": "*"
}
},
- "node_modules/react-native-vector-icons": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-10.3.0.tgz",
- "integrity": "sha512-IFQ0RE57819hOUdFvgK4FowM5aMXg7C7XKsuGLevqXkkIJatc3QopN0wYrb2IrzUgmdpfP+QVIbI3S6h7M0btw==",
- "deprecated": "react-native-vector-icons package has moved to a new model of per-icon-family packages. See the https://github.com/oblador/react-native-vector-icons/blob/master/MIGRATION.md on how to migrate",
- "license": "MIT",
- "dependencies": {
- "prop-types": "^15.7.2",
- "yargs": "^16.1.1"
- },
- "bin": {
- "fa-upgrade.sh": "bin/fa-upgrade.sh",
- "fa5-upgrade": "bin/fa5-upgrade.sh",
- "fa6-upgrade": "bin/fa6-upgrade.sh",
- "generate-icon": "bin/generate-icon.js"
- }
- },
- "node_modules/react-native-vector-icons/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/react-native-vector-icons/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "license": "MIT",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/react-native-vector-icons/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/react-native-webview": {
"version": "13.15.0",
"resolved": "https://registry.npmjs.org/react-native-webview/-/react-native-webview-13.15.0.tgz",
@@ -14811,27 +14534,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-reconciler": {
- "version": "0.31.0",
- "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.31.0.tgz",
- "integrity": "sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ==",
- "license": "MIT",
- "dependencies": {
- "scheduler": "^0.25.0"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "peerDependencies": {
- "react": "^19.0.0"
- }
- },
- "node_modules/react-reconciler/node_modules/scheduler": {
- "version": "0.25.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz",
- "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==",
- "license": "MIT"
- },
"node_modules/react-refresh": {
"version": "0.14.2",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
@@ -15354,7 +15056,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "devOptional": true,
"license": "ISC"
},
"node_modules/set-function-length": {
@@ -15412,6 +15113,13 @@
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"license": "ISC"
},
+ "node_modules/sha1-file": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-1.0.4.tgz",
+ "integrity": "sha512-IgcUYjTck/UAx0wdtBoTwiy4/yiIZX6do4uaqUtryJY/pBOQC1w3Cb/bZMyC2H3QYnodL5vbX0lY69xlWqeBnA==",
+ "deprecated": "Version 1.x or earlier is no longer supported.",
+ "license": "MIT"
+ },
"node_modules/shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
@@ -15542,6 +15250,17 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"license": "ISC"
},
+ "node_modules/simple-plist": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz",
+ "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==",
+ "license": "MIT",
+ "dependencies": {
+ "bplist-creator": "0.1.0",
+ "bplist-parser": "0.3.1",
+ "plist": "^3.0.5"
+ }
+ },
"node_modules/simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -15724,6 +15443,15 @@
"node": ">= 0.4"
}
},
+ "node_modules/stream-buffers": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
+ "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==",
+ "license": "Unlicense",
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
"node_modules/strict-uri-encode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
@@ -16105,12 +15833,6 @@
"node": ">=0.6"
}
},
- "node_modules/tr46": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
- "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
- "license": "MIT"
- },
"node_modules/ts-api-utils": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
@@ -16357,7 +16079,6 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
@@ -16430,17 +16151,10 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz",
- "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==",
- "license": "MIT"
- },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "devOptional": true,
"license": "MIT"
},
"node_modules/utils-merge": {
@@ -16452,6 +16166,16 @@
"node": ">= 0.4.0"
}
},
+ "node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
+ }
+ },
"node_modules/v8-to-istanbul": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
@@ -16523,12 +16247,6 @@
"integrity": "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==",
"license": "Apache-2.0"
},
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
- "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
- "license": "BSD-2-Clause"
- },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -16558,16 +16276,6 @@
"integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==",
"license": "MIT"
},
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
- "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -16680,6 +16388,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/wide-align": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^1.0.2 || 2 || 3 || 4"
+ }
+ },
"node_modules/word-wrap": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
@@ -16735,6 +16452,28 @@
"async-limiter": "~1.0.0"
}
},
+ "node_modules/xcode": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz",
+ "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "simple-plist": "^1.0.0",
+ "uuid": "^3.3.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
+ "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 293e4ed..dadc0f6 100644
--- a/package.json
+++ b/package.json
@@ -18,66 +18,42 @@
"@react-native-async-storage/async-storage": "^2.2.0",
"@react-native-clipboard/clipboard": "^1.16.3",
"@react-native-community/datetimepicker": "^8.4.2",
- "@react-native-community/geolocation": "^3.4.0",
- "@react-native-community/image-editor": "^4.3.0",
- "@react-native-community/push-notification-ios": "^1.11.0",
"@react-native-firebase/app": "^23.2.0",
"@react-native-firebase/messaging": "^23.2.0",
- "@react-native-picker/picker": "^2.11.1",
- "@react-native/new-app-screen": "0.80.1",
"@react-navigation/native": "^7.1.17",
"@react-navigation/native-stack": "^7.3.25",
- "@shopify/react-native-skia": "^2.2.2",
"@tanstack/react-query": "^5.84.2",
"axios": "^1.11.0",
- "date-fns": "^4.1.0",
"i18next": "^25.3.2",
- "i18next-browser-languagedetector": "^8.2.0",
- "i18next-http-backend": "^3.0.2",
- "link": "^2.1.1",
"lottie-react-native": "^7.3.0",
"react": "19.1.0",
"react-hook-form": "^7.61.1",
"react-i18next": "^15.6.1",
"react-native": "^0.80.1",
"react-native-app-link": "^1.0.1",
+ "react-native-asset": "^2.1.1",
"react-native-biometrics": "^3.0.1",
"react-native-config": "^1.5.6",
"react-native-confirmation-code-field": "^8.0.1",
"react-native-device-info": "^14.0.4",
"react-native-dotenv": "^3.4.11",
- "react-native-fs": "^2.20.0",
- "react-native-geolocation-service": "^5.3.1",
- "react-native-gesture-handler": "^2.28.0",
"react-native-gesture-password": "^0.4.0",
- "react-native-haptic-feedback": "^2.3.3",
"react-native-image-crop-picker": "^0.50.1",
"react-native-image-picker": "^8.2.1",
- "react-native-keychain": "^10.0.0",
"react-native-linear-gradient": "^2.8.3",
"react-native-localize": "^3.5.1",
- "react-native-maps": "^1.25.0",
"react-native-mask-input": "^1.2.3",
- "react-native-mask-text": "^0.15.0",
"react-native-modal": "^14.0.0-rc.1",
- "react-native-modal-datetime-picker": "^18.0.0",
- "react-native-permissions": "^5.4.2",
- "react-native-photo-manipulator": "^1.9.2",
"react-native-push-notification": "^8.1.1",
"react-native-reanimated": "^4.0.2",
- "react-native-reanimated-carousel": "^4.0.2",
"react-native-safe-area-context": "^5.6.0",
- "react-native-screens": "^4.14.1",
+ "react-native-screens": "^4.15.4",
"react-native-send-intent": "^1.3.0",
- "react-native-share": "^12.2.0",
- "react-native-skia": "^0.0.1",
"react-native-smooth-pincode-input": "^1.0.9",
- "react-native-splash-screen": "^3.3.0",
"react-native-svg": "^15.12.1",
"react-native-toast-message": "^2.3.3",
- "react-native-vector-icons": "^10.3.0",
"react-native-webview": "^13.15.0",
- "react-native-worklets": "^0.4.1",
+ "react-native-worklets": "0.4.1",
"zod": "^4.0.10",
"zustand": "^5.0.6"
},
diff --git a/react-native.config.js b/react-native.config.js
new file mode 100644
index 0000000..aa0f26c
--- /dev/null
+++ b/react-native.config.js
@@ -0,0 +1,12 @@
+module.exports = {
+ project: {
+ ios: {},
+ android: {},
+ },
+ dependencies: {
+ ...(process.env.NO_FLIPPER
+ ? { 'react-native-flipper': { platforms: { ios: null } } }
+ : {}),
+ },
+ assets: ['./assets/fonts'],
+};
diff --git a/src/components/AnimatedDots.tsx b/src/components/AnimatedDots.tsx
index 1f0d078..c74df06 100644
--- a/src/components/AnimatedDots.tsx
+++ b/src/components/AnimatedDots.tsx
@@ -1,66 +1,72 @@
-"use client"
+'use client';
-import React, { useEffect, useRef, useMemo, useCallback } from "react"
-import { View, Animated, StyleSheet } from "react-native"
+import React, { useCallback, useEffect, useMemo, useRef } from 'react';
+import { Animated, StyleSheet, View } from 'react-native';
const AnimatedDots = () => {
- const dot1 = useRef(new Animated.Value(0)).current
- const dot2 = useRef(new Animated.Value(0)).current
- const dot3 = useRef(new Animated.Value(0)).current
+ const dot1 = useRef(new Animated.Value(0)).current;
+ const dot2 = useRef(new Animated.Value(0)).current;
+ const dot3 = useRef(new Animated.Value(0)).current;
- const animationConfig = useMemo(() => ({
- duration: 300,
- useNativeDriver: true,
- }), []);
+ const animationConfig = useMemo(
+ () => ({
+ duration: 300,
+ useNativeDriver: true,
+ }),
+ [],
+ );
- const createTimingAnimation = useCallback((value: Animated.Value, toValue: number) => {
- return Animated.timing(value, {
- toValue,
- ...animationConfig,
- });
- }, [animationConfig]);
+ const createTimingAnimation = useCallback(
+ (value: Animated.Value, toValue: number) => {
+ return Animated.timing(value, {
+ toValue,
+ ...animationConfig,
+ });
+ },
+ [animationConfig],
+ );
- const animationSequence = useMemo(() => {
- return Animated.sequence([
- createTimingAnimation(dot1, 1),
- createTimingAnimation(dot2, 1),
- createTimingAnimation(dot3, 1),
- createTimingAnimation(dot1, 0),
- createTimingAnimation(dot2, 0),
- createTimingAnimation(dot3, 0),
- ]);
- }, [dot1, dot2, dot3, createTimingAnimation]);
+ const animationSequence = useMemo(() => {
+ return Animated.sequence([
+ createTimingAnimation(dot1, 1),
+ createTimingAnimation(dot2, 1),
+ createTimingAnimation(dot3, 1),
+ createTimingAnimation(dot1, 0),
+ createTimingAnimation(dot2, 0),
+ createTimingAnimation(dot3, 0),
+ ]);
+ }, [dot1, dot2, dot3, createTimingAnimation]);
- useEffect(() => {
- const animateDots = () => {
- Animated.loop(animationSequence).start();
- };
+ useEffect(() => {
+ const animateDots = () => {
+ Animated.loop(animationSequence).start();
+ };
- animateDots();
- }, [animationSequence]);
+ animateDots();
+ }, [animationSequence]);
- return (
-
-
-
-
-
- )
-}
+ return (
+
+
+
+
+
+ );
+};
const styles = StyleSheet.create({
- container: {
- flexDirection: 'row',
- justifyContent: 'center',
- alignItems: 'center',
- gap: 8,
- },
- dot: {
- width: 8,
- height: 8,
- borderRadius: 4,
- backgroundColor: '#28A7E8',
- },
+ container: {
+ flexDirection: 'row',
+ justifyContent: 'center',
+ alignItems: 'center',
+ gap: 8,
+ },
+ dot: {
+ width: 8,
+ height: 8,
+ borderRadius: 4,
+ backgroundColor: '#28A7E8',
+ },
});
export default AnimatedDots;
diff --git a/src/components/AnimatedScreen.tsx b/src/components/AnimatedScreen.tsx
index 24fd191..9e45cfe 100644
--- a/src/components/AnimatedScreen.tsx
+++ b/src/components/AnimatedScreen.tsx
@@ -1,71 +1,86 @@
-"use client"
+'use client';
-import React, { useEffect, useRef, useMemo, useCallback } from 'react'
-import { Animated, Easing, StyleSheet } from 'react-native'
+import React, { useCallback, useEffect, useMemo } from 'react';
+import { Animated, Easing, StyleSheet } from 'react-native';
interface AnimatedScreenProps {
- children: React.ReactNode
- keyIndex: number
+ children: React.ReactNode;
+ keyIndex: number;
}
-const AnimatedScreen: React.FC = ({ children, keyIndex }) => {
- const opacityAnim = React.useRef(new Animated.Value(1)).current // Start with opacity 1
- const slideAnim = React.useRef(new Animated.Value(0)).current // Start with no slide
+const AnimatedScreen: React.FC = ({
+ children,
+ keyIndex,
+}) => {
+ const opacityAnim = React.useRef(new Animated.Value(1)).current; // Start with opacity 1
+ const slideAnim = React.useRef(new Animated.Value(0)).current; // Start with no slide
- const animationConfig = useMemo(() => ({
+ const animationConfig = useMemo(
+ () => ({
+ duration: 150, // Further reduced
+ useNativeDriver: true,
+ }),
+ [],
+ );
+
+ const opacityAnimation = useMemo(
+ () =>
+ Animated.timing(opacityAnim, {
+ toValue: 1,
duration: 150, // Further reduced
+ easing: Easing.out(Easing.ease),
useNativeDriver: true,
- }), []);
+ }),
+ [opacityAnim],
+ );
- const opacityAnimation = useMemo(() =>
- Animated.timing(opacityAnim, {
- toValue: 1,
- duration: 150, // Further reduced
- easing: Easing.out(Easing.ease),
- useNativeDriver: true,
- }), [opacityAnim]);
+ const slideAnimation = useMemo(
+ () =>
+ Animated.timing(slideAnim, {
+ toValue: 0,
+ duration: 150, // Further reduced
+ easing: Easing.out(Easing.ease),
+ useNativeDriver: true,
+ }),
+ [slideAnim],
+ );
- const slideAnimation = useMemo(() =>
- Animated.timing(slideAnim, {
- toValue: 0,
- duration: 150, // Further reduced
- easing: Easing.out(Easing.ease),
- useNativeDriver: true,
- }), [slideAnim]);
+ const resetAnimations = useCallback(() => {
+ opacityAnim.setValue(1); // Start with full opacity
+ slideAnim.setValue(0); // Start with no slide
+ }, [opacityAnim, slideAnim]);
- const resetAnimations = useCallback(() => {
- opacityAnim.setValue(1); // Start with full opacity
- slideAnim.setValue(0); // Start with no slide
- }, [opacityAnim, slideAnim]);
+ const startAnimations = useCallback(() => {
+ // Skip animations for better performance
+ // Animated.parallel([opacityAnimation, slideAnimation]).start();
+ }, [opacityAnimation, slideAnimation]);
- const startAnimations = useCallback(() => {
- // Skip animations for better performance
- // Animated.parallel([opacityAnimation, slideAnimation]).start();
- }, [opacityAnimation, slideAnimation]);
+ useEffect(() => {
+ resetAnimations();
+ startAnimations();
+ }, [keyIndex, resetAnimations, startAnimations]);
- useEffect(() => {
- resetAnimations();
- startAnimations();
- }, [keyIndex, resetAnimations, startAnimations]);
+ const animatedStyle = useMemo(
+ () => ({
+ opacity: 1, // Always full opacity
+ transform: [
+ { translateX: 0 }, // No slide
+ ],
+ }),
+ [],
+ );
- const animatedStyle = useMemo(() => ({
- opacity: 1, // Always full opacity
- transform: [
- { translateX: 0 }, // No slide
- ],
- }), []);
-
- return (
-
- {children}
-
- )
-}
+ return (
+
+ {children}
+
+ );
+};
const styles = StyleSheet.create({
- container: {
- flex: 1,
- },
-})
+ container: {
+ flex: 1,
+ },
+});
export default AnimatedScreen;
diff --git a/src/components/AppText.tsx b/src/components/AppText.tsx
new file mode 100644
index 0000000..52d6b16
--- /dev/null
+++ b/src/components/AppText.tsx
@@ -0,0 +1,8 @@
+import React from 'react';
+import { Text, TextProps } from 'react-native';
+
+export default function AppText({ style, ...props }: TextProps) {
+ return (
+
+ );
+}
diff --git a/src/components/BottomModal.tsx b/src/components/BottomModal.tsx
index 19744df..3f07b3a 100644
--- a/src/components/BottomModal.tsx
+++ b/src/components/BottomModal.tsx
@@ -6,7 +6,6 @@ import {
Modal,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -16,6 +15,7 @@ import Clock from 'svg/Clock';
import CloseIcon from 'svg/Close';
import Location from 'svg/Location';
import Phone from 'svg/Phone';
+import AppText from './AppText';
type BottomModalProps = {
visible: boolean;
@@ -59,8 +59,8 @@ const BottomModal: React.FC = ({
- {t('Manzil')}
- {branch?.address}
+ {t('Manzil')}
+ {branch?.address}
@@ -68,8 +68,8 @@ const BottomModal: React.FC = ({
- {t('Ish vaqti')}
- {branch?.workingHours}
+ {t('Ish vaqti')}
+ {branch?.workingHours}
@@ -77,8 +77,8 @@ const BottomModal: React.FC = ({
- {t('Telefon')}
- {branch?.phone}
+ {t('Telefon')}
+ {branch?.phone}
@@ -86,8 +86,10 @@ const BottomModal: React.FC = ({
- {t('Telegram admin')}
- {branch?.telegramAdmin}
+ {t('Telegram admin')}
+
+ {branch?.telegramAdmin}
+
@@ -95,8 +97,10 @@ const BottomModal: React.FC = ({
- {t('Telegram kanal')}
- {branch?.telegramChannel}
+ {t('Telegram kanal')}
+
+ {branch?.telegramChannel}
+
@@ -154,7 +158,7 @@ const styles = StyleSheet.create({
},
label: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#000000',
},
value: {
diff --git a/src/components/CustomAlertModal.tsx b/src/components/CustomAlertModal.tsx
index d3bf138..f13a37b 100644
--- a/src/components/CustomAlertModal.tsx
+++ b/src/components/CustomAlertModal.tsx
@@ -1,34 +1,35 @@
-import React, { useMemo, useCallback } from 'react';
-import { StyleSheet, Text, useWindowDimensions, View } from 'react-native';
+import React, { useCallback, useMemo } from 'react';
+import { StyleSheet, useWindowDimensions, View } from 'react-native';
+import AppText from './AppText';
export const toastConfig = {
success: ({ text1, text2 }: { text1?: string; text2?: string }) => {
const { width: screenWidth } = useWindowDimensions();
- const scale = useMemo(() => screenWidth < 360 ? 0.85 : 1, [screenWidth]);
+ const scale = useMemo(() => (screenWidth < 360 ? 0.85 : 1), [screenWidth]);
- const containerStyle = useMemo(() => [
- styles.toastContainer,
- { padding: 10 * scale }
- ], [scale]);
+ const containerStyle = useMemo(
+ () => [styles.toastContainer, { padding: 10 * scale }],
+ [scale],
+ );
- const text1Style = useMemo(() => [
- styles.text1,
- { fontSize: 16 * scale }
- ], [scale]);
+ const text1Style = useMemo(
+ () => [styles.text1, { fontSize: 16 * scale }],
+ [scale],
+ );
- const text2Style = useMemo(() => [
- styles.text2,
- { fontSize: 14 * scale }
- ], [scale]);
+ const text2Style = useMemo(
+ () => [styles.text2, { fontSize: 14 * scale }],
+ [scale],
+ );
const renderText2 = useCallback(() => {
if (!text2) return null;
- return {text2};
+ return {text2};
}, [text2, text2Style]);
return (
- {text1}
+ {text1}
{renderText2()}
);
diff --git a/src/components/DatePicker.tsx b/src/components/DatePicker.tsx
index a70db80..dc9214e 100644
--- a/src/components/DatePicker.tsx
+++ b/src/components/DatePicker.tsx
@@ -4,10 +4,10 @@ import {
Modal,
Platform,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
+import AppText from './AppText';
type Props = {
value: Date;
@@ -55,7 +55,7 @@ const DatePickerInput = ({
onPress={handleClosePicker}
style={styles.doneButton}
>
- Done
+ Done
@@ -113,7 +113,7 @@ const styles = StyleSheet.create({
color: '#555',
},
boldText: {
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
modalContainer: {
flex: 1,
@@ -133,7 +133,7 @@ const styles = StyleSheet.create({
},
doneText: {
color: '#007AFF',
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
fontSize: 16,
},
});
diff --git a/src/components/FileDrop.tsx b/src/components/FileDrop.tsx
index 6deb64b..b724b16 100644
--- a/src/components/FileDrop.tsx
+++ b/src/components/FileDrop.tsx
@@ -1,13 +1,6 @@
import React, { useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
-import {
- Alert,
- Image,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { Alert, Image, StyleSheet, TouchableOpacity, View } from 'react-native';
import {
Asset,
ImagePickerResponse,
@@ -15,6 +8,7 @@ import {
MediaType,
} from 'react-native-image-picker';
import Download from 'svg/Download';
+import AppText from './AppText';
export interface FileData {
uri: string;
@@ -107,17 +101,19 @@ const SingleFileDrop: React.FC = ({
- {title}
+ {title}
- OR
+ OR
- {t('Faylni yuklang')}
+
+ {t('Faylni yuklang')}
+
@@ -158,6 +154,7 @@ const styles = StyleSheet.create({
fontSize: 16,
fontWeight: '500',
color: '#333',
+ textAlign: 'center',
marginBottom: 10,
},
browseButton: {
@@ -169,6 +166,7 @@ const styles = StyleSheet.create({
browseButtonText: {
color: '#28A7E8',
fontSize: 14,
+ textAlign: 'center',
fontWeight: '500',
},
previewImage: {
diff --git a/src/components/GlobalModal.tsx b/src/components/GlobalModal.tsx
index 711bf50..47b1992 100644
--- a/src/components/GlobalModal.tsx
+++ b/src/components/GlobalModal.tsx
@@ -1,89 +1,88 @@
// components/GlobalModal.tsx
import React from 'react';
-import { Modal, View, Text, StyleSheet, TouchableOpacity } from 'react-native';
+import { Modal, StyleSheet, TouchableOpacity, View } from 'react-native';
import { useModalStore } from 'screens/auth/registeration/lib/modalStore';
+import AppText from './AppText';
const GlobalModal = () => {
- const {
- isVisible,
- title,
- message,
- type,
- onConfirm,
- onCancel,
- closeModal,
- } = useModalStore();
+ const { isVisible, title, message, type, onConfirm, onCancel, closeModal } =
+ useModalStore();
- return (
-
-
-
- {title}
- {message}
+ return (
+
+
+
+ {title}
+ {message}
-
- {onCancel && (
- { onCancel(); closeModal(); }}>
- Bekor qilish
-
- )}
- {
- onConfirm?.();
- closeModal();
- }}
- >
- Ok
-
-
-
-
-
- );
+
+ {onCancel && (
+ {
+ onCancel();
+ closeModal();
+ }}
+ >
+ Bekor qilish
+
+ )}
+ {
+ onConfirm?.();
+ closeModal();
+ }}
+ >
+ Ok
+
+
+
+
+
+ );
};
const styles = StyleSheet.create({
- overlay: {
- flex: 1,
- backgroundColor: 'rgba(0,0,0,0.4)',
- justifyContent: 'center',
- alignItems: 'center',
- },
- modal: {
- width: '80%',
- padding: 20,
- backgroundColor: '#fff',
- borderRadius: 10,
- elevation: 5,
- },
- title: {
- fontSize: 18,
- fontWeight: 'bold',
- marginBottom: 10,
- },
- message: {
- fontSize: 15,
- marginBottom: 20,
- },
- buttons: {
- flexDirection: 'row',
- justifyContent: 'flex-end',
- gap: 10,
- },
- cancel: {
- color: 'red',
- fontWeight: 'bold',
- marginRight: 15,
- },
- confirm: {
- color: '#007bff',
- fontWeight: 'bold',
- },
+ overlay: {
+ flex: 1,
+ backgroundColor: 'rgba(0,0,0,0.4)',
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ modal: {
+ width: '80%',
+ padding: 20,
+ backgroundColor: '#fff',
+ borderRadius: 10,
+ elevation: 5,
+ },
+ title: {
+ fontSize: 18,
+ fontWeight: 'bold',
+ marginBottom: 10,
+ },
+ message: {
+ fontSize: 15,
+ marginBottom: 20,
+ },
+ buttons: {
+ flexDirection: 'row',
+ justifyContent: 'flex-end',
+ gap: 10,
+ },
+ cancel: {
+ color: 'red',
+ fontWeight: 'bold',
+ marginRight: 15,
+ },
+ confirm: {
+ color: '#007bff',
+ fontWeight: 'bold',
+ },
});
export default GlobalModal;
diff --git a/src/components/InAppBrowser.tsx b/src/components/InAppBrowser.tsx
index dbc5794..4ee109d 100644
--- a/src/components/InAppBrowser.tsx
+++ b/src/components/InAppBrowser.tsx
@@ -1,43 +1,44 @@
-import React, { useMemo, useCallback } from 'react';
-import { Modal, StyleSheet, View, TouchableOpacity, Text } from 'react-native';
+import React, { useCallback, useMemo } from 'react';
+import { Modal, StyleSheet, TouchableOpacity, View } from 'react-native';
import { WebView } from 'react-native-webview';
+import AppText from './AppText';
type Props = {
- visible: boolean;
- url: string;
- onClose: () => void;
+ visible: boolean;
+ url: string;
+ onClose: () => void;
};
const InAppBrowser = ({ visible, url, onClose }: Props) => {
- const webViewSource = useMemo(() => ({ uri: url }), [url]);
-
- const handleClose = useCallback(() => {
- onClose();
- }, [onClose]);
+ const webViewSource = useMemo(() => ({ uri: url }), [url]);
- return (
-
-
-
- Yopish
-
-
-
-
- );
+ const handleClose = useCallback(() => {
+ onClose();
+ }, [onClose]);
+
+ return (
+
+
+
+ Yopish
+
+
+
+
+ );
};
const styles = StyleSheet.create({
- container: { flex: 1 },
- closeButton: {
- padding: 10,
- backgroundColor: '#28A7E8',
- alignItems: 'center',
- },
- closeText: {
- color: 'white',
- fontSize: 16,
- },
+ container: { flex: 1 },
+ closeButton: {
+ padding: 10,
+ backgroundColor: '#28A7E8',
+ alignItems: 'center',
+ },
+ closeText: {
+ color: 'white',
+ fontSize: 16,
+ },
});
export default InAppBrowser;
diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx
index 4b1bd53..650d03d 100644
--- a/src/components/Navbar.tsx
+++ b/src/components/Navbar.tsx
@@ -5,8 +5,8 @@ import {
Dimensions,
Image,
Linking,
+ Platform,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -16,6 +16,7 @@ import Logo from 'screens/../../assets/bootsplash/logo.png';
import Bell from 'svg/Bell';
import Instagram from 'svg/Instagram';
import Telegram from 'svg/Telegram';
+import AppText from './AppText';
import InAppBrowser from './InAppBrowser';
const { width } = Dimensions.get('window');
@@ -77,7 +78,7 @@ const Navbar = () => {
- CPOST
+ CPOST
@@ -96,13 +97,14 @@ const Navbar = () => {
size={iconSizes.facebook}
/>
*/}
-
- navigation.navigate('Notifications')}
- >
-
- {/* */}
-
+ {Platform.OS === 'android' && (
+ navigation.navigate('Notifications')}
+ >
+
+ {/* */}
+
+ )}
diff --git a/src/components/NavbarBack.tsx b/src/components/NavbarBack.tsx
index 30af8cf..0491c50 100644
--- a/src/components/NavbarBack.tsx
+++ b/src/components/NavbarBack.tsx
@@ -1,9 +1,10 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import * as React from 'react';
-import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import { StyleSheet, TouchableOpacity, View } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import ArrowLeft from 'svg/ArrowLeft';
+import AppText from './AppText';
interface NavbarBackProps {
title: string;
@@ -17,7 +18,7 @@ const NavbarBack = ({ title }: NavbarBackProps) => {
navigation.goBack()}>
- {title}
+ {title}
);
};
@@ -36,7 +37,7 @@ const styles = StyleSheet.create({
headerTitle: {
color: '#fff',
fontSize: 20,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
marginLeft: 8,
},
});
diff --git a/src/components/Navigation.tsx b/src/components/Navigation.tsx
index 29c613b..c2ff538 100644
--- a/src/components/Navigation.tsx
+++ b/src/components/Navigation.tsx
@@ -2,13 +2,7 @@ import { useNavigation, useRoute } from '@react-navigation/native';
import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
import React, { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import {
- Dimensions,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { Dimensions, StyleSheet, TouchableOpacity, View } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import HomeIcon from 'svg/HomeIcon';
@@ -16,6 +10,7 @@ import Passport from 'svg/Passport';
import StatusIcon from 'svg/StatusIcon';
import User from 'svg/User';
import Wallet from 'svg/Wallet';
+import AppText from './AppText';
const { width } = Dimensions.get('window');
const isSmallScreen = width < 360;
@@ -65,7 +60,7 @@ const Navigation = () => {
activeOpacity={0.7}
>
- {
}}
>
{t(label)}
-
+
);
},
diff --git a/src/components/NoResult.tsx b/src/components/NoResult.tsx
index f5896f9..ed29a98 100644
--- a/src/components/NoResult.tsx
+++ b/src/components/NoResult.tsx
@@ -1,14 +1,9 @@
import LottieView from 'lottie-react-native';
import React, { useEffect, useRef } from 'react';
import { useTranslation } from 'react-i18next';
-import {
- Animated,
- StyleSheet,
- Text,
- useWindowDimensions,
- View,
-} from 'react-native';
+import { Animated, StyleSheet, useWindowDimensions, View } from 'react-native';
import ProgressBar from 'screens/../../assets/lottie/Empty box.json';
+import AppText from './AppText';
interface Props {
message?: string;
@@ -58,7 +53,7 @@ const NoResult: React.FC = ({
resizeMode="cover"
style={{ width: 250 * scale, height: 250 * scale }}
/>
- {t(message)}
+ {t(message)}
);
};
diff --git a/src/components/Pagination.tsx b/src/components/Pagination.tsx
index fd6e787..96f695e 100644
--- a/src/components/Pagination.tsx
+++ b/src/components/Pagination.tsx
@@ -1,8 +1,9 @@
// components/Pagination.tsx
import React from 'react';
-import { Text, TouchableOpacity, View } from 'react-native';
+import { TouchableOpacity, View } from 'react-native';
import ArrowLeft from 'svg/ArrowLeft';
import ArrowRightUnderline from 'svg/ArrowRightUnderline';
+import AppText from './AppText';
interface PaginationProps {
page: number; // current page (0-based)
@@ -52,9 +53,9 @@ const Pagination: React.FC = ({
return pages.map((p, index) => {
if (p === '...') {
return (
-
+
...
-
+
);
}
return (
@@ -71,9 +72,9 @@ const Pagination: React.FC = ({
marginHorizontal: 5,
}}
>
-
+
{(p as number) + 1}
-
+
);
});
diff --git a/src/components/SplashScreen.tsx b/src/components/SplashScreen.tsx
index 3d7abc9..b4011b4 100644
--- a/src/components/SplashScreen.tsx
+++ b/src/components/SplashScreen.tsx
@@ -3,11 +3,11 @@ import {
Animated,
Image,
StyleSheet,
- Text,
useWindowDimensions,
View,
} from 'react-native';
import Logo from 'screens/../../assets/bootsplash/logo.png';
+import AppText from './AppText';
const SplashScreen = ({ onFinish }: { onFinish: () => void }) => {
const { width: screenWidth, height: screenHeight } = useWindowDimensions();
@@ -136,9 +136,9 @@ const SplashScreen = ({ onFinish }: { onFinish: () => void }) => {
resizeMode="contain"
/>
-
+
CPOST
-
+
diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json
index 5f5f531..6c8cba9 100644
--- a/src/i18n/locales/ru.json
+++ b/src/i18n/locales/ru.json
@@ -172,6 +172,9 @@
"Yopish": "Закрыть",
"Manzilingizni kiriting": "Введите свой адрес",
"Toshkent Shahri, Mirzo Ulug'bek tumani...": "г. Ташкент, Мирзо-Улугбекский район...",
+ "Hurmatli mijoz, ushbu berilgan ID manzil, ma'lumotlarni siz shu namunadagidek 1- va 4- qatorlarga oʻz ID kodingizni yozing! Aks holda sizning kargoingiz bilan muammo chiqishi mumkin.": "Уважаемый клиент, пожалуйста, введите свой ID-код в строки 1 и 4, как показано в этом примере, с данным ID-адресом и информацией! В противном случае может возникнуть проблема с вашим грузом.",
+ "Ilovaga kirib huddi shunday to’ldirganingizdan keyin ekranni rasmga(skrinshot) olib, sizga bot tomonidan berilgan ID kod vamanzilni ushbu": "После того, как вы вошли в приложение и заполнили его таким же образом, сделайте снимок экрана и запишите код удостоверения личности и адрес, предоставленные вам ботом, в",
+ "admindan tasdiqlatib olishingiz kerak bo’ladi.": "вам нужно будет получить подтверждение от администратора.",
"Passportlarim": "Мои паспорта",
"Hali pasport qo'shilmagan": "Паспорт еще не добавлен",
"Yangi pasport qo'shish uchun tugmani bosing": "Нажмите кнопку, чтобы добавить новый паспорт",
diff --git a/src/i18n/locales/uz.json b/src/i18n/locales/uz.json
index 1f48be5..faebc8f 100644
--- a/src/i18n/locales/uz.json
+++ b/src/i18n/locales/uz.json
@@ -18,7 +18,10 @@
"Ro'yxatdan o'tish": "Ro'yxatdan o'tish",
"Manzilingizni kiriting": "Manzilingizni kiriting",
"Toshkent Shahri, Mirzo Ulug'bek tumani...": "Toshkent Shahri, Mirzo Ulug'bek tumani...",
+ "Hurmatli mijoz, ushbu berilgan ID manzil, ma'lumotlarni siz shu namunadagidek 1- va 4- qatorlarga oʻz ID kodingizni yozing! Aks holda sizning kargoingiz bilan muammo chiqishi mumkin.": "Hurmatli mijoz, ushbu berilgan ID manzil, ma'lumotlarni siz shu namunadagidek 1- va 4- qatorlarga oʻz ID kodingizni yozing! Aks holda sizning kargoingiz bilan muammo chiqishi mumkin.",
+ "Ilovaga kirib huddi shunday to’ldirganingizdan keyin ekranni rasmga(skrinshot) olib, sizga bot tomonidan berilgan ID kod vamanzilni ushbu": "Ilovaga kirib huddi shunday to’ldirganingizdan keyin ekranni rasmga(skrinshot) olib, sizga bot tomonidan berilgan ID kod vamanzilni ushbu",
"Ism": "Ism",
+ "admindan tasdiqlatib olishingiz kerak bo’ladi.": "admindan tasdiqlatib olishingiz kerak bo’ladi.",
"Ismingiz": "Ismingiz",
"Familiya": "Familiya",
"Familiyangiz": "Familiyangiz",
diff --git a/src/screens/auth/login/ui/Confirm.tsx b/src/screens/auth/login/ui/Confirm.tsx
index fd31210..c4575ad 100644
--- a/src/screens/auth/login/ui/Confirm.tsx
+++ b/src/screens/auth/login/ui/Confirm.tsx
@@ -6,6 +6,8 @@ import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useMutation } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import { otpPayload, resendPayload } from 'api/auth/type';
+import AppText from 'components/AppText';
+import formatPhone from 'helpers/formatPhone';
import React, { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -14,7 +16,6 @@ import {
KeyboardAvoidingView,
Platform,
StyleSheet,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -156,10 +157,10 @@ const Confirm = () => {
style={Loginstyle.background}
resizeMode="contain"
imageStyle={{
- opacity: 0.3,
+ opacity: 0.1,
height: '100%',
width: '100%',
- transform: [{ scale: 1.5 }],
+ transform: [{ scale: 1 }],
}}
>
@@ -174,11 +175,13 @@ const Confirm = () => {
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
>
- {t('Tasdiqlash kodini kiriting')}
-
- {phoneNumber} {t('raqamiga yuborilgan')} {OTP_LENGTH}{' '}
+
+ {t('Tasdiqlash kodini kiriting')}
+
+
+ {formatPhone(phoneNumber)} {t('raqamiga yuborilgan')} {OTP_LENGTH}{' '}
{t('xonali kodni kiriting.')}{' '}
-
+
{code.map((digit, index) => (
{
))}
{errorConfirm && (
- {errorConfirm}
+ {errorConfirm}
)}
{canResend ? (
@@ -203,14 +206,14 @@ const Confirm = () => {
onPress={handleResendCode}
style={styles.resendButton}
>
-
+
{t('Kodni qayta yuborish')}
-
+
) : (
-
+
{t('Kodni qayta yuborish vaqti')} ({timer}s)
-
+
)}
{
{isPending ? (
) : (
-
{t('Tasdiqlash')}
-
+
)}
diff --git a/src/screens/auth/login/ui/index.tsx b/src/screens/auth/login/ui/index.tsx
index 6e2b373..25d22c4 100644
--- a/src/screens/auth/login/ui/index.tsx
+++ b/src/screens/auth/login/ui/index.tsx
@@ -7,6 +7,7 @@ import { useMutation, useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import { loginPayload } from 'api/auth/type';
import { Branch, branchApi } from 'api/branch';
+import AppText from 'components/AppText';
import formatPhone from 'helpers/formatPhone';
import React, {
useCallback,
@@ -23,7 +24,6 @@ import {
KeyboardAvoidingView,
Platform,
ScrollView,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -156,10 +156,10 @@ const Login = () => {
style={Loginstyle.background}
resizeMode="contain"
imageStyle={{
- opacity: 0.3,
+ opacity: 0.1,
height: '100%',
width: '100%',
- transform: [{ scale: 1.5 }],
+ transform: [{ scale: 1 }],
}}
>
@@ -176,7 +176,9 @@ const Login = () => {
- {t('Tizimga kirish')}
+
+ {t('Tizimga kirish')}
+
{
const formatted = formatPhone(rawPhone);
return (
-
+
{t('Telefon raqami')}
-
+
{
maxLength={19} // +998 90 123-45-67 bo'lishi uchun
/>
{errors.phone && (
-
+
{t(errors.phone.message || '')}
-
+
)}
);
}}
/>
-
+
{t('Passport seriya raqami')}
-
+
{
/>
{(errors.passportSeriya || errors.passportNumber) && (
-
+
{t(errors.passportSeriya?.message || '') ||
t(errors.passportNumber?.message || '')}
-
+
)}
@@ -263,7 +265,7 @@ const Login = () => {
name="branchId"
render={({ field: { value } }) => (
- {t('Filial')}
+ {t('Filial')}
{
setFilialDropdownVisible(prev => !prev)
}
>
- {
>
{branchList?.find(e => e.id === value)?.name ||
t('Filialni tanlang...')}
-
+
{filialDropdownVisible ? (
) : (
@@ -301,21 +303,23 @@ const Login = () => {
setFilialDropdownVisible(false);
}}
>
-
+
{item.name}
-
+
))}
)}
{errors.branchId && (
-
+
{t(errors.branchId.message || '')}
-
+
)}
{error && (
- {t(error)}
+
+ {t(error)}
+
)}
)}
@@ -328,9 +332,9 @@ const Login = () => {
{isPending ? (
) : (
-
+
{t('Tizimga kirish')}
-
+
)}
{
alignItems: 'center',
}}
>
-
+
{t('ID va kabinet yo’qmi?')}
-
+
navigation.navigate('Register')}
>
- {
}}
>
{t('Ro’yxatdan o’tish')}
-
+
diff --git a/src/screens/auth/login/ui/styled.ts b/src/screens/auth/login/ui/styled.ts
index db5a7fd..3b700e8 100644
--- a/src/screens/auth/login/ui/styled.ts
+++ b/src/screens/auth/login/ui/styled.ts
@@ -36,16 +36,16 @@ export const Loginstyle = StyleSheet.create({
position: 'relative',
},
label: {
- fontSize: 12,
+ fontSize: 14,
fontWeight: '500',
- color: '#28A7E8',
+ color: '#252525ff',
marginBottom: 5,
},
title: {
fontSize: 24,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
textAlign: 'center',
- color: '#28A7E8',
+ color: '#000',
marginBottom: 20,
},
input: {
diff --git a/src/screens/auth/registeration/ui/Confirm.tsx b/src/screens/auth/registeration/ui/Confirm.tsx
index cb63e6d..754ee69 100644
--- a/src/screens/auth/registeration/ui/Confirm.tsx
+++ b/src/screens/auth/registeration/ui/Confirm.tsx
@@ -6,6 +6,8 @@ import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useMutation } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import { otpPayload, resendPayload } from 'api/auth/type';
+import AppText from 'components/AppText';
+import formatPhone from 'helpers/formatPhone';
import React, { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -14,7 +16,6 @@ import {
KeyboardAvoidingView,
Platform,
StyleSheet,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -166,10 +167,10 @@ const Confirm = ({
style={RegisterStyle.background}
resizeMode="contain"
imageStyle={{
- opacity: 0.3,
+ opacity: 0.1,
height: '100%',
width: '100%',
- transform: [{ scale: 1.5 }],
+ transform: [{ scale: 1 }],
}}
>
@@ -184,11 +185,13 @@ const Confirm = ({
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
>
- {t('Tasdiqlash kodini kiriting')}
-
- {phoneNumber} {t('raqamiga yuborilgan')} {OTP_LENGTH}{' '}
+
+ {t('Tasdiqlash kodini kiriting')}
+
+
+ {formatPhone(phoneNumber)} {t('raqamiga yuborilgan')} {OTP_LENGTH}{' '}
{t('xonali kodni kiriting.')}
-
+
{code.map((digit, index) => (
{errorConfirm !== null && (
- {errorConfirm}
+ {errorConfirm}
)}
{canResend ? (
@@ -215,14 +218,14 @@ const Confirm = ({
onPress={handleResendCode}
style={styles.resendButton}
>
-
+
{t('Kodni qayta yuborish')}
-
+
) : (
-
+
{t('Kodni qayta yuborish vaqti')} ({timer}s)
-
+
)}
) : (
-
{t('Tasdiqlash')}
-
+
)}
@@ -350,7 +353,7 @@ const styles = StyleSheet.create({
verifyButtonText: {
color: '#fff',
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/auth/registeration/ui/FirstStep.tsx b/src/screens/auth/registeration/ui/FirstStep.tsx
index 0082335..9698ba9 100644
--- a/src/screens/auth/registeration/ui/FirstStep.tsx
+++ b/src/screens/auth/registeration/ui/FirstStep.tsx
@@ -13,6 +13,7 @@ import { useMutation, useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import { registerPayload } from 'api/auth/type';
import { Branch, branchApi } from 'api/branch';
+import AppText from 'components/AppText';
import formatPhone from 'helpers/formatPhone';
import { useEffect, useState } from 'react';
import { Controller, useForm } from 'react-hook-form';
@@ -24,7 +25,6 @@ import {
KeyboardAvoidingView,
Platform,
ScrollView,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -194,10 +194,10 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
style={RegisterStyle.background}
resizeMode="contain"
imageStyle={{
- opacity: 0.3,
+ opacity: 0.1,
height: '100%',
width: '100%',
- transform: [{ scale: 1.5 }],
+ transform: [{ scale: 1 }],
}}
>
@@ -217,16 +217,16 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
>
-
+
{t("Ro'yxatdan o'tish")}
-
+
(
- {t('Ism')}
+ {t('Ism')}
void }) => {
placeholderTextColor={'#D8DADC'}
/>
{errors.firstName && (
-
+
{t(errors.firstName.message || '')}
-
+
)}
)}
@@ -247,7 +247,9 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
name="lastName"
render={({ field: { onChange, value } }) => (
- {t('Familiya')}
+
+ {t('Familiya')}{' '}
+
void }) => {
value={value}
/>
{errors.lastName && (
-
+
{t(errors.lastName.message || '')}
-
+
)}
)}
@@ -270,9 +272,9 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
const formatted = formatPhone(rawPhone);
return (
-
+
{t('Telefon raqami')}
-
+
void }) => {
maxLength={17}
/>
{errors.phoneNumber && (
-
+
{t(errors.phoneNumber.message || '')}
-
+
)}
);
@@ -303,7 +305,9 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
name="branchId"
render={({ field: { value } }) => (
- {t('Filial')}
+
+ {t('Filial')}{' '}
+
void }) => {
setFilialDropdownVisible(prev => !prev)
}
>
- void }) => {
>
{branchList?.find(e => e.id === value)?.name ||
t('Filialni tanlang...')}
-
+
{filialDropdownVisible ? (
) : (
@@ -343,18 +347,20 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
setFilialDropdownVisible(false);
}}
>
-
+
{item.name}
-
+
))}
)}
{errors.branchId && (
-
+
{t(errors.branchId.message || '')}
-
+
)}
)}
@@ -364,9 +370,9 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
name="address"
render={({ field: { onChange, value } }) => (
-
+
{t('Manzilingizni kiriting')}
-
+
void }) => {
value={value}
/>
{errors.lastName && (
-
+
{t(errors.lastName.message || '')}
-
+
)}
)}
@@ -389,9 +395,9 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
name="recommend"
render={({ field: { value } }) => (
-
+
{t('Bizni qaerdan topdingiz?')}
-
+
void }) => {
setRecommendedDropdownVisible(prev => !prev)
}
>
- void }) => {
recommended.find(e => e.value === value)?.label ||
'Bizni kim tavsiya qildi...',
)}
-
+
{recommendedDropdownVisible ? (
) : (
@@ -432,23 +438,23 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
setRecommendedDropdownVisible(false);
}}
>
-
+
{t(item.label)}
-
+
))}
)}
{errors.recommend && (
-
+
{t(errors.recommend.message || '')}
-
+
)}
{error && (
-
+
{t(error)}
-
+
)}
)}
@@ -491,10 +497,10 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
)}
-
- {t('Foydalanish shartlari')}
- {t('bilan tanishib chiqdim!')}
-
+
+ {t('Foydalanish shartlari')}
+ {t('bilan tanishib chiqdim!')}
+
@@ -511,7 +517,7 @@ const FirstStep = ({ onNext }: { onNext: () => void }) => {
{isPending ? (
) : (
- void }) => {
]}
>
{t('Davom etish')}
-
+
)}
diff --git a/src/screens/auth/registeration/ui/SecondStep.tsx b/src/screens/auth/registeration/ui/SecondStep.tsx
index 1803a2a..768cd9f 100644
--- a/src/screens/auth/registeration/ui/SecondStep.tsx
+++ b/src/screens/auth/registeration/ui/SecondStep.tsx
@@ -9,6 +9,7 @@ import {
import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useMutation } from '@tanstack/react-query';
import passportApi, { sendPassportPayload } from 'api/passport';
+import AppText from 'components/AppText';
import DatePickerInput from 'components/DatePicker';
import SingleFileDrop from 'components/FileDrop';
import { useEffect, useRef, useState } from 'react';
@@ -23,7 +24,6 @@ import {
KeyboardAvoidingView,
Platform,
ScrollView,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -130,10 +130,10 @@ const SecondStep = () => {
style={RegisterStyle.background}
resizeMode="contain"
imageStyle={{
- opacity: 0.3,
+ opacity: 0.1,
height: '100%',
width: '100%',
- transform: [{ scale: 1.5 }],
+ transform: [{ scale: 1 }],
}}
>
@@ -151,9 +151,9 @@ const SecondStep = () => {
-
+
{t('Shaxsiy maʼlumotlar')}
-
+
{
/>
{/* PASSPORT */}
-
+
{t('Passport seriya raqami')}
-
+
{
/>
{(errors.passportSeriya || errors.passportNumber) && (
-
+
{t(errors.passportSeriya?.message || '') ||
t(errors.passportNumber?.message || '')}
-
+
)}
{/* JSHSHIR */}
@@ -223,7 +223,9 @@ const SecondStep = () => {
name="jshshir"
render={({ field: { onChange, value } }) => (
- {t('JSHSHIR')}
+
+ {t('JSHSHIR')}{' '}
+
{
}
/>
{errors.jshshir && (
-
+
{t(errors.jshshir.message || '')}
-
+
)}
)}
@@ -250,9 +252,9 @@ const SecondStep = () => {
name="birthDate"
render={({ field: { onChange, value } }) => (
-
+
{t("Tug'ilgan sana")}
-
+
{
{errors.birthDate && (
-
+
{t(errors.birthDate?.message || '')}
-
+
)}
)}
@@ -358,9 +360,9 @@ const SecondStep = () => {
/>
{/* FILE UPLOAD */}
-
+
{t('Passport/ID karta rasmi yoki faylni yuklang')}
-
+
{
{isPending ? (
) : (
-
{t('Tasdiqlash')}
-
+
)}
diff --git a/src/screens/auth/registeration/ui/TermsAndConditions.tsx b/src/screens/auth/registeration/ui/TermsAndConditions.tsx
index 9e29400..c6e93f3 100644
--- a/src/screens/auth/registeration/ui/TermsAndConditions.tsx
+++ b/src/screens/auth/registeration/ui/TermsAndConditions.tsx
@@ -1,14 +1,9 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
-import {
- ScrollView,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import ArrowLeft from 'svg/ArrowLeft';
import { RootStackParamList } from 'types/types';
@@ -32,47 +27,53 @@ const TermsAndConditions = () => {
navigation.goBack()}>
- {t('Foydalanish shartlari')}
+
+ {t('Foydalanish shartlari')}
+
-
+
{t('foydalanish_shartlari_va_qoidalari')}
-
+
- {t('umumiy_qoidalar')}
- {t('umumiy_qoidalar_text')}
+ {t('umumiy_qoidalar')}
+ {t('umumiy_qoidalar_text')}
-
+
{t('foydalanuvchi_majburiyatlari')}
-
-
+
+
{t('foydalanuvchi_majburiyatlari_text')}
-
+
- {t('maxfiylik_siyosati')}
- {t('maxfiylik_siyosati_text')}
+ {t('maxfiylik_siyosati')}
+ {t('maxfiylik_siyosati_text')}
- {t('javobgarlik')}
- {t('javobgarlik_text')}
+ {t('javobgarlik')}
+ {t('javobgarlik_text')}
- {t('shartlarni_ozgartirish')}
- {t('shartlarni_ozgartirish_text')}
+
+ {t('shartlarni_ozgartirish')}
+
+
+ {t('shartlarni_ozgartirish_text')}
+
- {t('aloqa')}
- {t('aloqa_text')}
+ {t('aloqa')}
+ {t('aloqa_text')}
-
+
{t('oxirgi_yangilanish')} {new Date().toLocaleDateString('uz-UZ')}
-
+
- {t('roziman')}
+ {t('roziman')}
@@ -95,7 +96,7 @@ const styles = StyleSheet.create({
},
headerTitle: {
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#000',
},
content: {
@@ -111,7 +112,7 @@ const styles = StyleSheet.create({
},
sectionTitle: {
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#000',
marginTop: 20,
marginBottom: 10,
@@ -148,7 +149,7 @@ const styles = StyleSheet.create({
agreeButtonText: {
color: '#fff',
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/auth/registeration/ui/styled.ts b/src/screens/auth/registeration/ui/styled.ts
index e19188b..be37738 100644
--- a/src/screens/auth/registeration/ui/styled.ts
+++ b/src/screens/auth/registeration/ui/styled.ts
@@ -39,20 +39,20 @@ export const RegisterStyle = StyleSheet.create({
mainTitle: {
fontSize: 16,
fontWeight: '500',
- color: '#28A7E8',
+ color: '#252525ff',
marginBottom: 10,
},
label: {
- fontSize: 12,
+ fontSize: 14,
fontWeight: '500',
- color: '#28A7E8',
+ color: '#252525ff',
marginBottom: 5,
},
title: {
fontSize: 24,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
textAlign: 'center',
- color: '#28A7E8',
+ color: '#000',
marginBottom: 20,
},
errorText: {
@@ -168,7 +168,7 @@ export const RegisterStyle = StyleSheet.create({
},
termsLink: {
color: '#28A7E8',
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
textDecorationLine: 'underline',
fontSize: 15,
},
diff --git a/src/screens/auth/select-auth/SelectAuth.tsx b/src/screens/auth/select-auth/SelectAuth.tsx
index 684df7f..f68b6e6 100644
--- a/src/screens/auth/select-auth/SelectAuth.tsx
+++ b/src/screens/auth/select-auth/SelectAuth.tsx
@@ -1,17 +1,18 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import { useTranslation } from 'react-i18next';
import {
Image,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
useWindowDimensions,
} from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import Logo from 'screens/../../assets/bootsplash/logo_512.png';
+import InfoIcon from 'svg/Info';
import { RootStackParamList } from 'types/types';
type LoginScreenNavigationProp = NativeStackNavigationProp<
@@ -44,36 +45,66 @@ const SelectAuth = () => {
},
]}
/>
- CPOST
+ {/* CPOST */}
-
+
{t('Ro’yxatdan o’tganmisz')}
-
+
-
-
- {t("Botdan ro'yxatdan o’tganmisiz")}
-
+
navigation.navigate('Login')}
- style={styles.button}
+ style={[
+ styles.button,
+ {
+ backgroundColor: 'none',
+ borderWidth: 1,
+ borderColor: '#28A7E8',
+ },
+ ]}
>
- {t('Tizimga kirish')}
+
+ {t('Tizimga kirish')}
+
+
+
+
+ {t("Botdan ro'yxatdan o’tganmisiz")}?
+
+
-
-
-
- {t("Yangi ro’yxatdan o'tmoqchimisiz")}
-
+
navigation.navigate('Register')}
style={styles.button}
>
- {t('Ro’yxatdan o’tish')}
+
+ {t('Ro’yxatdan o’tish')}
+
+
+
+
+ {t("Yangi ro’yxatdan o'tmoqchimisiz")}?
+
+
@@ -110,18 +141,17 @@ const styles = StyleSheet.create({
},
logoText: {
fontWeight: '500',
- marginTop: 4,
color: '#28A7E8',
},
title: {
- fontWeight: '500',
+ fontFamily: 'GolosText-Bold',
textAlign: 'center',
- color: '#28A7E8',
+ color: '#000',
marginBottom: 20,
},
helperText: {
- color: '#28A7E8',
- fontSize: 16,
+ color: '#252525ff',
+ fontSize: 12,
},
button: {
backgroundColor: '#28A7E8',
diff --git a/src/screens/auth/select-language/SelectLang.tsx b/src/screens/auth/select-language/SelectLang.tsx
index 896332e..33a4ca8 100644
--- a/src/screens/auth/select-language/SelectLang.tsx
+++ b/src/screens/auth/select-language/SelectLang.tsx
@@ -1,6 +1,7 @@
+import AppText from 'components/AppText';
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
-import { Image, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import { Image, StyleSheet, TouchableOpacity, View } from 'react-native';
import RU from 'screens/../../assets/bootsplash/RU.png';
import UZ from 'screens/../../assets/bootsplash/UZ.png';
import ArrowDown from 'svg/ArrowDown';
@@ -42,7 +43,7 @@ const LanguageSelector = () => {
source={selectedLang?.Icon}
style={{ width: 20, height: 20, objectFit: 'contain' }}
/>
- {selectedLang?.label}
+ {selectedLang?.label}
{dropdownVisible ? (
@@ -63,7 +64,7 @@ const LanguageSelector = () => {
source={item.Icon}
style={{ width: 25, height: 25, objectFit: 'contain' }}
/>
- {item.label}
+ {item.label}
))}
diff --git a/src/screens/auth/select-language/SelectLangPage.tsx b/src/screens/auth/select-language/SelectLangPage.tsx
index d0814c5..dfc9951 100644
--- a/src/screens/auth/select-language/SelectLangPage.tsx
+++ b/src/screens/auth/select-language/SelectLangPage.tsx
@@ -1,11 +1,11 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import React from 'react';
import {
Image,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -46,15 +46,17 @@ const SelectLangPage = () => {
},
]}
/>
- CPOST
+
+ CPOST
+
-
+
Tilni tanlang{' '}
-
+
(Выберите язык)
-
-
+
+
{
style={styles.button}
>
- O'zbek tili
+ O'zbek tili
{
style={styles.button}
>
- Русский язык
+ Русский язык
diff --git a/src/screens/authGate/ui/AuthGate.tsx b/src/screens/authGate/ui/AuthGate.tsx
index f795efc..8dcbb4b 100644
--- a/src/screens/authGate/ui/AuthGate.tsx
+++ b/src/screens/authGate/ui/AuthGate.tsx
@@ -1,6 +1,7 @@
import AsyncStorage from '@react-native-async-storage/async-storage';
+import AppText from 'components/AppText';
import React, { useEffect, useState } from 'react';
-import { Alert, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import { Alert, StyleSheet, TouchableOpacity, View } from 'react-native';
import ReactNativeBiometrics from 'react-native-biometrics';
import GesturePassword from 'react-native-gesture-password';
@@ -79,7 +80,7 @@ const LockScreen = ({ onAuthenticated }: Props) => {
return (
- Unlock
+ Unlock
{lockType === 'pattern' ? (
{
style={styles.button}
onPress={() => handleUnlockPasswordOrPin(password)}
>
-
+
Unlock with {lockType.toUpperCase()}
-
+
)}
@@ -113,7 +114,7 @@ const LockScreen = ({ onAuthenticated }: Props) => {
} catch (e) {}
}}
>
- Unlock with Biometrics
+ Unlock with Biometrics
)}
diff --git a/src/screens/home/branches/ui/Branches.tsx b/src/screens/home/branches/ui/Branches.tsx
index d5d62da..9328399 100644
--- a/src/screens/home/branches/ui/Branches.tsx
+++ b/src/screens/home/branches/ui/Branches.tsx
@@ -2,18 +2,13 @@ import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useQuery } from '@tanstack/react-query';
import { branchApi } from 'api/branch';
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import NavbarBack from 'components/NavbarBack';
import NoResult from 'components/NoResult';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
-import {
- ScrollView,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import ArrowRightUnderline from 'svg/ArrowRightUnderline';
@@ -67,8 +62,8 @@ const Branches = (props: BranchesProps) => {
alignItems: 'flex-start',
}}
>
- {e.name}
- {e.address}
+ {e.name}
+ {e.address}
@@ -107,7 +102,7 @@ const styles = StyleSheet.create({
title: {
fontSize: 16,
paddingHorizontal: 5,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#000',
marginBottom: 6,
},
diff --git a/src/screens/home/branches/ui/ListBranches.tsx b/src/screens/home/branches/ui/ListBranches.tsx
index 795fb09..ae75b7c 100644
--- a/src/screens/home/branches/ui/ListBranches.tsx
+++ b/src/screens/home/branches/ui/ListBranches.tsx
@@ -2,12 +2,13 @@ import { RouteProp, useNavigation, useRoute } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useQuery } from '@tanstack/react-query';
import { Branch, branchApi } from 'api/branch';
+import AppText from 'components/AppText';
import BottomModal from 'components/BottomModal';
import LayoutTwo from 'components/LayoutTwo';
import LoadingScreen from 'components/LoadingScreen';
import React, { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
-import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import { StyleSheet, TouchableOpacity, View } from 'react-native';
import WebView from 'react-native-webview';
import Minus from 'svg/Minus';
import Plus from 'svg/Plus';
@@ -174,25 +175,27 @@ const ListBranches = () => {
style={styles.zoomButton}
onPress={() => handleZoom('in')}
>
-
+
-
+
handleZoom('out')}
>
-
+
-
+
navigation.navigate('Branches')}
>
- {t('Manzilni tekshirish')}
+
+ {t('Manzilni tekshirish')}
+
)}
@@ -242,7 +245,7 @@ const styles = StyleSheet.create({
},
buttonText: {
color: '#fff',
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
fontSize: 16,
textAlign: 'center',
},
diff --git a/src/screens/home/cargoPrices/ui/CargoPrices.tsx b/src/screens/home/cargoPrices/ui/CargoPrices.tsx
index de1665a..c2e5dbe 100644
--- a/src/screens/home/cargoPrices/ui/CargoPrices.tsx
+++ b/src/screens/home/cargoPrices/ui/CargoPrices.tsx
@@ -2,16 +2,11 @@ import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useQuery } from '@tanstack/react-query';
import reference_api from 'api/reference';
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
-import {
- ScrollView,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { ScrollView, StyleSheet, TouchableOpacity, View } from 'react-native';
import Tabs from '../../home/ui/Tabs';
interface CargoPricesProps {}
@@ -41,90 +36,92 @@ const CargoPrices = (props: CargoPricesProps) => {
data.map(ref => (
- {ref.title}
-
+ {ref.title}
+
{ref.price}$/{ref.unitValue}
{ref.unit}
-
+
- {ref.shortDescription}
+
+ {ref.shortDescription}
+
))}
-
+
{t(
'Avia pochtada bir maxsulotdan seriyalab olish mumkin emas',
)}
-
+
-
+
{t(
'(Bu kargo narxini o’sishiga olib keladi. Seriyali buyularni avto kargo orqali olib kelish arzonga tushadi)',
)}
-
+
-
+
{t('Yetib kelish vaqti')}
-
-
+
7-10 {t('kun')}
-
+
-
+
{t(
'Yuklarni yetib elish vaqti oxirgi qadoqlash kunidan boshlab xisoblanadi',
)}
-
+
-
+
{t('Minimal miqdor talab qilinmaydi.')}
-
+
-
+
{t(
"ya'ni, qancha gramm mahsulot olsangiz, shuncha og'irligi (gramm) uchun to'lov qilasiz.",
)}
-
+
-
+
{t('Muhim!')}
-
+
-
+
{t('Filiallargacha yetkazib berish - bepul.')}
-
+
-
+
{t('Batafsil')}: @CPcargo_admin
-
+
-
+
{t(
"Agar siz yashayotgan hududda bizning filialimiz mavjud bo'lmasa, o'zingizga eng yaqin bo'lgan filialni tanlab, ro'yhatdan o'tishingiz mumkin.",
)}
-
+
navigation.navigate('ListBranches')}
>
-
+
{t("Filiallarimiz ro'yhati ilovada mavjud")}
-
+
)}
@@ -134,83 +131,85 @@ const CargoPrices = (props: CargoPricesProps) => {
data.map(ref => (
- {ref.title}
-
+ {ref.title}
+
{ref.price}$/{ref.unitValue}
{ref.unit}
-
+
- {ref.shortDescription}
+
+ {ref.shortDescription}
+
))}
-
+
{t(
'Avto kargoda bir maxsulotdan seriyalab istalgan katta miqdorda olish mumkin. Doimiyko’p yuk oluvchi ijozlar uchun maxsus arzonlashtrilgan narxlarimiz bor',
)}
-
+
-
+
{t('Yetib kelish vaqti')}
-
-
+
10-20 {t('kun')}
-
+
-
+
{t(
'Yuklarni yetib elish vaqti oxirgi qadoqlash kunidan boshlab xisoblanadi',
)}
-
+
-
+
{t('Minimal miqdor talab qilinmaydi.')}
-
+
-
+
{t(
"ya'ni, qancha gramm mahsulot olsangiz, shuncha og'irligi (gramm) uchun to'lov qilasiz.",
)}
-
+
-
+
{t('Muhim!')}
-
+
-
+
{t('Filiallargacha yetkazib berish - bepul.')}
-
+
-
+
{t('Batafsil')}: @CPcargo_admin
-
+
-
+
{t(
"Agar siz yashayotgan hududda bizning filialimiz mavjud bo'lmasa, o'zingizga eng yaqin bo'lgan filialni tanlab, ro'yhatdan o'tishingiz mumkin.",
)}
-
+
navigation.navigate('ListBranches')}
>
-
+
{t("Filiallarimiz ro'yhati ilovada mavjud")}
-
+
)}
diff --git a/src/screens/home/home/ui/Pages.tsx b/src/screens/home/home/ui/Pages.tsx
index 7a9e629..bceda03 100644
--- a/src/screens/home/home/ui/Pages.tsx
+++ b/src/screens/home/home/ui/Pages.tsx
@@ -1,8 +1,9 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
-import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
+import { StyleSheet, TouchableOpacity, View } from 'react-native';
import ArrowRightUnderline from 'svg/ArrowRightUnderline';
import Usd from 'svg/Dollar';
import InfoIcon from 'svg/Info';
@@ -21,7 +22,7 @@ const Pages = () => {
>
- {t('Kargo narxlari')}
+ {t('Kargo narxlari')}
@@ -32,7 +33,7 @@ const Pages = () => {
>
- {t('Taqiqlangan buyumlar')}
+ {t('Taqiqlangan buyumlar')}
@@ -45,7 +46,7 @@ const Pages = () => {
height={28 * scale}
view="-4"
/>
- Shaxar bo’ylab yetkazish
+ Shaxar bo’ylab yetkazish
{
>
- {t('Filiallar ro’yxati')}
+ {t('Filiallar ro’yxati')}
@@ -71,7 +72,7 @@ const Pages = () => {
>
- {t('Kodsiz tovarlar')}
+ {t('Kodsiz tovarlar')}
},
title: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/home/home/ui/PartyCarousel.tsx b/src/screens/home/home/ui/PartyCarousel.tsx
index 0292b78..2ed7d05 100644
--- a/src/screens/home/home/ui/PartyCarousel.tsx
+++ b/src/screens/home/home/ui/PartyCarousel.tsx
@@ -1,4 +1,5 @@
import AnimatedIcon from 'components/AnimatedIcon';
+import AppText from 'components/AppText';
import React, { useMemo, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -6,7 +7,6 @@ import {
Modal,
Pressable,
StyleSheet,
- Text,
useWindowDimensions,
View,
} from 'react-native';
@@ -152,12 +152,12 @@ const PartyCarousel = ({
},
]}
>
-
+
{day.date.slice(-2)}
-
-
+
+
{t(day.weekday)}
-
+
);
}}
@@ -167,7 +167,9 @@ const PartyCarousel = ({
- {item.cargo.toUpperCase()}
+
+ {item.cargo.toUpperCase()}
+
@@ -208,20 +210,25 @@ const PartyCarousel = ({
>
-
+
{t('Yetkazish tafsilotlari')}
-
+
{selectedItem &&
selectedItem.start.map((day: any, idx: number) => (
-
+
{day.date} - {t(day.weekday)} - {t(day.status)}
-
+
))}
setModalVisible(false)}
style={modalStyles.closeButton}
>
- {t('Yopish')}
+
+ {t('Yopish')}
+
@@ -248,13 +255,15 @@ const modalStyles = StyleSheet.create({
},
modalTitle: {
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
marginBottom: 12,
},
closeButton: {
marginTop: 20,
backgroundColor: '#28A7E8',
paddingVertical: 8,
+ width: '100%',
+ textAlign: 'center',
paddingHorizontal: 20,
borderRadius: 8,
},
diff --git a/src/screens/home/home/ui/Tabs.tsx b/src/screens/home/home/ui/Tabs.tsx
index 89d99cd..454d4f8 100644
--- a/src/screens/home/home/ui/Tabs.tsx
+++ b/src/screens/home/home/ui/Tabs.tsx
@@ -1,6 +1,7 @@
+import AppText from 'components/AppText';
import { Dispatch, SetStateAction, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { Image, Text, TouchableOpacity, View } from 'react-native';
+import { Image, TouchableOpacity, View } from 'react-native';
import LinearGradient from 'react-native-linear-gradient';
import AviaLogo from 'screens/../../assets/bootsplash/Avia.png';
import AutoLogo from 'screens/../../assets/bootsplash/auto.png';
@@ -63,11 +64,11 @@ const Tabs = ({ activeTab, setActiveTab }: Props) => {
style={gradientStyle}
>
-
{item.label}
-
+
);
diff --git a/src/screens/home/home/ui/TabsAuto.tsx b/src/screens/home/home/ui/TabsAuto.tsx
index 58b5381..f6786e6 100644
--- a/src/screens/home/home/ui/TabsAuto.tsx
+++ b/src/screens/home/home/ui/TabsAuto.tsx
@@ -2,12 +2,12 @@ import Clipboard from '@react-native-clipboard/clipboard';
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import warhouses_api from 'api/warhouses';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
import {
FlatList,
StyleSheet,
- Text,
TouchableOpacity,
useWindowDimensions,
View,
@@ -86,11 +86,11 @@ const TabsAuto = () => {
- China (Auto)
+ China (Auto)
- {item}
+ {item}
handleCopy([item])}>
@@ -124,7 +124,7 @@ const makeStyles = (scale: number, cardWidth: number, screenWidth: number) =>
},
title: {
fontSize: 20 * scale,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#101623CC',
},
infoId: {
diff --git a/src/screens/home/home/ui/TabsAvia.tsx b/src/screens/home/home/ui/TabsAvia.tsx
index 5f425fa..b4bec09 100644
--- a/src/screens/home/home/ui/TabsAvia.tsx
+++ b/src/screens/home/home/ui/TabsAvia.tsx
@@ -2,12 +2,12 @@ import Clipboard from '@react-native-clipboard/clipboard';
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import warhouses_api from 'api/warhouses';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
import {
FlatList,
StyleSheet,
- Text,
TouchableOpacity,
useWindowDimensions,
View,
@@ -87,11 +87,11 @@ const TabsAvia = () => {
- China (AVIA)
+ China (AVIA)
- {item}
+ {item}
handleCopy([item])}>
@@ -139,7 +139,7 @@ const makeStyles = (scale: number, cardWidth: number, screenWidth: number) =>
},
title: {
fontSize: 20,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#101623CC',
},
infoId: {
diff --git a/src/screens/home/home/ui/styled.ts b/src/screens/home/home/ui/styled.ts
index 5d90c43..c5c5cea 100644
--- a/src/screens/home/home/ui/styled.ts
+++ b/src/screens/home/home/ui/styled.ts
@@ -46,7 +46,7 @@ export const HomeStyle = () =>
reysTitle: {
fontSize: 20,
color: '#28A7E8',
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
text: {
fontWeight: '500',
@@ -171,6 +171,6 @@ export const HomeStyle = () =>
width: '60%',
color: '#FFFFFF',
fontSize: 14,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/home/restrictedProduct/ui/RestrictedProduct.tsx b/src/screens/home/restrictedProduct/ui/RestrictedProduct.tsx
index b97cb06..87af38c 100644
--- a/src/screens/home/restrictedProduct/ui/RestrictedProduct.tsx
+++ b/src/screens/home/restrictedProduct/ui/RestrictedProduct.tsx
@@ -1,7 +1,8 @@
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
-import { ScrollView, StyleSheet, Text, View } from 'react-native';
+import { ScrollView, StyleSheet, View } from 'react-native';
import Battery from 'svg/Battery';
import Blade from 'svg/Blade';
import Book from 'svg/Book';
@@ -17,16 +18,16 @@ import Tabs from '../../home/ui/Tabs';
interface RestrictedProductProps {}
const RestrictedProduct = (props: RestrictedProductProps) => {
- const [activeTab, setActiveTab] = React.useState<'avia' | 'auto'>('avia');
+ const [activeTab, setActiveTab] = React.useState<'AVIA' | 'AUTO'>('AVIA');
const { t } = useTranslation();
return (
- {activeTab === 'avia' && (
+ {activeTab === 'AVIA' && (
- {
}}
>
{t('Aviada taqiqlangan buyumlar')}
-
+
-
+
-
-
+
+
{t('Ichida suyuqligi bor narsalar')}
-
+
-
+
-
+
-
+
{t('Batareykasi va magnit bo’lgan istalgan narsa')}
-
-
+
+
{t(
'(Telifon, sensitive buyumlar, airpods, naushnik, qo’l soati, tagi yonadigan krasovkalar...)',
)}
-
+
-
+
-
+
-
+
{t('Kukunli buyumlar')}
-
- {t('(Pudra, ten...)')}
+
+
+ {t('(Pudra, ten...)')}
+
-
+
-
+
-
+
{t('Parfumeriya')}
-
-
+
+
{t(
'(Barcha Parfumeriya va kosmetika, yuvinish maxsulotlari)',
)}
-
+
-
+
-
+
-
+
{t('O’tkir tig’li va sovuq qirollar')}
-
-
+
+
{t('(Pichoq, qaychi, miltiq...)')}
-
+
-
+
-
+
-
+
{t('Zargarklik buyumlari')}
-
-
+
+
{t('(Tilla, kumush, olmos, braslit...)')}
-
+
-
+
-
+
-
+
{t('Dori darmon va med texnika')}
-
+
-
+
-
+
-
+
{t('Oziq ovqat')}
-
+
-
+
{t(
"Agar sizda g'ayrioddiy yoki noaniq mahsulot bo'lsa, albatta buyurtma qilishdan oldin so'rashingiz tavsiya etiladi.",
)}
-
+
-
+
{t('Muhim!')}
-
+
-
+
{t(
"Avia pochta manzili orqali yuborilishi taqiqlangan mahsulot buyurtma qilgan bo'lsangiz, u avtomatik ravishda avtokargo yukiga (avto) o'tkaziladi. Shunday qilib, yukingiz Xitoy omborida qolib ketmaydi.",
)}
-
+
-
+
{t(
`Shu bilan birga, Aviada ham, Avtoda ham taqiqlangan mahsulot yuborilgan bo'lsa bunday holatda mahsulot O'zbekistonga yuborilmaydi va bu uchun javobgarlik mijozga yuklanadi.`,
)}
-
+
)}
- {activeTab === 'auto' && (
+ {activeTab === 'AUTO' && (
-
+
-
+
-
+
{t('Zargarklik buyumlari')}
-
-
+
+
{t('(Tilla, kumush, olmos, braslit...)')}
-
+
-
+
-
+
-
+
{t('Dori darmon va med texnika')}
-
+
-
+
-
+
-
+
{t('Oziq ovqat')}
-
+
-
+
-
+
-
+
{t('Diniy kitob va diniy buyumlar')}
-
+
-
+
-
+
-
+
{t('Dron, avtomat qurollar')}
-
+
-
+
{t(
"Agar sizda g'ayrioddiy yoki noaniq mahsulot bo'lsa, albatta buyurtma qilishdan oldin so'rashingiz tavsiya etiladi.",
)}
-
+
-
+
{t('Muhim!')}
-
+
-
+
{t(
"Avia pochta manzili orqali yuborilishi taqiqlangan mahsulot buyurtma qilgan bo'lsangiz, u avtomatik ravishda avtokargo yukiga (avto) o'tkaziladi. Shunday qilib, yukingiz Xitoy omborida qolib ketmaydi.",
)}
-
+
-
+
{t(
"Shu bilan birga, Aviada ham, Avtoda ham taqiqlangan mahsulot yuborilgan bo'lsa bunday holatda mahsulot O'zbekistonga yuborilmaydi va bu uchun javobgarlik mijozga yuklanadi.",
)}
-
+
)}
diff --git a/src/screens/home/uncodified/ui/Uncodified.tsx b/src/screens/home/uncodified/ui/Uncodified.tsx
index 95e4345..435d9c9 100644
--- a/src/screens/home/uncodified/ui/Uncodified.tsx
+++ b/src/screens/home/uncodified/ui/Uncodified.tsx
@@ -1,8 +1,9 @@
+import AppText from 'components/AppText';
import Navbar from 'components/Navbar';
import Navigation from 'components/Navigation';
import React from 'react';
import { useTranslation } from 'react-i18next';
-import { Image, ScrollView, StyleSheet, Text, View } from 'react-native';
+import { Image, ScrollView, StyleSheet, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
const Uncodified = () => {
@@ -20,8 +21,8 @@ const Uncodified = () => {
style={styles.image}
/>
- {t('Trek ID')}:
- YT12345678
+ {t('Trek ID')}:
+ YT12345678
diff --git a/src/screens/passport/createPassport/ui/CreateModal.tsx b/src/screens/passport/createPassport/ui/CreateModal.tsx
index aa9f6ae..5daa5d6 100644
--- a/src/screens/passport/createPassport/ui/CreateModal.tsx
+++ b/src/screens/passport/createPassport/ui/CreateModal.tsx
@@ -1,12 +1,12 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import LottieView from 'lottie-react-native';
import React, { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
Animated,
StyleSheet,
- Text,
TouchableOpacity,
useWindowDimensions,
View,
@@ -83,11 +83,11 @@ const CreateModal = ({ visible, setVisible, error }: ModalSuccessViewProps) => {
]}
>
-
+
{error
? t("Passport qo'shishda xatolik yuz berdi")
: t("Passport muvaffaqqiyatli qo'shildi")}
-
+
{
style={styles.btn}
onPress={() => setVisible(false)}
>
- {t('Yaxshi')}
+ {t('Yaxshi')}
) : (
- {t('Yaxshi')}
+ {t('Yaxshi')}
)}
>
diff --git a/src/screens/passport/createPassport/ui/CreatePassword.tsx b/src/screens/passport/createPassport/ui/CreatePassword.tsx
index e83e16e..9a126b9 100644
--- a/src/screens/passport/createPassport/ui/CreatePassword.tsx
+++ b/src/screens/passport/createPassport/ui/CreatePassword.tsx
@@ -1,6 +1,7 @@
import { zodResolver } from '@hookform/resolvers/zod';
import { useMutation } from '@tanstack/react-query';
import passportApi, { AddPassportPayload } from 'api/passport';
+import AppText from 'components/AppText';
import DatePickerInput from 'components/DatePicker';
import SingleFileDrop from 'components/FileDrop';
import LayoutTwo from 'components/LayoutTwo';
@@ -13,7 +14,6 @@ import {
KeyboardAvoidingView,
Platform,
ScrollView,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -121,7 +121,7 @@ const CreatePassword = () => {
name="firstName"
render={({ field: { onChange, value } }) => (
- {t('Ism')}
+ {t('Ism')}
{
placeholderTextColor={'#D8DADC'}
/>
{errors.firstName && (
-
+
{t(errors.firstName.message || '')}
-
+
)}
)}
@@ -142,7 +142,9 @@ const CreatePassword = () => {
name="lastName"
render={({ field: { onChange, value } }) => (
- {t('Familiya')}
+
+ {t('Familiya')}
+
{
value={value}
/>
{errors.lastName && (
-
+
{t(errors.lastName.message || '')}
-
+
)}
)}
/>
-
+
{t('Passport seriya raqami')}
-
+
{
/>
{(errors.passportSeriya || errors.passportNumber) && (
-
+
{t(errors.passportSeriya?.message || '') ||
t(errors.passportNumber?.message || '')}
-
+
)}
- {t('JSHSHIR')}
+ {t('JSHSHIR')}
{
)}
/>
{errors.jshshir && (
-
+
{t(errors.jshshir.message || '')}
-
+
)}
@@ -242,9 +244,9 @@ const CreatePassword = () => {
name="birthDate"
render={({ field: { onChange, value } }) => (
-
+
{t("Tug'ilgan sana")}
-
+
{
{errors.birthDate && (
-
+
{t(errors.birthDate?.message || '')}
-
+
)}
)}
@@ -339,9 +341,9 @@ const CreatePassword = () => {
/>
-
+
{t('Passport/ID karta rasmi yoki faylni yuklang')}
-
+
{
{isPending ? (
) : (
- {t("Qo'shish")}
+
+ {t("Qo'shish")}
+
)}
diff --git a/src/screens/passport/myPassport/ui/MyPassport.tsx b/src/screens/passport/myPassport/ui/MyPassport.tsx
index d1563c2..cf4c7b0 100644
--- a/src/screens/passport/myPassport/ui/MyPassport.tsx
+++ b/src/screens/passport/myPassport/ui/MyPassport.tsx
@@ -1,16 +1,11 @@
import Clipboard from '@react-native-clipboard/clipboard';
import { getMeData } from 'api/auth/type';
import { myPassport } from 'api/passport';
+import AppText from 'components/AppText';
import formatDate from 'helpers/formatData';
import React from 'react';
import { useTranslation } from 'react-i18next';
-import {
- Dimensions,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { Dimensions, StyleSheet, TouchableOpacity, View } from 'react-native';
import Toast from 'react-native-toast-message';
import Copy from 'svg/Copy';
@@ -64,7 +59,9 @@ const MyPassport = ({ getMe, myPassport }: Props) => {
alignItems: 'center',
}}
>
- {t('Passport ma’lumotlarim')}
+
+ {t('Passport ma’lumotlarim')}{' '}
+
{getMe?.status && (
{
{ backgroundColor: getStatusMeta(getMe.status).bg },
]}
>
-
{getStatusMeta(getMe.status).label}
-
+
)}
@@ -93,7 +90,7 @@ const MyPassport = ({ getMe, myPassport }: Props) => {
]}
>
- {t('Tez ID')}
+ {t('Tez ID')}
handleCopy((getMe && getMe?.aviaCargoId) || '')
@@ -102,7 +99,7 @@ const MyPassport = ({ getMe, myPassport }: Props) => {
- {getMe?.aviaCargoId}
+ {getMe?.aviaCargoId}
{
: { flexBasis: '65%', alignItems: 'flex-end' },
]}
>
- {t('JSHSHIR')}
- {data.passportPin}
+ {t('JSHSHIR')}
+ {data.passportPin}
{
{ flexBasis: '100%', alignItems: 'flex-start' },
]}
>
- {t('To’liq ismi')}
- {data.fullName}
+ {t('To’liq ismi')}
+ {data.fullName}
{
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
- {t('Passport seriya')}
- {data.passportSeries}
+
+ {t('Passport seriya')}{' '}
+
+
+ {data.passportSeries}{' '}
+
{
: { flexBasis: '48%', alignItems: 'flex-end' },
]}
>
- {t('Tug’ilgan kun')}
-
+
+ {t('Tug’ilgan kun')}{' '}
+
+
{formatDate(data.birthDate)}
-
+
{
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
- {t('Telefon raqami')}
- +{data.phone}
+
+ {t('Telefon raqami')}{' '}
+
+ +{data.phone}
{
: { flexBasis: '48%', alignItems: 'flex-end' },
]}
>
- {t('Limit')}
- {data.availableLimit}$
+ {t('Limit')}
+
+ {data.availableLimit}${' '}
+
@@ -191,7 +198,7 @@ const styles = StyleSheet.create({
},
statusText: {
fontSize: 13,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
card: {
backgroundColor: '#FFFFFF',
@@ -226,11 +233,6 @@ const styles = StyleSheet.create({
paddingHorizontal: 14,
paddingVertical: 4,
borderRadius: 20,
- shadowColor: '#000',
- shadowOffset: { width: 0, height: 2 },
- shadowOpacity: 0.15,
- shadowRadius: 3,
- elevation: 3, // Android uchun chiroyli ko‘rinishi
},
infoTitle: {
color: '#979797',
diff --git a/src/screens/passport/myPassport/ui/Passport.tsx b/src/screens/passport/myPassport/ui/Passport.tsx
index 083c1ad..f30c468 100644
--- a/src/screens/passport/myPassport/ui/Passport.tsx
+++ b/src/screens/passport/myPassport/ui/Passport.tsx
@@ -3,6 +3,7 @@ import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import passportApi from 'api/passport';
+import AppText from 'components/AppText';
import Layout from 'components/Layout';
import LoadingScreen from 'components/LoadingScreen';
import Navbar from 'components/Navbar';
@@ -14,7 +15,6 @@ import {
RefreshControl,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -91,18 +91,18 @@ const Passport = () => {
keyboardShouldPersistTaps="handled"
>
- {t('Passportlarim')}
+ {t('Passportlarim')}
{myPassport && myPassport.length === 0 ? (
-
+
{t("Hali pasport qo'shilmagan")}
-
-
+
+
{t("Yangi pasport qo'shish uchun tugmani bosing")}
-
+
) : (
@@ -115,7 +115,9 @@ const Passport = () => {
activeOpacity={0.7}
>
- {t("Yangi pasport qo'shish")}
+
+ {t("Yangi pasport qo'shish")}
+
);
@@ -126,7 +128,7 @@ const styles = StyleSheet.create({
flex: 1,
},
header: {
- paddingHorizontal: 20,
+ paddingHorizontal: 10,
paddingTop: 5,
},
title: {
diff --git a/src/screens/passport/myPassport/ui/styled.ts b/src/screens/passport/myPassport/ui/styled.ts
index 85244ce..55e1bff 100644
--- a/src/screens/passport/myPassport/ui/styled.ts
+++ b/src/screens/passport/myPassport/ui/styled.ts
@@ -37,7 +37,7 @@ export const PassportStyle = StyleSheet.create({
},
title: {
fontSize: 24,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
textAlign: 'center',
color: '#28A7E8',
marginBottom: 20,
@@ -155,7 +155,7 @@ export const PassportStyle = StyleSheet.create({
},
termsLink: {
color: '#28A7E8',
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
textDecorationLine: 'underline',
fontSize: 15,
},
diff --git a/src/screens/profile/myProfile/ui/Profile.tsx b/src/screens/profile/myProfile/ui/Profile.tsx
index c2b120d..a40e4b0 100644
--- a/src/screens/profile/myProfile/ui/Profile.tsx
+++ b/src/screens/profile/myProfile/ui/Profile.tsx
@@ -82,7 +82,7 @@ const styles = StyleSheet.create({
btnText: {
color: '#FFFFFF',
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/profile/myProfile/ui/ProfileHeader.tsx b/src/screens/profile/myProfile/ui/ProfileHeader.tsx
index 67e03c7..31defb8 100644
--- a/src/screens/profile/myProfile/ui/ProfileHeader.tsx
+++ b/src/screens/profile/myProfile/ui/ProfileHeader.tsx
@@ -1,5 +1,6 @@
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
+import AppText from 'components/AppText';
import React, { useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -7,7 +8,6 @@ import {
Image,
Linking,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -157,9 +157,9 @@ const ProfileHeader = ({ userName = 'Samandar' }: { userName?: string }) => {
{imageError ? (
-
+
{getMe?.fullName.charAt(0).toUpperCase()}
-
+
) : (
{
-
+
{capitalizeWords(getMe?.fullName || '')}
-
+
{getMe?.status && (
{
{ backgroundColor: getStatusMeta(getMe.status).bg },
]}
>
-
{getStatusMeta(getMe.status).label}
-
+
)}
- ID: {getMe?.aviaCargoId}
-
+ ID: {getMe?.aviaCargoId}
+
{getMe?.phone ? formatPhone(getMe.phone) : ''}
-
+
@@ -225,13 +225,15 @@ const ProfileHeader = ({ userName = 'Samandar' }: { userName?: string }) => {
- {t("Rasmni o'zgartirish")}
+
+ {t("Rasmni o'zgartirish")}
+
-
+
{t("Rasmni o'chirish")}
-
+
@@ -281,15 +283,10 @@ const styles = StyleSheet.create({
paddingHorizontal: 14,
paddingVertical: 4,
borderRadius: 20,
- shadowColor: '#000',
- shadowOffset: { width: 0, height: 2 },
- shadowOpacity: 0.15,
- shadowRadius: 3,
- elevation: 3, // Android uchun chiroyli ko‘rinishi
},
statusText: {
fontSize: 13,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
infoUser: {
marginTop: 10,
@@ -300,7 +297,7 @@ const styles = StyleSheet.create({
},
userId: {
textAlign: 'center',
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
fontSize: 30,
color: '#28A7E8',
},
diff --git a/src/screens/profile/myProfile/ui/ProfilePages.tsx b/src/screens/profile/myProfile/ui/ProfilePages.tsx
index 42549d6..e2f6612 100644
--- a/src/screens/profile/myProfile/ui/ProfilePages.tsx
+++ b/src/screens/profile/myProfile/ui/ProfilePages.tsx
@@ -1,13 +1,14 @@
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
import {
Alert,
Linking,
+ Platform,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -75,23 +76,25 @@ const ProfilePages = (props: componentNameProps) => {
>
- {t('Sozlamalar')}
-
-
-
- navigation.navigate('Notifications')}
- >
-
-
- {t('Bildirishnomalar')}
+ {t('Sozlamalar')}
+ {Platform.OS === 'android' && (
+ navigation.navigate('Notifications')}
+ >
+
+
+ {t('Bildirishnomalar')}
+
+
+
+ )}
{
>
- {t('Xitoy omborlari manzili')}
+ {t('Xitoy omborlari manzili')}
@@ -114,7 +117,7 @@ const ProfilePages = (props: componentNameProps) => {
>
- {t('Yordam markazi')}
+ {t('Yordam markazi')}
@@ -124,9 +127,9 @@ const ProfilePages = (props: componentNameProps) => {
onPress={handleLogout}
>
-
+
{t('Chiqish')}
-
+
{
>
-
+
{t('Hisobingizni o‘chirish')}
-
+
diff --git a/src/screens/profile/notifications/ui/Notifications.tsx b/src/screens/profile/notifications/ui/Notifications.tsx
index 0642592..abab6af 100644
--- a/src/screens/profile/notifications/ui/Notifications.tsx
+++ b/src/screens/profile/notifications/ui/Notifications.tsx
@@ -1,4 +1,5 @@
import AsyncStorage from '@react-native-async-storage/async-storage';
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import NoResult from 'components/NoResult';
import * as React from 'react';
@@ -7,7 +8,6 @@ import {
RefreshControl,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
} from 'react-native';
import Clock from 'svg/Clock';
@@ -68,7 +68,7 @@ const Notifications = () => {
style={styles.card}
key={item.id}
>
- {item.message}
+ {item.message}
))
diff --git a/src/screens/profile/notifications/ui/NotificationsModal.tsx b/src/screens/profile/notifications/ui/NotificationsModal.tsx
index 49c6dc2..1611a16 100644
--- a/src/screens/profile/notifications/ui/NotificationsModal.tsx
+++ b/src/screens/profile/notifications/ui/NotificationsModal.tsx
@@ -1,12 +1,7 @@
+import AppText from 'components/AppText';
import React, { useEffect, useRef } from 'react';
import { useTranslation } from 'react-i18next';
-import {
- Animated,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { Animated, StyleSheet, TouchableOpacity, View } from 'react-native';
import CloseIcon from 'svg/Close';
import { NotificationsData } from '../lib/data';
@@ -58,7 +53,7 @@ const NotificationsModal = ({ visible, setVisible, selectedOrder }: Props) => {
]}
>
- {selectedOrder.title}
+ {selectedOrder.title}
@@ -66,9 +61,9 @@ const NotificationsModal = ({ visible, setVisible, selectedOrder }: Props) => {
- {selectedOrder.message}
+ {selectedOrder.message}
- {t('Yopish')}
+ {t('Yopish')}
@@ -105,7 +100,7 @@ const styles = StyleSheet.create({
},
title: {
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
closeBtn: {
padding: 5,
@@ -123,7 +118,7 @@ const styles = StyleSheet.create({
},
sectionTitle: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
paddingHorizontal: 20,
marginBottom: 8,
},
@@ -159,11 +154,11 @@ const styles = StyleSheet.create({
},
totalLabel: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
totalValue: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#28A7E8',
},
btn: {
@@ -179,7 +174,7 @@ const styles = StyleSheet.create({
textAlign: 'center',
color: '#fff',
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/profile/settings/ui/AddedLock.tsx b/src/screens/profile/settings/ui/AddedLock.tsx
index a75baa1..46735ef 100644
--- a/src/screens/profile/settings/ui/AddedLock.tsx
+++ b/src/screens/profile/settings/ui/AddedLock.tsx
@@ -1,442 +1,13 @@
-import AsyncStorage from '@react-native-async-storage/async-storage';
-import { useNavigation, useRoute } from '@react-navigation/native';
-import { NativeStackNavigationProp } from '@react-navigation/native-stack';
-import React, { useEffect, useRef, useState } from 'react';
-import {
- Alert,
- Dimensions,
- PanResponder,
- StyleSheet,
- Text,
- TextInput,
- TouchableOpacity,
- UIManager,
- View,
- findNodeHandle,
-} from 'react-native';
-import { CodeField, Cursor } from 'react-native-confirmation-code-field';
-import { SafeAreaView } from 'react-native-safe-area-context';
-import Svg, { Line } from 'react-native-svg';
-
-const LOCK_ENABLED = 'LOCK_ENABLED';
-const LOCK_TYPE = 'LOCK_TYPE';
-const LOCK_PASSWORD = 'LOCK_PASSWORD';
-const LOCK_PATTERN = 'LOCK_PATTERN';
-
-type LockType = 'pin' | 'password' | 'pattern';
-
-type PatternLockProps = {
- path: number[];
- setPath: React.Dispatch>;
- onPatternComplete: (pattern: string | null) => void;
- patternError?: boolean;
-};
-
-const PatternLock = ({
- path,
- setPath,
- onPatternComplete,
- patternError,
-}: PatternLockProps) => {
- const { width } = Dimensions.get('window');
- const size = width * 0.8;
- const cellSize = size / 3;
- const containerRef = useRef(null);
- const [layout, setLayout] = useState({ pageX: 0, pageY: 0 });
- const [currentPos, setCurrentPos] = useState<{ x: number; y: number } | null>(
- null,
- );
-
- const points = Array.from({ length: 9 }, (_, i) => ({
- id: i + 1,
- x: (i % 3) * cellSize + cellSize / 2,
- y: Math.floor(i / 3) * cellSize + cellSize / 2,
- }));
-
- const panResponder = PanResponder.create({
- onStartShouldSetPanResponder: () => true,
- onMoveShouldSetPanResponder: () => true,
- onPanResponderGrant: () => {
- setPath([]); // yangi chizma
- setCurrentPos(null);
- },
- onPanResponderMove: (_e, gestureState) => {
- const x = gestureState.moveX - layout.pageX;
- const y = gestureState.moveY - layout.pageY;
- setCurrentPos({ x, y });
-
- const point = points.find(
- p =>
- Math.abs(p.x - x) < cellSize / 3 && Math.abs(p.y - y) < cellSize / 3,
- );
-
- if (point && !path.includes(point.id)) {
- setPath(prev => {
- const newPath = [...prev, point.id];
- return newPath;
- });
- }
- },
- onPanResponderRelease: () => {
- setCurrentPos(null);
- onPatternComplete(path.length > 0 ? path.join('') : null);
- },
- });
-
- useEffect(() => {
- if (containerRef.current) {
- const handle = findNodeHandle(containerRef.current);
- if (handle) {
- UIManager.measure(handle, (_x, _y, _w, _h, pageX, pageY) => {
- setLayout({ pageX, pageY });
- });
- }
- }
- }, []);
+import AppText from 'components/AppText';
+import React from 'react';
+import { View } from 'react-native';
+const AddedLock = () => {
return (
-
-
-
- {points.map(point => (
-
- ))}
+
+ AddedLock
);
};
-const AddedLock = () => {
- const [step, setStep] = useState<1 | 2>(1);
-
- const [password, setPassword] = useState('');
- const [confirmPassword, setConfirmPassword] = useState('');
-
- // Pattern states
- const [patternPath, setPatternPath] = useState([]);
- const [patternTemp, setPatternTemp] = useState(null);
- const [patternConfirmed, setPatternConfirmed] = useState(false);
- const [patternError, setPatternError] = useState(false);
-
- const route = useRoute();
- const navigation = useNavigation>();
- const paramLockType = route.params?.lockType;
- const validLockTypes: LockType[] = ['pin', 'password', 'pattern'];
- const initialLockType: LockType = validLockTypes.includes(paramLockType)
- ? paramLockType
- : 'pin';
-
- const [lockType] = useState(initialLockType);
-
- const onContinue = async () => {
- if (step === 1) {
- if (lockType === 'pattern') {
- if (!patternTemp) {
- return Alert.alert('Error', 'Please draw your pattern first');
- }
- setPatternPath([]); // clear for second step
- } else {
- if (!password) {
- return Alert.alert('Error', 'Please enter your PIN/Password');
- }
- }
- setStep(2);
- return;
- }
-
- if (lockType === 'pattern') {
- if (!patternConfirmed) {
- return Alert.alert('Error', 'Please confirm your pattern');
- }
- await AsyncStorage.setItem(LOCK_PATTERN, patternTemp!);
- } else {
- if (!confirmPassword) {
- return Alert.alert('Error', 'Please confirm your PIN/Password');
- }
- if (password !== confirmPassword) {
- return Alert.alert('Error', 'Values do not match');
- }
- await AsyncStorage.setItem(LOCK_PASSWORD, password);
- }
-
- await AsyncStorage.setItem(LOCK_ENABLED, 'true');
- await AsyncStorage.setItem(LOCK_TYPE, lockType);
- Alert.alert('Success', 'Lock settings saved');
-
- resetForm();
- navigation.goBack();
- };
-
- const resetForm = () => {
- setStep(1);
- setPassword('');
- setConfirmPassword('');
- setPatternPath([]);
- setPatternTemp(null);
- setPatternConfirmed(false);
- };
-
- const handlePatternComplete = (inputPattern: string | null) => {
- if (!inputPattern || inputPattern.length < 4) {
- setPatternError(true);
- setTimeout(() => {
- setPatternError(false);
- setPatternPath([]);
- }, 800);
- return;
- }
-
- if (step === 1) {
- setPatternTemp(inputPattern);
- } else {
- if (patternTemp && inputPattern === patternTemp) {
- setPatternConfirmed(true);
- Alert.alert('Success', 'Pattern confirmed');
- } else {
- setPatternError(true);
- setTimeout(() => {
- setPatternError(false);
- setStep(1);
- setPatternPath([]);
- }, 800);
- }
- }
- };
-
- return (
-
-
-
- {lockType === 'pattern' ? (
-
- {step === 1 ? (
- <>
-
- Draw your pattern
-
-
- >
- ) : (
- <>
-
- Confirm your pattern
-
-
- >
- )}
-
- ) : lockType === 'pin' ? (
- <>
- {step === 1 ? (
- <>
-
- Enter PIN
-
- (
-
-
- {symbol || (isFocused ? : null)}
-
-
- )}
- />
- >
- ) : (
- <>
-
- Confirm PIN
-
- (
-
-
- {symbol || (isFocused ? : null)}
-
-
- )}
- />
- >
- )}
- >
- ) : (
- <>
- {step === 1 ? (
-
- ) : (
-
- )}
- >
- )}
-
-
-
- {
- resetForm();
- navigation.goBack();
- }}
- >
- Bekor qilish
-
-
-
-
- {step === 1 ? 'Davom etish' : 'Saqlash'}
-
-
-
-
-
- );
-};
-
-const styles = StyleSheet.create({
- container: { flex: 1 },
- btnCard: {
- position: 'absolute',
- flexDirection: 'row',
- bottom: 5,
- width: '100%',
- justifyContent: 'center',
- gap: 10,
- },
- patternContainer: {
- borderRadius: 10,
- justifyContent: 'center',
- alignItems: 'center',
- },
- patternPoint: {
- width: 30,
- height: 30,
- borderRadius: 15,
- backgroundColor: '#ddd',
- position: 'absolute',
- },
- patternPointActive: { backgroundColor: '#28A7E8' },
- pinCell: {
- borderWidth: 1,
- borderColor: '#ccc',
- borderRadius: 8,
- width: 50,
- height: 50,
- justifyContent: 'center',
- alignItems: 'center',
- margin: 5,
- },
- pinCellFocused: { borderColor: '#28A7E8' },
- input: {
- borderWidth: 1,
- borderColor: '#ccc',
- borderRadius: 8,
- padding: 15,
- marginBottom: 15,
- fontSize: 16,
- },
- button: {
- backgroundColor: '#28A7E8',
- padding: 15,
- borderRadius: 8,
- alignItems: 'center',
- width: '48%',
- },
- removeButton: { backgroundColor: '#ccc' },
- buttonText: { color: '#fff', fontSize: 16, fontWeight: 'bold' },
- lockCard: {
- height: '100%',
- justifyContent: 'center',
- width: '95%',
- margin: 'auto',
- },
- patternPointError: { backgroundColor: 'red' },
-});
-
export default AddedLock;
diff --git a/src/screens/profile/settings/ui/Settings.tsx b/src/screens/profile/settings/ui/Settings.tsx
index 8cfe357..4da8a5b 100644
--- a/src/screens/profile/settings/ui/Settings.tsx
+++ b/src/screens/profile/settings/ui/Settings.tsx
@@ -1,3 +1,4 @@
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
@@ -7,7 +8,6 @@ import {
RefreshControl,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -53,9 +53,9 @@ const Settings = () => {
contentContainerStyle={{ paddingBottom: 10 }}
>
-
+
{t('select_language')}
-
+
{languages.map(item => {
const isSelected = selectedLang?.code === item.code;
const isLoading = loadingLang === item.code;
@@ -85,14 +85,14 @@ const Settings = () => {
source={item.Icon}
style={{ width: 30, height: 30, resizeMode: 'contain' }}
/>
-
{item.label}
-
+
{
- Parol turini tanlang
+ Parol turini tanlang
navigation.navigate('AddLock', { lockType: 'pin' })
}
>
- Pin-kod
+ Pin-kod
@@ -36,7 +31,7 @@ const SettingsLock = () => {
navigation.navigate('AddLock', { lockType: 'password' })
}
>
- Parol
+ Parol
@@ -46,7 +41,7 @@ const SettingsLock = () => {
navigation.navigate('AddLock', { lockType: 'pattern' })
}
>
- Chizma
+ Chizma
diff --git a/src/screens/profile/support/ui/Support.tsx b/src/screens/profile/support/ui/Support.tsx
index 6dbc698..e92c452 100644
--- a/src/screens/profile/support/ui/Support.tsx
+++ b/src/screens/profile/support/ui/Support.tsx
@@ -1,3 +1,4 @@
+import AppText from 'components/AppText';
import NavbarBack from 'components/NavbarBack';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
@@ -7,7 +8,6 @@ import {
RefreshControl,
ScrollView,
StyleSheet,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -85,11 +85,11 @@ const Support = (props: SupportProps) => {
msg.fromUser ? styles.userBubble : styles.supportBubble,
]}
>
-
{msg.text}
-
+
))}
@@ -102,7 +102,7 @@ const Support = (props: SupportProps) => {
placeholderTextColor="#999"
/>
- {t('Yuborish')}
+ {t('Yuborish')}
@@ -176,6 +176,6 @@ const styles = StyleSheet.create({
sendButtonText: {
color: '#fff',
fontSize: 14,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/profile/warehouses/ui/TabsAutoWarehouses.tsx b/src/screens/profile/warehouses/ui/TabsAutoWarehouses.tsx
index 41f2c8c..217ac14 100644
--- a/src/screens/profile/warehouses/ui/TabsAutoWarehouses.tsx
+++ b/src/screens/profile/warehouses/ui/TabsAutoWarehouses.tsx
@@ -2,12 +2,12 @@ import Clipboard from '@react-native-clipboard/clipboard';
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import warhouses_api from 'api/warhouses';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
import {
FlatList,
StyleSheet,
- Text,
TouchableOpacity,
useWindowDimensions,
View,
@@ -108,11 +108,11 @@ const TabsAutoWarehouses = () => {
- China (Auto)
+ China (Auto)
- {item}
+ {item}
handleCopy(item.addressInfo)}>
@@ -141,7 +141,7 @@ const makeStyles = (scale: number, cardWidth: number, screenWidth: number) =>
},
title: {
fontSize: 20 * scale,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#101623CC',
},
infoId: {
diff --git a/src/screens/profile/warehouses/ui/TabsAviaWarehouses.tsx b/src/screens/profile/warehouses/ui/TabsAviaWarehouses.tsx
index 3e1eb56..8616666 100644
--- a/src/screens/profile/warehouses/ui/TabsAviaWarehouses.tsx
+++ b/src/screens/profile/warehouses/ui/TabsAviaWarehouses.tsx
@@ -2,12 +2,12 @@ import Clipboard from '@react-native-clipboard/clipboard';
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
import warhouses_api from 'api/warhouses';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
import {
FlatList,
StyleSheet,
- Text,
TouchableOpacity,
useWindowDimensions,
View,
@@ -108,11 +108,11 @@ const TabsAviaWarehouses = () => {
- China (Auto)
+ China (Auto)
- {item}
+ {item}
handleCopy(item.addressInfo)}>
@@ -141,7 +141,7 @@ const makeStyles = (scale: number, cardWidth: number, screenWidth: number) =>
},
title: {
fontSize: 20 * scale,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#101623CC',
},
infoId: {
diff --git a/src/screens/profile/warehouses/ui/Warehouses.tsx b/src/screens/profile/warehouses/ui/Warehouses.tsx
index 7ac4131..c476f5a 100644
--- a/src/screens/profile/warehouses/ui/Warehouses.tsx
+++ b/src/screens/profile/warehouses/ui/Warehouses.tsx
@@ -1,5 +1,6 @@
import { useQuery } from '@tanstack/react-query';
import { authApi } from 'api/auth';
+import AppText from 'components/AppText';
import SingleFileDrop from 'components/FileDrop';
import LayoutTwo from 'components/LayoutTwo';
import * as React from 'react';
@@ -7,13 +8,14 @@ import { useTranslation } from 'react-i18next';
import {
ActivityIndicator,
Image,
+ Linking,
RefreshControl,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
+import AppLink from 'react-native-app-link';
import Toast from 'react-native-toast-message';
import Shablon from 'screens/../../assets/bootsplash/shablon.jpg';
import TabsAutoWarehouses from './TabsAutoWarehouses';
@@ -96,6 +98,19 @@ Cargo Idsi: ${getMe?.aviaCargoId}
() => ({ paddingBottom: 10 }),
[],
);
+ const openTelegram = React.useCallback(async () => {
+ try {
+ await AppLink.maybeOpenURL('tg://resolve?domain=cpostuz', {
+ appName: 'Telegram',
+ appStoreId: 686449807,
+ appStoreLocale: 'us',
+ playStoreId: 'org.telegram.messenger',
+ });
+ } catch (err) {
+ // Agar ilovani ham, store’ni ham ochib bo‘lmasa, fallback URL
+ Linking.openURL('https://t.me/cpostuz');
+ }
+ }, []);
return (
- {t('Bizning Xitoy manzilimiz')}
-
+
+ {t('Bizning Xitoy manzilimiz')}
+
+
{t(
'Taobao, pinduoduo, 1688 ,alibaba va Xitoyning istalgan platformasiga kiritish uchun',
)}
-
+
-
+
{t('Xitoy omborlarimiz manzilini programmaga kiriting')}
-
+
-
+
{t(
"Diqqat! Iltimos, Xitoy omborimiz manzilini Xitoy programmalariga kiritganingizdan so'ng, kiritilgan holatdagi skrenshotni bizga yuborib, tekshirtiring",
)}
-
-
+
+
{t(
"Xitoy ombori manzilini to'g'ri kiritish, mahsulotingiz yo'qolib qolish oldini oladi.",
)}
-
-
+
+
{t(
"Agar sizda savol tug'ilsa yoki biron narsaga tushunmasangiz bizga murojaat qiling",
)}
-
+
- {t('Skrenshot rasmini yuklang')}
+
+ {t('Skrenshot rasmini yuklang')}
+
+
+
+ {t(
+ "Hurmatli mijoz, ushbu berilgan ID manzil, ma'lumotlarni siz shu namunadagidek 1- va 4- qatorlarga oʻz ID kodingizni yozing! Aks holda sizning kargoingiz bilan muammo chiqishi mumkin.",
+ )}
+
+
+
+
+ {t(
+ 'Ilovaga kirib huddi shunday to’ldirganingizdan keyin ekranni rasmga(skrinshot) olib, sizga bot tomonidan berilgan ID kod vamanzilni ushbu',
+ )}{' '}
+
+ @cpost_admin
+ {' '}
+ {t('admindan tasdiqlatib olishingiz kerak bo’ladi.')}
+
+
) : (
- {t('Manzilni tekshirish')}
+
+ {t('Manzilni tekshirish')}
+
)}
diff --git a/src/screens/status/ui/Filter.tsx b/src/screens/status/ui/Filter.tsx
index 57919d0..1df4981 100644
--- a/src/screens/status/ui/Filter.tsx
+++ b/src/screens/status/ui/Filter.tsx
@@ -1,10 +1,10 @@
import { PacketsData } from 'api/packets';
+import AppText from 'components/AppText';
import React from 'react';
import { useTranslation } from 'react-i18next';
import {
FlatList,
StyleSheet,
- Text,
TouchableOpacity,
View,
useWindowDimensions,
@@ -50,14 +50,14 @@ const Filter = ({
onPress={() => setOpen(prev => !prev)}
>
- {t('Filter')}
+ {t('Filter')}
{open && (
{/* Header */}
- {t('Transport')}
+ {t('Transport')}
setOpen(false)}>
@@ -82,19 +82,19 @@ const Filter = ({
setOpen(false);
}}
>
-
{type === 'AUTO' ? t('Avto') : t('Avia')}
-
+
)}
/>
- {t('Reys raqami')}
+ {t('Reys raqami')}
item.id?.toString() || 'all'}
@@ -113,7 +113,7 @@ const Filter = ({
setOpen(false);
}}
>
-
{item.packetName === 'all' ? t('Barchasi') : item.packetName}
-
+
)}
/>
@@ -176,7 +176,7 @@ const makeStyles = () =>
marginBottom: 10,
},
sectionTitle: {
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
marginBottom: 6,
color: '#333',
fontSize: 16,
diff --git a/src/screens/status/ui/Order.tsx b/src/screens/status/ui/Order.tsx
index 4954e73..811b43b 100644
--- a/src/screens/status/ui/Order.tsx
+++ b/src/screens/status/ui/Order.tsx
@@ -1,13 +1,8 @@
import { PacketsData } from 'api/packets';
+import AppText from 'components/AppText';
import React, { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import {
- FlatList,
- StyleSheet,
- Text,
- TouchableOpacity,
- View,
-} from 'react-native';
+import { FlatList, StyleSheet, TouchableOpacity, View } from 'react-native';
import Auto from 'svg/Auto';
import Avia from 'svg/Avia';
import BagIcon from 'svg/BagIcon';
@@ -147,7 +142,7 @@ const Order = ({ data, openModal, selectedData }: Props) => {
},
]}
>
- {
tabList.find(tab => tab.value === item.deliveryStatus)
?.label || '',
)}
-
+
{/* Info */}
- {t('Reys raqami')}
- {t('Reys raqami')}
+
{item.packetName}
-
+
- {t('Mahsulotlar og’irligi')}
- {item.weight}
+
+ {t('Mahsulotlar og’irligi')}
+
+ {item.weight}
- {t('Umumiy narxi')}
- {item.totalPrice}
+ {t('Umumiy narxi')}
+ {item.totalPrice}
@@ -192,10 +189,10 @@ const Order = ({ data, openModal, selectedData }: Props) => {
return (
- {t('Buyurtmalar soni')}
-
+ {t('Buyurtmalar soni')}
+
{selectedData ? '1' : data.data.length}
-
+
marginBottom: 12,
},
statusText: {
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
fontSize: 16,
},
infoCard: {
diff --git a/src/screens/status/ui/OrderDetailModal.tsx b/src/screens/status/ui/OrderDetailModal.tsx
index 5ef07cd..e315030 100644
--- a/src/screens/status/ui/OrderDetailModal.tsx
+++ b/src/screens/status/ui/OrderDetailModal.tsx
@@ -1,10 +1,10 @@
+import AppText from 'components/AppText';
import React, { useEffect, useRef } from 'react';
import { useTranslation } from 'react-i18next';
import {
Animated,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -68,7 +68,7 @@ const OrderDetailModal = ({ visible, setVisible, selectedOrder }: Props) => {
]}
>
- {selectedOrder.packetName}
+ {selectedOrder.packetName}
@@ -76,7 +76,7 @@ const OrderDetailModal = ({ visible, setVisible, selectedOrder }: Props) => {
- {t('Mahsulotlar')}:
+ {t('Mahsulotlar')}:
{
return (
- {product.name}
- {t('Trek ID')}:
+ {product.name}
+
+ {t('Trek ID')}:
+
- {product.trekId}
+ {product.trekId}
-
+
{t('Og’irligi')}: {product.weight}
-
-
+
+
{t('Narxi')}: 1kg * {pricePerKg.toLocaleString('uz-UZ')}{' '}
{t("so'm")}
-
+
-
+
{t('Umumiy narxi')}: {product.totalPrice} {t('so‘m')}
-
+
);
@@ -113,12 +115,14 @@ const OrderDetailModal = ({ visible, setVisible, selectedOrder }: Props) => {
- {t('Umumiy narx')}:
- {selectedOrder.totalPrice}
+ {t('Umumiy narx')}:
+
+ {selectedOrder.totalPrice}
+
- {t('Yopish')}
+ {t('Yopish')}
@@ -144,7 +148,7 @@ const styles = StyleSheet.create({
},
total: {
fontSize: 14,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#1D1D1D',
},
modalContent: {
@@ -165,7 +169,7 @@ const styles = StyleSheet.create({
},
title: {
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
closeBtn: {
padding: 5,
@@ -183,7 +187,7 @@ const styles = StyleSheet.create({
},
sectionTitle: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
paddingHorizontal: 20,
marginBottom: 8,
},
@@ -220,11 +224,11 @@ const styles = StyleSheet.create({
},
totalLabel: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
totalValue: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#28A7E8',
},
btn: {
@@ -240,7 +244,7 @@ const styles = StyleSheet.create({
textAlign: 'center',
color: '#fff',
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
});
diff --git a/src/screens/status/ui/Tabs.tsx b/src/screens/status/ui/Tabs.tsx
index 42bfb8b..c179c06 100644
--- a/src/screens/status/ui/Tabs.tsx
+++ b/src/screens/status/ui/Tabs.tsx
@@ -1,3 +1,4 @@
+import AppText from 'components/AppText';
import React, { Dispatch, SetStateAction, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -5,7 +6,6 @@ import {
NativeScrollEvent,
NativeSyntheticEvent,
StyleSheet,
- Text,
TouchableOpacity,
View,
useWindowDimensions,
@@ -79,11 +79,11 @@ const Tabs = ({ filter, setFilter }: Props) => {
style={[styles.card, filter === item.value && styles.activeCard]}
onPress={() => setFilter(item.value)}
>
-
{t(item.label)}
-
+
)}
contentContainerStyle={styles.scrollContent}
diff --git a/src/screens/wallet/enterCard/ui/EnterCard.tsx b/src/screens/wallet/enterCard/ui/EnterCard.tsx
index 4c460ed..91b513b 100644
--- a/src/screens/wallet/enterCard/ui/EnterCard.tsx
+++ b/src/screens/wallet/enterCard/ui/EnterCard.tsx
@@ -1,5 +1,6 @@
import { zodResolver } from '@hookform/resolvers/zod';
import { RouteProp, useRoute } from '@react-navigation/native';
+import AppText from 'components/AppText';
import NavbarBack from 'components/NavbarBack';
import Navigation from 'components/Navigation';
import * as React from 'react';
@@ -11,7 +12,6 @@ import {
Linking,
Platform,
ScrollView,
- Text,
TextInput,
TouchableOpacity,
View,
@@ -110,7 +110,9 @@ const EnterCard = (props: EnterCardProps) => {
name="card_name"
render={({ field: { onChange, value } }) => (
- {t('Karta nomi')}
+
+ {t('Karta nomi')}
+
{
value={value}
/>
{errors.card_name && (
-
+
{t(errors.card_name.message || '')}
-
+
)}
)}
@@ -137,12 +139,12 @@ const EnterCard = (props: EnterCardProps) => {
return (
-
+
{t('Karta raqami')}
-
+
{/* Ghost text with value + remaining */}
- {
},
]}
>
-
+
{formattedValue}
-
- {ghostRemaining}
-
+
+ {ghostRemaining}
+
{
@@ -206,9 +208,9 @@ const EnterCard = (props: EnterCardProps) => {
/>
{errors.card_number && (
-
+
{t(errors.card_number.message || '')}
-
+
)}
);
@@ -235,7 +237,9 @@ const EnterCard = (props: EnterCardProps) => {
return (
- {t('Muddati')}
+
+ {t('Muddati')}
+
{
maxLength={5}
/>
{errors.duration && (
-
+
{t(errors.duration.message || '')}
-
+
)}
);
@@ -264,9 +268,9 @@ const EnterCard = (props: EnterCardProps) => {
marginTop: 20,
}}
>
-
+
{selectedId?.toUpperCase()} {t("ilovasi orqali to'lash")}
-
+
@@ -294,7 +298,7 @@ const EnterCard = (props: EnterCardProps) => {
{load ? (
) : (
- {t("To'lash")}
+ {t("To'lash")}
)}
diff --git a/src/screens/wallet/payment/ui/Payment.tsx b/src/screens/wallet/payment/ui/Payment.tsx
index e63a35e..f98c967 100644
--- a/src/screens/wallet/payment/ui/Payment.tsx
+++ b/src/screens/wallet/payment/ui/Payment.tsx
@@ -1,9 +1,10 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { PacketsData } from 'api/packets';
+import AppText from 'components/AppText';
import React, { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { Text, TouchableOpacity, View } from 'react-native';
+import { TouchableOpacity, View } from 'react-native';
import { PaymentStyle } from './style';
type WalletStackParamList = {
@@ -66,39 +67,43 @@ const Payment = ({ packets }: Props) => {
- {item.packetName}
+ {item.packetName}
{isPaid ? (
- {t("To'langan")}
+ {t("To'langan")}
) : (
- {t("To'lanmagan")}
+ {t("To'lanmagan")}
)}
- {t('Reys raqami')}
-
+ {t('Reys raqami')}
+
+
{item.packetName}
-
+
-
+
{t("Mahsulotlar og'irligi")}
-
- {item.weight}
+
+ {item.weight}
-
+
{t('Mahsulotlar soni')}
-
- {item.items.length}
+
+ {item.items.length}
- {t('Umumiy narxi')}
- {item.totalPrice}
+
+ {t('Umumiy narxi')}
+
+ {item.totalPrice}
diff --git a/src/screens/wallet/payment/ui/Wallet.tsx b/src/screens/wallet/payment/ui/Wallet.tsx
index 5ee3a74..9b4aa1c 100644
--- a/src/screens/wallet/payment/ui/Wallet.tsx
+++ b/src/screens/wallet/payment/ui/Wallet.tsx
@@ -1,5 +1,6 @@
import { useQuery } from '@tanstack/react-query';
import packetsApi from 'api/packets';
+import AppText from 'components/AppText';
import Layout from 'components/Layout';
import LoadingScreen from 'components/LoadingScreen';
import NoResult from 'components/NoResult';
@@ -10,7 +11,6 @@ import {
RefreshControl,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -74,14 +74,17 @@ const Wallet = () => {
loadInitialData();
}, []);
+ useEffect(() => {
+ setPageAvia(0);
+ }, [selectedType]);
+
const onRefresh = useCallback(async () => {
try {
- setRefreshing(true);
await refetch();
+ await refetchAvia();
} catch (error) {
console.error('Refresh error:', error);
} finally {
- setRefreshing(false);
}
}, [refetch]);
@@ -126,7 +129,7 @@ const Wallet = () => {
>
- {t("To'lov")}
+ {t("To'lov")}
{
}}
onPress={() => setSelectedType('AVIA')}
>
-
AVIA
-
+
{
}}
onPress={() => setSelectedType('AUTO')}
>
- {
}}
>
AUTO
-
+
@@ -191,7 +194,7 @@ const Wallet = () => {
>
- {t("To'lov")}
+ {t("To'lov")}
{
}}
onPress={() => setSelectedType('AVIA')}
>
-
AVIA
-
+
{
}}
onPress={() => setSelectedType('AUTO')}
>
- {
}}
>
AUTO
-
+
@@ -253,7 +256,7 @@ const Wallet = () => {
- {t("To'lov")}
+ {t("To'lov")}
{
}}
onPress={() => setSelectedType('AVIA')}
>
-
AVIA
-
+
{
}}
onPress={() => setSelectedType('AUTO')}
>
- {
}}
>
AUTO
-
+
diff --git a/src/screens/wallet/payment/ui/style.ts b/src/screens/wallet/payment/ui/style.ts
index a971ac9..0679ca3 100644
--- a/src/screens/wallet/payment/ui/style.ts
+++ b/src/screens/wallet/payment/ui/style.ts
@@ -23,7 +23,7 @@ export const PaymentStyle = StyleSheet.create({
title: {
width: '60%',
fontSize: 18,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
},
badge: {
backgroundColor: '#4CAF50',
@@ -141,7 +141,7 @@ export const PaymentStyle = StyleSheet.create({
itemName: {
fontSize: 17,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#333',
},
@@ -153,6 +153,8 @@ export const PaymentStyle = StyleSheet.create({
track: {
fontSize: 15,
color: '#666',
+ textAlign: 'right',
+ marginTop: 2,
},
price: {
@@ -163,7 +165,7 @@ export const PaymentStyle = StyleSheet.create({
total: {
fontSize: 16,
- fontWeight: '600',
+ fontFamily: 'GolosText-Bold',
color: '#1D1D1D',
},
diff --git a/src/screens/wallet/paymentMethod/ui/ModalCard.tsx b/src/screens/wallet/paymentMethod/ui/ModalCard.tsx
index 64bd418..148c9ed 100644
--- a/src/screens/wallet/paymentMethod/ui/ModalCard.tsx
+++ b/src/screens/wallet/paymentMethod/ui/ModalCard.tsx
@@ -1,6 +1,7 @@
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { useMutation } from '@tanstack/react-query';
import packetsApi from 'api/packets';
+import AppText from 'components/AppText';
import React, { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -9,7 +10,6 @@ import {
Dimensions,
Linking,
StyleSheet,
- Text,
TouchableOpacity,
TouchableWithoutFeedback,
View,
@@ -195,7 +195,7 @@ const ModalCard = ({
{load || isPending ? (
) : (
-
{t("To'lash")}
-
+
)}
diff --git a/src/screens/wallet/paymentMethod/ui/ModalPay.tsx b/src/screens/wallet/paymentMethod/ui/ModalPay.tsx
index 751d107..1704a6a 100644
--- a/src/screens/wallet/paymentMethod/ui/ModalPay.tsx
+++ b/src/screens/wallet/paymentMethod/ui/ModalPay.tsx
@@ -1,5 +1,6 @@
import { useMutation } from '@tanstack/react-query';
import packetsApi from 'api/packets';
+import AppText from 'components/AppText';
import React, { useEffect, useRef } from 'react';
import { useTranslation } from 'react-i18next';
import {
@@ -7,7 +8,6 @@ import {
Animated,
Dimensions,
StyleSheet,
- Text,
TouchableOpacity,
TouchableWithoutFeedback,
View,
@@ -152,14 +152,14 @@ const ModalPay = ({
width={28}
height={28}
/>
-
{t('Bank kartasi')}
-
+
-
{t('Naqt pul')}
-
+
) : (
-
{t("To'lash")}
-
+
)}
diff --git a/src/screens/wallet/paymentMethod/ui/ModalSuccess.tsx b/src/screens/wallet/paymentMethod/ui/ModalSuccess.tsx
index 02d0de6..68f0c6a 100644
--- a/src/screens/wallet/paymentMethod/ui/ModalSuccess.tsx
+++ b/src/screens/wallet/paymentMethod/ui/ModalSuccess.tsx
@@ -1,12 +1,12 @@
import { useNavigation } from '@react-navigation/native';
import { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import AppText from 'components/AppText';
import LottieView from 'lottie-react-native';
import React, { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import {
Animated,
StyleSheet,
- Text,
TouchableOpacity,
useWindowDimensions,
View,
@@ -89,11 +89,11 @@ const ModalSuccess = ({
]}
>
-
+
{successMet
? t('To’lov muvaffaqqiyatli o’tdi')
: t('Chop etilmoqda')}
-
+
)}
-
+
{successMet
? t('Toʻlovingiz tasdiqlandi!')
: t('Iltimos ozroq kutib turing!')}
-
+
{successMet && (
@@ -149,11 +149,11 @@ const ModalSuccess = ({
style={styles.btn}
onPress={() => setPayModal(false)}
>
- {t('Yaxshi')}
+ {t('Yaxshi')}
) : (
- {t('Yaxshi')}
+ {t('Yaxshi')}
)}
>
diff --git a/src/screens/wallet/paymentMethod/ui/PaymentMethod.tsx b/src/screens/wallet/paymentMethod/ui/PaymentMethod.tsx
index c6378ed..d5bf022 100644
--- a/src/screens/wallet/paymentMethod/ui/PaymentMethod.tsx
+++ b/src/screens/wallet/paymentMethod/ui/PaymentMethod.tsx
@@ -1,8 +1,9 @@
import { RouteProp, useRoute } from '@react-navigation/native';
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
-import { Text, TouchableOpacity } from 'react-native';
+import { TouchableOpacity } from 'react-native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import { PaymentStyle } from '../../payment/ui/style';
import ModalCard from './ModalCard';
@@ -74,7 +75,7 @@ const PaymentMethod = () => {
style={[PaymentStyle.button, { bottom: bottom + 80 }]}
onPress={toggleModal}
>
- {t("To'lash")}
+ {t("To'lash")}
);
diff --git a/src/screens/wallet/paymentMethod/ui/PaymentProduct.tsx b/src/screens/wallet/paymentMethod/ui/PaymentProduct.tsx
index 2c54ae6..19a15fb 100644
--- a/src/screens/wallet/paymentMethod/ui/PaymentProduct.tsx
+++ b/src/screens/wallet/paymentMethod/ui/PaymentProduct.tsx
@@ -1,8 +1,9 @@
import { useQuery } from '@tanstack/react-query';
import exchanges_api from 'api/exchanges';
+import AppText from 'components/AppText';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
-import { Dimensions, ScrollView, Text, View } from 'react-native';
+import { Dimensions, ScrollView, View } from 'react-native';
import Svg, { Circle, Path } from 'react-native-svg';
import Plane from 'svg/Plane';
import { PaymentStyle } from '../../payment/ui/style';
@@ -61,8 +62,12 @@ const PaymentProduct = ({ packet }: PaymentProductProps) => {
>
{data && (
<>
- {data[0].code}
- {data[0].rate} UZS
+
+ {data[0].code}
+
+
+ {data[0].rate} UZS
+
>
)}
@@ -75,8 +80,8 @@ const PaymentProduct = ({ packet }: PaymentProductProps) => {
: { flexBasis: '48%', alignItems: 'flex-end' },
]}
>
- Cargo
- 12.267 UZS/ kg
+ Cargo
+ 12.267 UZS/ kg
{/* {
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
- {t('Yetkazish vaqti')}
- 08.25.2025
+ {t('Yetkazish vaqti')}
+ 08.25.2025
*/}
{
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
- Reys
-
+ Reys
+
{packet.packetName}
-
+
{
- {item.name}
-
+ {item.name}
+
{t('Trek ID')}: {item.trackId}
-
+
-
+
{t('Og’irligi')}: {weight} kg
-
-
+
+
1kg * {formattedPrice} {t('so‘m')}
-
+
-
+
{t('Umumiy narxi')}: {formattedTotal} {t('so‘m')}
-
+
@@ -186,7 +191,9 @@ const PaymentProduct = ({ packet }: PaymentProductProps) => {
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
- {t('Umumiy narxi')}
+
+ {t('Umumiy narxi')}
+
{
: { flexBasis: '48%', alignItems: 'flex-end' },
]}
>
- {packet.totalPrice}
+
+ {packet.totalPrice}
+
diff --git a/src/screens/wallet/successPayment/ui/PaymentQrCode.tsx b/src/screens/wallet/successPayment/ui/PaymentQrCode.tsx
index 5d08287..be577c6 100644
--- a/src/screens/wallet/successPayment/ui/PaymentQrCode.tsx
+++ b/src/screens/wallet/successPayment/ui/PaymentQrCode.tsx
@@ -1,6 +1,7 @@
import { RouteProp, useRoute } from '@react-navigation/native';
import { useQuery } from '@tanstack/react-query';
import exchanges_api from 'api/exchanges';
+import AppText from 'components/AppText';
import LayoutTwo from 'components/LayoutTwo';
import * as React from 'react';
import { useTranslation } from 'react-i18next';
@@ -9,7 +10,6 @@ import {
Image,
ScrollView,
StyleSheet,
- Text,
TouchableOpacity,
View,
} from 'react-native';
@@ -92,10 +92,12 @@ const PaymentQrCode = () => {
>
{data && (
<>
- {data[0].code}
-
+
+ {data[0].code}
+
+
{data[0].rate} UZS
-
+
>
)}
@@ -108,8 +110,8 @@ const PaymentQrCode = () => {
: { flexBasis: '48%', alignItems: 'flex-end' },
]}
>
- Cargo
- 12.267 UZS/ kg
+ Cargo
+ 12.267 UZS/ kg
{/* {
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
-
+
{t('Yetkazish vaqti')}
-
- {}
+
+ {}
*/}
{
: { flexBasis: '48%', alignItems: 'flex-start' },
]}
>
- Reys
-
+ Reys
+
{packets.packetName}
-
+
{
- {item.name}
-
- {t('Trek ID')}: {item.trackId}
-
+
+ {item.name}
+
+ {t('Trek ID')}: {item.trekId}
+
+
-
+
{t('Og’irligi')}: {item.weight}
-
- 1kg * {item.unitPrice}
+
+
+ 1kg * {item.price}
+
-
- {t('Umumiy narxi')}: {item.total} {t('so‘m')}
-
+
+ {t('Umumiy narxi')}: {item.totalPrice} {t('so‘m')}
+
{
: { flexBasis: '48%', alignItems: 'flex-end' },
]}
>
- 100.000.000
+
+ {packets.totalPrice}
+
{
style={[PaymentStyle.button, { bottom: bottom + 80 }]}
onPress={toggleModal}
>
- {t("To'lash")}
+ {t("To'lash")}
)}
diff --git a/src/screens/welcome/FirstStep.tsx b/src/screens/welcome/FirstStep.tsx
index 54dce9e..6a0fffc 100644
--- a/src/screens/welcome/FirstStep.tsx
+++ b/src/screens/welcome/FirstStep.tsx
@@ -1,8 +1,8 @@
+import AppText from 'components/AppText';
import React from 'react';
import {
Image,
StyleSheet,
- Text,
TouchableOpacity,
View,
useWindowDimensions,
@@ -69,10 +69,12 @@ const FirstStep = ({
},
]}
>
-
+
{texts[lang].title}
-
-
+
{texts[lang].description}
-
+
-
+
{texts[lang].title}
-
-
+
{texts[lang].description}
-
+
- CPOST
+
+ CPOST
+
-
+
Tilni tanlang{' '}
-
+
(Выберите язык)
-
-
+
+
- O'zbek tili
+ O'zbek tili
- Русский язык
+ Русский язык
diff --git a/src/screens/welcome/ThirdStep.tsx b/src/screens/welcome/ThirdStep.tsx
index 189d6df..3ae73b6 100644
--- a/src/screens/welcome/ThirdStep.tsx
+++ b/src/screens/welcome/ThirdStep.tsx
@@ -1,8 +1,8 @@
+import AppText from 'components/AppText';
import React from 'react';
import {
Image,
StyleSheet,
- Text,
TouchableOpacity,
View,
useWindowDimensions,
@@ -70,17 +70,19 @@ const ThirdStep = ({
},
]}
>
-
+
{texts[lang].title}
-
-
+
{texts[lang].description}
-
+