diff --git a/.lintstagedrc b/.lintstagedrc
index b6be02c..78581f7 100644
--- a/.lintstagedrc
+++ b/.lintstagedrc
@@ -1,3 +1,3 @@
{
- "*": ["biome check --apply --no-errors-on-unmatched --files-ignore-unknown=true"]
+ "*": ["biome check --write --no-errors-on-unmatched"]
}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 6cec24e..d6245bd 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,7 +2,8 @@
"editor.tabSize": 4,
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
- "source.organizeImports": "explicit"
+ "source.organizeImports.biome": "explicit"
+ // "source.fixAll.biome": "explicit"
},
"npm.packageManager": "yarn",
"editor.defaultFormatter": "biomejs.biome",
diff --git a/App.tsx b/App.tsx
index c15fc7f..b37e6fa 100644
--- a/App.tsx
+++ b/App.tsx
@@ -1,35 +1,45 @@
-import { ModalsManagerProvider } from "@/contexts/ModalsManagerContext";
-import { UserAuthenticationContextProvider } from "@/contexts/UserAuthenticationContext";
-import { AppMainStackNavigatorAuthWrapper } from "@/navigations/AppMainStackNavigator";
-import theme from "@/themes/Theme";
-import ProvideQueryClient from "@components/providers_wrappers/ProvideQueryClient";
import { LOG } from "@logger";
-import { NavigationContainer } from "@react-navigation/native";
+import { DefaultTheme, NavigationContainer } from "@react-navigation/native";
import { ThemeProvider } from "@shopify/restyle";
-import ModalContainer from "react-modal-promise";
-import { SafeAreaProvider } from "react-native-safe-area-context";
-
+import { injectStoreIntoAxiosInstance } from "@/axios";
+import ProvideQueryClient from "@/contexts/ProvideQueryClient";
+import { AppMainStackNavigatorAuthWrapper } from "@/navigations/AppMainStackNavigator";
+import theme from "@/themes/Theme";
import "react-native-gesture-handler";
import "react-native-reanimated";
+import { StatusBar } from "expo-status-bar";
+import { GestureHandlerRootView } from "react-native-gesture-handler";
+import { SafeAreaProvider } from "react-native-safe-area-context";
+import { Provider } from "react-redux";
+import { store } from "./src/redux";
const log = LOG.extend("App");
+injectStoreIntoAxiosInstance(store);
export default function App() {
log.verbose("App started...");
return (
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
);
}
diff --git a/app.json b/app.json
index 06fddd2..566c3db 100644
--- a/app.json
+++ b/app.json
@@ -15,9 +15,21 @@
"assetBundlePatterns": ["**/*"],
"ios": {
"supportsTablet": true,
- "bundleIdentifier": "com.idrissouattara.beasy-mobile"
+ "bundleIdentifier": "com.idrissouattara.barnoinpay-mobile",
+ "infoPlist": {
+ "ITSAppUsesNonExemptEncryption": false,
+ "NSAppTransportSecurity": {
+ "NSExceptionDomains": {
+ "51.77.152.180": {
+ "NSIncludesSubdomains": true,
+ "NSExceptionAllowsInsecureHTTPLoads": true
+ }
+ }
+ }
+ }
},
"android": {
+ "softwareKeyboardLayoutMode": "pan",
"adaptiveIcon": {
"foregroundImage": "./assets/beasy_icon.png",
"backgroundColor": "#00875A"
@@ -26,7 +38,7 @@
"android.permission.USE_BIOMETRIC",
"android.permission.USE_FINGERPRINT"
],
- "package": "com.idrissouattara.beasymobile"
+ "package": "com.idrissouattara.barnoinpaymobile"
},
"web": {
"favicon": "./assets/favicon.png"
@@ -35,13 +47,13 @@
[
"expo-local-authentication",
{
- "faceIDPermission": "Allow B-Easy to use Face ID."
+ "faceIDPermission": "Allow BarnoinPay to use Face ID."
}
],
[
"expo-dev-launcher",
{
- "launchMode": "most-recent"
+ "launchMode": "launcher"
}
],
[
diff --git a/babel.config.js b/babel.config.js
index 2900afe..870a4bf 100644
--- a/babel.config.js
+++ b/babel.config.js
@@ -1,6 +1,7 @@
-module.exports = function(api) {
+module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
+ plugins: ['react-native-reanimated/plugin']
};
};
diff --git a/biome.json b/biome.json
index d1f86e4..cdc0333 100644
--- a/biome.json
+++ b/biome.json
@@ -1,12 +1,10 @@
{
- "$schema": "https://biomejs.dev/schemas/1.7.1/schema.json",
- "organizeImports": {
- "enabled": true
- },
+ "$schema": "https://biomejs.dev/schemas/2.2.2/schema.json",
+ "assist": { "actions": { "source": { "organizeImports": "on" } } },
"formatter": {
"enabled": true,
"formatWithErrors": false,
- "ignore": [],
+ "includes": ["**"],
"attributePosition": "auto",
"indentStyle": "tab",
"indentWidth": 4,
@@ -19,10 +17,12 @@
"recommended": true,
"correctness": {
"noUnusedImports": "warn",
- "noUnusedVariables": "warn"
+ "noUnusedVariables": "warn",
+ "useUniqueElementIds": "warn"
},
"complexity": {
- "noExcessiveCognitiveComplexity": "error"
+ "noExcessiveCognitiveComplexity": "error",
+ "noUselessFragments": "off"
},
"style": {
"useConsistentArrayType": "warn",
@@ -36,23 +36,49 @@
"useNamingConvention": {
"level": "error",
"options": {
- "requireAscii": true
+ "requireAscii": true,
+ "conventions": [
+ {
+ "selector": {
+ "kind": "objectLiteralProperty"
+ },
+ "formats": ["snake_case", "camelCase"]
+ },
+ {
+ "selector": {
+ "kind": "typeMember"
+ },
+ "formats": ["snake_case", "camelCase", "PascalCase"]
+ },
+ {
+ "selector": {
+ "kind": "typeMember"
+ },
+ "formats": ["snake_case", "camelCase", "PascalCase"]
+ }
+ ]
}
},
"useShorthandAssign": "warn"
},
"suspicious": {
- "noConsoleLog": "warn",
- "useAwait": "warn"
+ "useAwait": "warn",
+ "noConsole": { "level": "warn", "options": { "allow": ["log"] } },
+ "noDuplicateElseIf": "warn",
+ "noAssignInExpressions": "off"
},
- "nursery": {
- "noDuplicateElseIf": "warn"
- }
+ "nursery": {}
}
},
"overrides": [
{
- "include": ["src/utils/*"],
+ "includes": [
+ "**/src/utils/**/*",
+ "**/src/api/**/*",
+ "**/types.ts",
+ "**/*.ts",
+ "**/hooks/**/*"
+ ],
"linter": {
"rules": {
"style": {
@@ -65,6 +91,16 @@
}
}
}
+ },
+ {
+ "includes": ["**/src/appStylingPrimitives/**/*"],
+ "linter": {
+ "rules": {
+ "style": {
+ "useNamingConvention": "off"
+ }
+ }
+ }
}
],
"vcs": {
@@ -72,6 +108,16 @@
"clientKind": "git"
},
"files": {
- "ignore": ["babel.config.js", "eas.json"]
+ "includes": [
+ "**",
+ "!**/*.config.js",
+ "!**/*.d.ts",
+ "!**/dist",
+ "!**/android",
+ "!**/ios",
+ "!**/node_modules",
+ "!**/.expo",
+ "!**/.vscode"
+ ]
}
}
diff --git a/eas.json b/eas.json
index 88af8e1..aaee254 100644
--- a/eas.json
+++ b/eas.json
@@ -1,33 +1,36 @@
{
- "cli": {
- "version": ">= 12.0.0",
- "appVersionSource": "remote"
- },
- "build": {
- "development": {
- "env": {
- "EXPO_PUBLIC_API_URL": "http://192.168.1.223:8001"
- },
- "developmentClient": true,
- "distribution": "internal",
- "channel": "development"
- },
- "preview": {
- "env": {
- "EXPO_PUBLIC_API_URL": "http://192.168.1.223:8001"
- },
- "distribution": "internal",
- "android": {
- "buildType": "apk"
- },
- "channel": "preview"
- },
- "production": {
- "autoIncrement": true,
- "channel": "production"
- }
- },
- "submit": {
- "production": {}
- }
+ "cli": {
+ "version": ">= 12.0.0",
+ "appVersionSource": "remote"
+ },
+ "build": {
+ "development": {
+ "developmentClient": true,
+ "distribution": "internal",
+ "channel": "development",
+ "android": {
+ "buildType": "apk"
+ },
+ "env": {
+ "EXPO_PUBLIC_API_URL": "http://51.77.152.180:8000"
+ }
+ },
+ "preview": {
+ "env": {
+ "EXPO_PUBLIC_API_URL": "http://51.77.152.180:8000"
+ },
+ "distribution": "internal",
+ "android": {
+ "buildType": "apk"
+ },
+ "channel": "preview"
+ },
+ "production": {
+ "autoIncrement": true,
+ "channel": "production"
+ }
+ },
+ "submit": {
+ "production": {}
+ }
}
diff --git a/package.json b/package.json
index 4c880bc..975b08a 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "beasy-mobile",
+ "name": "barnoinpay-mobile",
"version": "1.0.0",
"main": "node_modules/expo/AppEntry.js",
"scripts": {
@@ -11,19 +11,26 @@
"format": "biome format --no-errors-on-unmatched --write .",
"lint": "biome lint --no-errors-on-unmatched --apply .",
"biome-check": "biome check --no-errors-on-unmatched --apply .",
- "prepare": "husky"
+ "prepare": "husky",
+ "version": "conventional-changelog && git add CHANGELOG.md"
},
"dependencies": {
+ "@gorhom/bottom-sheet": "^5",
"@react-native-async-storage/async-storage": "2.1.2",
- "@react-navigation/bottom-tabs": "^7.0.0-alpha.22",
- "@react-navigation/native": "^7.0.0-alpha.18",
- "@react-navigation/native-stack": "^7.0.0-alpha.20",
+ "@react-navigation/bottom-tabs": "^7.4.6",
+ "@react-navigation/native": "^7.1.17",
+ "@react-navigation/native-stack": "^7.3.25",
+ "@reduxjs/toolkit": "^2.8.2",
+ "@shopify/flash-list": "1.7.6",
"@shopify/restyle": "^2.4.4",
"@tanstack/react-query": "^5.35.1",
"axios": "^1.6.8",
"expo": "53.0.22",
"expo-build-properties": "~0.14.8",
+ "expo-checkbox": "~4.1.4",
+ "expo-contacts": "~14.2.5",
"expo-dev-client": "~5.2.4",
+ "expo-image": "~2.4.0",
"expo-local-authentication": "~16.0.5",
"expo-splash-screen": "~0.30.10",
"expo-status-bar": "~2.2.3",
@@ -32,28 +39,35 @@
"moment": "^2.30.1",
"moti": "^0.29.0",
"react": "19.0.0",
- "react-modal-promise": "^1.0.2",
"react-native": "0.79.5",
"react-native-base64": "^0.2.1",
+ "react-native-date-picker": "5.0.12",
"react-native-gesture-handler": "~2.24.0",
"react-native-keyboard-aware-scroll-view": "^0.9.5",
- "react-native-logs": "^5.1.0",
- "react-native-qrcode-svg": "^6.3.1",
+ "react-native-keyboard-controller": "^1.18.5",
+ "react-native-logs": "^5.3.0",
+ "react-native-mask-input": "^1.2.3",
+ "react-native-mmkv": "^3.3.0",
+ "react-native-qrcode-svg": "^6.3.15",
"react-native-reanimated": "~3.17.4",
"react-native-safe-area-context": "5.4.0",
"react-native-screens": "~4.11.1",
"react-native-svg": "15.11.2",
- "react-native-vector-icons": "^10.1.0"
+ "react-native-vector-icons": "^10.1.0",
+ "react-redux": "^9.2.0"
},
"devDependencies": {
"@babel/core": "^7.20.0",
- "@biomejs/biome": "1.7.1",
+ "@biomejs/biome": "^2.2.0",
+ "@react-native-community/cli": "^15.1.2",
"@types/react": "~19.0.10",
"@types/react-native-base64": "^0.2.2",
"@types/react-native-vector-icons": "^6.4.18",
+ "conventional-changelog": "^7.1.1",
"husky": "^9.0.11",
"lint-staged": "^15.2.2",
"prop-types": "^15.8.1",
+ "react-native-svg-transformer": "^1.5.0",
"typescript": "~5.8.3"
},
"private": true
diff --git a/src/appStylingPrimitives/README.MD b/src/appStylingPrimitives/README.MD
new file mode 100644
index 0000000..eae8046
--- /dev/null
+++ b/src/appStylingPrimitives/README.MD
@@ -0,0 +1 @@
+# A set of primitives to make styling components faster through the use of tailwind type anotations.
diff --git a/src/appStylingPrimitives/asp.ts b/src/appStylingPrimitives/asp.ts
new file mode 100644
index 0000000..b5b3748
--- /dev/null
+++ b/src/appStylingPrimitives/asp.ts
@@ -0,0 +1,953 @@
+import { Platform, StyleSheet } from "react-native";
+
+import * as tokens from "./tokens";
+
+export const asp = {
+ debug: {
+ borderColor: "red",
+ borderWidth: 1,
+ },
+
+ /*
+ * Positioning
+ */
+ fixed: {
+ position: Platform.select({ web: "fixed", native: "absolute" }) as "absolute",
+ },
+ absolute: {
+ position: "absolute",
+ },
+ relative: {
+ position: "relative",
+ },
+ static: {
+ position: "static",
+ },
+
+ inset_0: {
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0,
+ },
+ top_0: {
+ top: 0,
+ },
+ right_0: {
+ right: 0,
+ },
+ bottom_0: {
+ bottom: 0,
+ },
+ left_0: {
+ left: 0,
+ },
+ z_10: {
+ zIndex: 10,
+ },
+ z_20: {
+ zIndex: 20,
+ },
+ z_30: {
+ zIndex: 30,
+ },
+ z_40: {
+ zIndex: 40,
+ },
+ z_50: {
+ zIndex: 50,
+ },
+
+ overflow_hidden: {
+ overflow: "hidden",
+ },
+
+ /*
+ * Width & Height
+ */
+ w_full: {
+ width: "100%",
+ },
+ h_full: {
+ height: "100%",
+ },
+
+ max_w_full: {
+ maxWidth: "100%",
+ },
+ max_h_full: {
+ maxHeight: "100%",
+ },
+
+ /*
+ * Theme-independent bg colors
+ */
+ bg_transparent: {
+ backgroundColor: "transparent",
+ },
+
+ /*
+ * Border radius
+ */
+ rounded_0: {
+ borderRadius: 0,
+ },
+ rounded_2xs: {
+ borderRadius: tokens.borderRadius._2xs,
+ },
+ rounded_xs: {
+ borderRadius: tokens.borderRadius.xs,
+ },
+ rounded_sm: {
+ borderRadius: tokens.borderRadius.sm,
+ },
+ rounded_md: {
+ borderRadius: tokens.borderRadius.md,
+ },
+ rounded_lg: {
+ borderRadius: tokens.borderRadius.lg,
+ },
+ rounded_full: {
+ borderRadius: tokens.borderRadius.full,
+ },
+
+ /*
+ * Flex
+ */
+ gap_0: {
+ gap: 0,
+ },
+ gap_2xs: {
+ gap: tokens.space._2xs,
+ },
+ gap_xs: {
+ gap: tokens.space.xs,
+ },
+ gap_sm: {
+ gap: tokens.space.sm,
+ },
+ gap_md: {
+ gap: tokens.space.md,
+ },
+ gap_lg: {
+ gap: tokens.space.lg,
+ },
+ gap_xl: {
+ gap: tokens.space.xl,
+ },
+ gap_2xl: {
+ gap: tokens.space._2xl,
+ },
+ gap_3xl: {
+ gap: tokens.space._3xl,
+ },
+ gap_4xl: {
+ gap: tokens.space._4xl,
+ },
+ gap_5xl: {
+ gap: tokens.space._5xl,
+ },
+ flex: {
+ display: "flex",
+ },
+ flex_col: {
+ flexDirection: "column",
+ },
+ flex_row: {
+ flexDirection: "row",
+ },
+ flex_col_reverse: {
+ flexDirection: "column-reverse",
+ },
+ flex_row_reverse: {
+ flexDirection: "row-reverse",
+ },
+ flex_wrap: {
+ flexWrap: "wrap",
+ },
+ flex_nowrap: {
+ flexWrap: "nowrap",
+ },
+ flex_0: {
+ flex: 0,
+ },
+ flex_1: {
+ flex: 1,
+ },
+ flex_grow: {
+ flexGrow: 1,
+ },
+ flex_grow_0: {
+ flexGrow: 0,
+ },
+ flex_shrink: {
+ flexShrink: 1,
+ },
+ flex_shrink_0: {
+ flexShrink: 0,
+ },
+ justify_start: {
+ justifyContent: "flex-start",
+ },
+ justify_center: {
+ justifyContent: "center",
+ },
+ justify_between: {
+ justifyContent: "space-between",
+ },
+ justify_around: {
+ justifyContent: "space-around",
+ },
+ justify_end: {
+ justifyContent: "flex-end",
+ },
+ align_center: {
+ alignItems: "center",
+ },
+ align_start: {
+ alignItems: "flex-start",
+ },
+ align_end: {
+ alignItems: "flex-end",
+ },
+ align_baseline: {
+ alignItems: "baseline",
+ },
+ align_stretch: {
+ alignItems: "stretch",
+ },
+ self_auto: {
+ alignSelf: "auto",
+ },
+ self_start: {
+ alignSelf: "flex-start",
+ },
+ self_end: {
+ alignSelf: "flex-end",
+ },
+ self_center: {
+ alignSelf: "center",
+ },
+ self_stretch: {
+ alignSelf: "stretch",
+ },
+ self_baseline: {
+ alignSelf: "baseline",
+ },
+
+ /*
+ * Text
+ */
+ text_left: {
+ textAlign: "left",
+ },
+ text_center: {
+ textAlign: "center",
+ },
+ text_right: {
+ textAlign: "right",
+ },
+ text_2xs: {
+ fontSize: tokens.fontSize._2xs,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_xs: {
+ fontSize: tokens.fontSize.xs,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_sm: {
+ fontSize: tokens.fontSize.sm,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_md: {
+ fontSize: tokens.fontSize.md,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_lg: {
+ fontSize: tokens.fontSize.lg,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_xl: {
+ fontSize: tokens.fontSize.xl,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_2xl: {
+ fontSize: tokens.fontSize._2xl,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_3xl: {
+ fontSize: tokens.fontSize._3xl,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_4xl: {
+ fontSize: tokens.fontSize._4xl,
+ letterSpacing: tokens.TRACKING,
+ },
+ text_5xl: {
+ fontSize: tokens.fontSize._5xl,
+ letterSpacing: tokens.TRACKING,
+ },
+ leading_tight: {
+ lineHeight: 1.15,
+ },
+ leading_snug: {
+ lineHeight: 1.3,
+ },
+ leading_normal: {
+ lineHeight: 1.5,
+ },
+ tracking_normal: {
+ letterSpacing: tokens.TRACKING,
+ },
+ font_normal: {
+ fontWeight: tokens.fontWeight.normal,
+ },
+ font_bold: {
+ fontWeight: tokens.fontWeight.bold,
+ },
+ font_heavy: {
+ fontWeight: tokens.fontWeight.black,
+ },
+ italic: {
+ fontStyle: "italic",
+ },
+
+ /*
+ * Border
+ */
+ border_0: {
+ borderWidth: 0,
+ },
+ border_t_0: {
+ borderTopWidth: 0,
+ },
+ border_b_0: {
+ borderBottomWidth: 0,
+ },
+ border_l_0: {
+ borderLeftWidth: 0,
+ },
+ border_r_0: {
+ borderRightWidth: 0,
+ },
+ border: {
+ borderWidth: StyleSheet.hairlineWidth,
+ },
+ border_t: {
+ borderTopWidth: StyleSheet.hairlineWidth,
+ },
+ border_b: {
+ borderBottomWidth: StyleSheet.hairlineWidth,
+ },
+ border_l: {
+ borderLeftWidth: StyleSheet.hairlineWidth,
+ },
+ border_r: {
+ borderRightWidth: StyleSheet.hairlineWidth,
+ },
+ border_transparent: {
+ borderColor: "transparent",
+ },
+
+ /*
+ * Shadow
+ */
+ shadow_sm: {
+ shadowRadius: 8,
+ shadowOpacity: 0.1,
+ elevation: 8,
+ },
+ shadow_md: {
+ shadowRadius: 16,
+ shadowOpacity: 0.1,
+ elevation: 16,
+ },
+ shadow_lg: {
+ shadowRadius: 32,
+ shadowOpacity: 0.1,
+ elevation: 24,
+ },
+ shadow_elevated: {
+ shadowColor: "black",
+ shadowOpacity: 0.25,
+ shadowOffset: { width: 0, height: 3 },
+ shadowRadius: 3.84,
+ elevation: 5,
+ },
+
+ /*
+ * Padding
+ */
+ p_0: {
+ padding: 0,
+ },
+ p_2xs: {
+ padding: tokens.space._2xs,
+ },
+ p_xs: {
+ padding: tokens.space.xs,
+ },
+ p_sm: {
+ padding: tokens.space.sm,
+ },
+ p_md: {
+ padding: tokens.space.md,
+ },
+ p_lg: {
+ padding: tokens.space.lg,
+ },
+ p_xl: {
+ padding: tokens.space.xl,
+ },
+ p_2xl: {
+ padding: tokens.space._2xl,
+ },
+ p_3xl: {
+ padding: tokens.space._3xl,
+ },
+ p_4xl: {
+ padding: tokens.space._4xl,
+ },
+ p_5xl: {
+ padding: tokens.space._5xl,
+ },
+ px_0: {
+ paddingLeft: 0,
+ paddingRight: 0,
+ },
+ px_2xs: {
+ paddingLeft: tokens.space._2xs,
+ paddingRight: tokens.space._2xs,
+ },
+ px_xs: {
+ paddingLeft: tokens.space.xs,
+ paddingRight: tokens.space.xs,
+ },
+ px_sm: {
+ paddingLeft: tokens.space.sm,
+ paddingRight: tokens.space.sm,
+ },
+ px_md: {
+ paddingLeft: tokens.space.md,
+ paddingRight: tokens.space.md,
+ },
+ px_lg: {
+ paddingLeft: tokens.space.lg,
+ paddingRight: tokens.space.lg,
+ },
+ px_xl: {
+ paddingLeft: tokens.space.xl,
+ paddingRight: tokens.space.xl,
+ },
+ px_2xl: {
+ paddingLeft: tokens.space._2xl,
+ paddingRight: tokens.space._2xl,
+ },
+ px_3xl: {
+ paddingLeft: tokens.space._3xl,
+ paddingRight: tokens.space._3xl,
+ },
+ px_4xl: {
+ paddingLeft: tokens.space._4xl,
+ paddingRight: tokens.space._4xl,
+ },
+ px_5xl: {
+ paddingLeft: tokens.space._5xl,
+ paddingRight: tokens.space._5xl,
+ },
+ py_0: {
+ paddingTop: 0,
+ paddingBottom: 0,
+ },
+ py_2xs: {
+ paddingTop: tokens.space._2xs,
+ paddingBottom: tokens.space._2xs,
+ },
+ py_xs: {
+ paddingTop: tokens.space.xs,
+ paddingBottom: tokens.space.xs,
+ },
+ py_sm: {
+ paddingTop: tokens.space.sm,
+ paddingBottom: tokens.space.sm,
+ },
+ py_md: {
+ paddingTop: tokens.space.md,
+ paddingBottom: tokens.space.md,
+ },
+ py_lg: {
+ paddingTop: tokens.space.lg,
+ paddingBottom: tokens.space.lg,
+ },
+ py_xl: {
+ paddingTop: tokens.space.xl,
+ paddingBottom: tokens.space.xl,
+ },
+ py_2xl: {
+ paddingTop: tokens.space._2xl,
+ paddingBottom: tokens.space._2xl,
+ },
+ py_3xl: {
+ paddingTop: tokens.space._3xl,
+ paddingBottom: tokens.space._3xl,
+ },
+ py_4xl: {
+ paddingTop: tokens.space._4xl,
+ paddingBottom: tokens.space._4xl,
+ },
+ py_5xl: {
+ paddingTop: tokens.space._5xl,
+ paddingBottom: tokens.space._5xl,
+ },
+ pt_0: {
+ paddingTop: 0,
+ },
+ pt_2xs: {
+ paddingTop: tokens.space._2xs,
+ },
+ pt_xs: {
+ paddingTop: tokens.space.xs,
+ },
+ pt_sm: {
+ paddingTop: tokens.space.sm,
+ },
+ pt_md: {
+ paddingTop: tokens.space.md,
+ },
+ pt_lg: {
+ paddingTop: tokens.space.lg,
+ },
+ pt_xl: {
+ paddingTop: tokens.space.xl,
+ },
+ pt_2xl: {
+ paddingTop: tokens.space._2xl,
+ },
+ pt_3xl: {
+ paddingTop: tokens.space._3xl,
+ },
+ pt_4xl: {
+ paddingTop: tokens.space._4xl,
+ },
+ pt_5xl: {
+ paddingTop: tokens.space._5xl,
+ },
+ pb_0: {
+ paddingBottom: 0,
+ },
+ pb_2xs: {
+ paddingBottom: tokens.space._2xs,
+ },
+ pb_xs: {
+ paddingBottom: tokens.space.xs,
+ },
+ pb_sm: {
+ paddingBottom: tokens.space.sm,
+ },
+ pb_md: {
+ paddingBottom: tokens.space.md,
+ },
+ pb_lg: {
+ paddingBottom: tokens.space.lg,
+ },
+ pb_xl: {
+ paddingBottom: tokens.space.xl,
+ },
+ pb_2xl: {
+ paddingBottom: tokens.space._2xl,
+ },
+ pb_3xl: {
+ paddingBottom: tokens.space._3xl,
+ },
+ pb_4xl: {
+ paddingBottom: tokens.space._4xl,
+ },
+ pb_5xl: {
+ paddingBottom: tokens.space._5xl,
+ },
+ pl_0: {
+ paddingLeft: 0,
+ },
+ pl_2xs: {
+ paddingLeft: tokens.space._2xs,
+ },
+ pl_xs: {
+ paddingLeft: tokens.space.xs,
+ },
+ pl_sm: {
+ paddingLeft: tokens.space.sm,
+ },
+ pl_md: {
+ paddingLeft: tokens.space.md,
+ },
+ pl_lg: {
+ paddingLeft: tokens.space.lg,
+ },
+ pl_xl: {
+ paddingLeft: tokens.space.xl,
+ },
+ pl_2xl: {
+ paddingLeft: tokens.space._2xl,
+ },
+ pl_3xl: {
+ paddingLeft: tokens.space._3xl,
+ },
+ pl_4xl: {
+ paddingLeft: tokens.space._4xl,
+ },
+ pl_5xl: {
+ paddingLeft: tokens.space._5xl,
+ },
+ pr_0: {
+ paddingRight: 0,
+ },
+ pr_2xs: {
+ paddingRight: tokens.space._2xs,
+ },
+ pr_xs: {
+ paddingRight: tokens.space.xs,
+ },
+ pr_sm: {
+ paddingRight: tokens.space.sm,
+ },
+ pr_md: {
+ paddingRight: tokens.space.md,
+ },
+ pr_lg: {
+ paddingRight: tokens.space.lg,
+ },
+ pr_xl: {
+ paddingRight: tokens.space.xl,
+ },
+ pr_2xl: {
+ paddingRight: tokens.space._2xl,
+ },
+ pr_3xl: {
+ paddingRight: tokens.space._3xl,
+ },
+ pr_4xl: {
+ paddingRight: tokens.space._4xl,
+ },
+ pr_5xl: {
+ paddingRight: tokens.space._5xl,
+ },
+
+ /*
+ * Margin
+ */
+ m_0: {
+ margin: 0,
+ },
+ m_2xs: {
+ margin: tokens.space._2xs,
+ },
+ m_xs: {
+ margin: tokens.space.xs,
+ },
+ m_sm: {
+ margin: tokens.space.sm,
+ },
+ m_md: {
+ margin: tokens.space.md,
+ },
+ m_lg: {
+ margin: tokens.space.lg,
+ },
+ m_xl: {
+ margin: tokens.space.xl,
+ },
+ m_2xl: {
+ margin: tokens.space._2xl,
+ },
+ m_3xl: {
+ margin: tokens.space._3xl,
+ },
+ m_4xl: {
+ margin: tokens.space._4xl,
+ },
+ m_5xl: {
+ margin: tokens.space._5xl,
+ },
+ m_auto: {
+ margin: "auto",
+ },
+ mx_0: {
+ marginLeft: 0,
+ marginRight: 0,
+ },
+ mx_2xs: {
+ marginLeft: tokens.space._2xs,
+ marginRight: tokens.space._2xs,
+ },
+ mx_xs: {
+ marginLeft: tokens.space.xs,
+ marginRight: tokens.space.xs,
+ },
+ mx_sm: {
+ marginLeft: tokens.space.sm,
+ marginRight: tokens.space.sm,
+ },
+ mx_md: {
+ marginLeft: tokens.space.md,
+ marginRight: tokens.space.md,
+ },
+ mx_lg: {
+ marginLeft: tokens.space.lg,
+ marginRight: tokens.space.lg,
+ },
+ mx_xl: {
+ marginLeft: tokens.space.xl,
+ marginRight: tokens.space.xl,
+ },
+ mx_2xl: {
+ marginLeft: tokens.space._2xl,
+ marginRight: tokens.space._2xl,
+ },
+ mx_3xl: {
+ marginLeft: tokens.space._3xl,
+ marginRight: tokens.space._3xl,
+ },
+ mx_4xl: {
+ marginLeft: tokens.space._4xl,
+ marginRight: tokens.space._4xl,
+ },
+ mx_5xl: {
+ marginLeft: tokens.space._5xl,
+ marginRight: tokens.space._5xl,
+ },
+ mx_auto: {
+ marginLeft: "auto",
+ marginRight: "auto",
+ },
+ my_0: {
+ marginTop: 0,
+ marginBottom: 0,
+ },
+ my_2xs: {
+ marginTop: tokens.space._2xs,
+ marginBottom: tokens.space._2xs,
+ },
+ my_xs: {
+ marginTop: tokens.space.xs,
+ marginBottom: tokens.space.xs,
+ },
+ my_sm: {
+ marginTop: tokens.space.sm,
+ marginBottom: tokens.space.sm,
+ },
+ my_md: {
+ marginTop: tokens.space.md,
+ marginBottom: tokens.space.md,
+ },
+ my_lg: {
+ marginTop: tokens.space.lg,
+ marginBottom: tokens.space.lg,
+ },
+ my_xl: {
+ marginTop: tokens.space.xl,
+ marginBottom: tokens.space.xl,
+ },
+ my_2xl: {
+ marginTop: tokens.space._2xl,
+ marginBottom: tokens.space._2xl,
+ },
+ my_3xl: {
+ marginTop: tokens.space._3xl,
+ marginBottom: tokens.space._3xl,
+ },
+ my_4xl: {
+ marginTop: tokens.space._4xl,
+ marginBottom: tokens.space._4xl,
+ },
+ my_5xl: {
+ marginTop: tokens.space._5xl,
+ marginBottom: tokens.space._5xl,
+ },
+ my_auto: {
+ marginTop: "auto",
+ marginBottom: "auto",
+ },
+ mt_0: {
+ marginTop: 0,
+ },
+ mt_2xs: {
+ marginTop: tokens.space._2xs,
+ },
+ mt_xs: {
+ marginTop: tokens.space.xs,
+ },
+ mt_sm: {
+ marginTop: tokens.space.sm,
+ },
+ mt_md: {
+ marginTop: tokens.space.md,
+ },
+ mt_lg: {
+ marginTop: tokens.space.lg,
+ },
+ mt_xl: {
+ marginTop: tokens.space.xl,
+ },
+ mt_2xl: {
+ marginTop: tokens.space._2xl,
+ },
+ mt_3xl: {
+ marginTop: tokens.space._3xl,
+ },
+ mt_4xl: {
+ marginTop: tokens.space._4xl,
+ },
+ mt_5xl: {
+ marginTop: tokens.space._5xl,
+ },
+ mt_auto: {
+ marginTop: "auto",
+ },
+ mb_0: {
+ marginBottom: 0,
+ },
+ mb_2xs: {
+ marginBottom: tokens.space._2xs,
+ },
+ mb_xs: {
+ marginBottom: tokens.space.xs,
+ },
+ mb_sm: {
+ marginBottom: tokens.space.sm,
+ },
+ mb_md: {
+ marginBottom: tokens.space.md,
+ },
+ mb_lg: {
+ marginBottom: tokens.space.lg,
+ },
+ mb_xl: {
+ marginBottom: tokens.space.xl,
+ },
+ mb_2xl: {
+ marginBottom: tokens.space._2xl,
+ },
+ mb_3xl: {
+ marginBottom: tokens.space._3xl,
+ },
+ mb_4xl: {
+ marginBottom: tokens.space._4xl,
+ },
+ mb_5xl: {
+ marginBottom: tokens.space._5xl,
+ },
+ mb_auto: {
+ marginBottom: "auto",
+ },
+ ml_0: {
+ marginLeft: 0,
+ },
+ ml_2xs: {
+ marginLeft: tokens.space._2xs,
+ },
+ ml_xs: {
+ marginLeft: tokens.space.xs,
+ },
+ ml_sm: {
+ marginLeft: tokens.space.sm,
+ },
+ ml_md: {
+ marginLeft: tokens.space.md,
+ },
+ ml_lg: {
+ marginLeft: tokens.space.lg,
+ },
+ ml_xl: {
+ marginLeft: tokens.space.xl,
+ },
+ ml_2xl: {
+ marginLeft: tokens.space._2xl,
+ },
+ ml_3xl: {
+ marginLeft: tokens.space._3xl,
+ },
+ ml_4xl: {
+ marginLeft: tokens.space._4xl,
+ },
+ ml_5xl: {
+ marginLeft: tokens.space._5xl,
+ },
+ ml_auto: {
+ marginLeft: "auto",
+ },
+ mr_0: {
+ marginRight: 0,
+ },
+ mr_2xs: {
+ marginRight: tokens.space._2xs,
+ },
+ mr_xs: {
+ marginRight: tokens.space.xs,
+ },
+ mr_sm: {
+ marginRight: tokens.space.sm,
+ },
+ mr_md: {
+ marginRight: tokens.space.md,
+ },
+ mr_lg: {
+ marginRight: tokens.space.lg,
+ },
+ mr_xl: {
+ marginRight: tokens.space.xl,
+ },
+ mr_2xl: {
+ marginRight: tokens.space._2xl,
+ },
+ mr_3xl: {
+ marginRight: tokens.space._3xl,
+ },
+ mr_4xl: {
+ marginRight: tokens.space._4xl,
+ },
+ mr_5xl: {
+ marginRight: tokens.space._5xl,
+ },
+ mr_auto: {
+ marginRight: "auto",
+ },
+
+ /*
+ * Pointer events & user select
+ */
+ pointer_events_none: {
+ pointerEvents: "none",
+ },
+ pointer_events_auto: {
+ pointerEvents: "auto",
+ },
+ user_select_none: {
+ userSelect: "none",
+ },
+ user_select_text: {
+ userSelect: "text",
+ },
+ user_select_all: {
+ userSelect: "all",
+ },
+ outline_inset_1: {
+ outlineOffset: -1,
+ },
+
+ /*
+ * Text decoration
+ */
+ underline: {
+ textDecorationLine: "underline",
+ },
+ strike_through: {
+ textDecorationLine: "line-through",
+ },
+
+ /*
+ * Display
+ */
+ hidden: {
+ display: "none",
+ },
+} as const;
diff --git a/src/appStylingPrimitives/tokens.ts b/src/appStylingPrimitives/tokens.ts
new file mode 100644
index 0000000..8ca1a59
--- /dev/null
+++ b/src/appStylingPrimitives/tokens.ts
@@ -0,0 +1,58 @@
+import { Platform } from "react-native";
+export const TRACKING = Platform.OS === "android" ? 0.1 : 0;
+
+export const space = {
+ _2xs: 2,
+ xs: 4,
+ sm: 8,
+ md: 12,
+ lg: 16,
+ xl: 20,
+ _2xl: 24,
+ _3xl: 28,
+ _4xl: 32,
+ _5xl: 40,
+} as const;
+
+export const fontSize = {
+ _2xs: 10,
+ xs: 12,
+ sm: 14,
+ md: 16,
+ lg: 18,
+ xl: 20,
+ _2xl: 22,
+ _3xl: 26,
+ _4xl: 32,
+ _5xl: 40,
+} as const;
+
+export const lineHeight = {
+ none: 1,
+ normal: 1.5,
+ relaxed: 1.625,
+} as const;
+
+export const borderRadius = {
+ _2xs: 2,
+ xs: 4,
+ sm: 8,
+ md: 12,
+ lg: 16,
+ full: 999,
+} as const;
+
+/**
+ * These correspond to Inter font files we actually load.
+ */
+export const fontWeight = {
+ thin: "100",
+ extralight: "200",
+ light: "300",
+ normal: "400",
+ medium: "500",
+ semibold: "600",
+ bold: "700",
+ extrabold: "800",
+ black: "900",
+} as const;
diff --git a/src/axios/index.ts b/src/axios/index.ts
new file mode 100644
index 0000000..93586af
--- /dev/null
+++ b/src/axios/index.ts
@@ -0,0 +1,72 @@
+import { LOG } from "@logger";
+import axios from "axios";
+import type { AppReduxStore } from "@/redux";
+
+const log = LOG.extend("AxiosInstance");
+
+let store: AppReduxStore;
+
+export const injectStoreIntoAxiosInstance = (_store: AppReduxStore) => {
+ store = _store;
+};
+
+export const axiosInstance = axios.create({
+ // biome-ignore lint/style/useNamingConvention:
+ baseURL: process.env.EXPO_PUBLIC_API_URL,
+});
+
+axiosInstance.interceptors.request.use(
+ (config) => {
+ config.headers.authorization = `Bearer ${store.getState().auth.token.access}`;
+ config.auth = {
+ username: "admin",
+ password: "admin",
+ };
+
+ log.http({ "Request Interceptor Config": config });
+ return config;
+ },
+ (error) => {
+ log.error({ "Request Interceptor Error": error });
+ return Promise.reject(error);
+ },
+);
+
+axiosInstance.interceptors.response.use(
+ (response) => {
+ log.http({ "Response Interceptor Response Data": response.data });
+ return response;
+ },
+ (error) => {
+ log.error({ "Response Interceptor Error": error });
+
+ if (error.response) {
+ const { status, data } = error.response;
+ switch (status) {
+ case 400:
+ log.error({ message: "Bad Request", status, data });
+ break;
+ case 401:
+ log.error({
+ message: "Unauthorized, setting auth status to False",
+ status,
+ data,
+ });
+ // Handle unauthorized access, e.g., redirect to login
+ break;
+ case 404:
+ log.error({ message: "Not Found", status, data });
+ break;
+ case 500:
+ log.error("Server Error:", "Please try again later");
+ // Display a user-friendly message, log the error
+ break;
+ default:
+ log.error({ message: "Unknown Error", status, data });
+ break;
+ }
+ }
+
+ return Promise.reject(error);
+ },
+);
diff --git a/src/components/Balance.tsx b/src/components/Balance.tsx
new file mode 100644
index 0000000..8fc4088
--- /dev/null
+++ b/src/components/Balance.tsx
@@ -0,0 +1,55 @@
+import { asp as g } from "@asp/asp";
+import Entypo from "@expo/vector-icons/Entypo";
+import { ImageBackground } from "expo-image";
+import * as LocalAuthentication from "expo-local-authentication";
+import { type FC, useState } from "react";
+import type { ViewProps } from "react-native";
+import { Text, TouchableOpacity } from "react-native";
+
+type BalanceProps = Omit & { amount: number };
+
+export const Balance: FC = ({ style, amount = 0, ...rest }) => {
+ const [showBalance, setShowBalance] = useState(false);
+
+ const handleLocalAuthentication = async () => {
+ console.log("handleLocalAuthentication :: start");
+ if (showBalance) {
+ return setShowBalance(false);
+ }
+ const result = await LocalAuthentication.authenticateAsync();
+ if (result.success) {
+ setShowBalance(true);
+ }
+ console.log("handleLocalAuthentication :: end", result);
+ };
+
+ return (
+
+ {showBalance ? (
+ setShowBalance(false)}>
+ {amount}
+
+ ) : (
+
+ )}
+
+ );
+};
diff --git a/src/components/BalanceContainer.tsx b/src/components/BalanceContainer.tsx
deleted file mode 100644
index 911ab6b..0000000
--- a/src/components/BalanceContainer.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
-import Card from "@re-card";
-import { images } from "@styles/Commons";
-import * as LocalAuthentication from "expo-local-authentication";
-import { useState } from "react";
-import { Image, TouchableOpacity } from "react-native";
-
-type Props = { balance: number; label: string };
-
-const BalanceContainer = ({ label, balance }: Props) => {
- const [showBalance, setShowBalance] = useState(false);
-
- const handleLocalAuthentication = async () => {
- console.log("handleLocalAuthentication :: start");
- if (showBalance) {
- return setShowBalance(false);
- }
- const result = await LocalAuthentication.authenticateAsync();
- if (result.success) {
- setShowBalance(true);
- }
- console.log("handleLocalAuthentication :: end", result);
- };
-
- return (
-
-
-
-
-
-
-
-
- {showBalance ? (
-
- {balance}
-
- ) : (
-
-
-
- )}
-
-
-
- {label}
-
-
- );
-};
-
-export default BalanceContainer;
diff --git a/src/components/BarWithBeasyAndNotificationsIcon.tsx b/src/components/BarWithBeasyAndNotificationsIcon.tsx
deleted file mode 100644
index 63ad568..0000000
--- a/src/components/BarWithBeasyAndNotificationsIcon.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import {} from "react-native";
-import BeasyLogoIcon from "./BeasyLogoIcon";
-import NotificationIconButton from "./NotificationIconButton";
-import Box from "./bases/Box";
-
-const BarWithBeasyAndNotificationsIcon = () => {
- return (
-
-
-
-
- );
-};
-
-export default BarWithBeasyAndNotificationsIcon;
diff --git a/src/components/BarnoinPayBackground.tsx b/src/components/BarnoinPayBackground.tsx
new file mode 100644
index 0000000..eabd218
--- /dev/null
+++ b/src/components/BarnoinPayBackground.tsx
@@ -0,0 +1,18 @@
+import { asp as g } from "@asp/asp";
+import { ImageBackground } from "expo-image";
+import type { FC } from "react";
+import type { ViewProps } from "react-native";
+import { useSafeAreaInsets } from "react-native-safe-area-context";
+
+export const BarnoinPayBackground: FC = ({ children, style, ...rest }) => {
+ const insets = useSafeAreaInsets();
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/components/BeasyLogoIcon.tsx b/src/components/BeasyLogoIcon.tsx
index 9f41baf..b616cb4 100644
--- a/src/components/BeasyLogoIcon.tsx
+++ b/src/components/BeasyLogoIcon.tsx
@@ -1,10 +1,15 @@
+import { asp as g } from "@asp/asp";
import Box from "@components/bases/Box";
-import { images } from "@styles/Commons";
import { Image } from "react-native";
+
const BeasyLogoIcon = () => {
return (
-
+
);
};
diff --git a/src/components/Button.tsx b/src/components/Button.tsx
index f8423d0..e260e5c 100644
--- a/src/components/Button.tsx
+++ b/src/components/Button.tsx
@@ -1,36 +1,42 @@
-import type { BoxProps, VariantProps } from "@shopify/restyle";
-import type { Theme } from "@themes/Theme";
-import { ActivityIndicator, TouchableOpacity } from "react-native";
-import ButtonBase from "./bases/ButtonBase";
-import Text from "./bases/Text";
+import { asp as g } from "@asp/asp";
+import type { FC } from "react";
+import {
+ ActivityIndicator,
+ Text,
+ type TextProps,
+ TouchableOpacity,
+ type TouchableOpacityProps,
+} from "react-native";
-type Props = BoxProps &
- VariantProps &
- VariantProps & {
- label: string;
- onPress: () => void;
- isLoading?: boolean;
- };
+const DEFAULT_HEIGHT = 50;
-const Button = ({ onPress, label, isLoading, textVariants, variant, ...rest }: Props) => {
+type ContainerProps = TouchableOpacityProps & {
+ isLoading?: boolean;
+};
+
+export const Container: FC = ({ children, style, isLoading, onPress, ...rest }) => {
return (
-
-
- {isLoading ? (
-
- ) : (
- {label}
- )}
-
+
+ {isLoading ? : children}
);
};
-export default Button;
+export const Label: FC = ({ children, style, ...rest }) => {
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/components/ContainerBorderTopCurved.tsx b/src/components/ContainerBorderTopCurved.tsx
deleted file mode 100644
index e330f7e..0000000
--- a/src/components/ContainerBorderTopCurved.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-import { containers } from "@styles/Commons";
-import { useEffect } from "react";
-import { Animated, Dimensions } from "react-native";
-import Box from "./bases/Box";
-
-type Props = { children: React.ReactNode };
-const ContainerBorderTopCurved = ({ children }: Props) => {
- const animated = new Animated.Value(0);
- // biome-ignore lint/correctness/useExhaustiveDependencies:
- useEffect(() => {
- Animated.spring(animated, {
- toValue: 1,
- useNativeDriver: true,
- }).start();
- }, []);
-
- return (
-
-
- {children}
-
-
- );
-};
-
-export default ContainerBorderTopCurved;
diff --git a/src/components/GoBackIconButton.tsx b/src/components/GoBackIconButton.tsx
deleted file mode 100644
index 05033b5..0000000
--- a/src/components/GoBackIconButton.tsx
+++ /dev/null
@@ -1,18 +0,0 @@
-import Box from "@components/bases/Box";
-import { Ionicons } from "@expo/vector-icons";
-import { TouchableOpacity } from "react-native";
-
-type Props = {
- onPress: () => void;
-};
-const GoBackIconButton = ({ onPress }: Props) => {
- return (
-
-
-
-
-
- );
-};
-
-export default GoBackIconButton;
diff --git a/src/components/Input.tsx b/src/components/Input.tsx
index 7ce7e0c..94b0ece 100644
--- a/src/components/Input.tsx
+++ b/src/components/Input.tsx
@@ -1,19 +1,70 @@
-import type { VariantProps } from "@shopify/restyle";
-import type { Theme } from "@themes/Theme";
-import type { TextInputProps } from "react-native";
-import { TextInput } from "react-native";
-import Box from "./bases/Box";
+import { asp as g } from "@asp/asp";
+import type { FC } from "react";
+import {
+ Text,
+ TextInput,
+ type TextInputProps,
+ type TextProps,
+ View,
+ type ViewProps,
+} from "react-native";
-type Props = TextInputProps & VariantProps;
+const DEFAULT_HEIGHT = 50;
-const Input = ({ textVariants, ...rest }: Props) => {
+export const Container: FC = ({ children, style, ...rest }) => {
return (
-
-
-
-
-
+
+ {children}
+
);
};
-export default Input;
+export const Header: FC = ({ children, style, ...rest }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export const FieldContainer: FC = ({ children, style, ...rest }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+export const Field: FC }> = ({
+ style,
+ ref,
+ ...props
+}) => {
+ return (
+
+ );
+};
diff --git a/src/components/InputWithTopLabel.tsx b/src/components/InputWithTopLabel.tsx
deleted file mode 100644
index 25ca24e..0000000
--- a/src/components/InputWithTopLabel.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import type { VariantProps } from "@shopify/restyle";
-import type { Theme } from "@themes/Theme";
-import type { TextInputProps } from "react-native";
-import { TextInput } from "react-native";
-import Box from "./bases/Box";
-import Text from "./bases/Text";
-
-type Props = TextInputProps &
- VariantProps & {
- label: string;
- };
-
-const InputWithTopLabel = ({ label, textVariants, ...rest }: Props) => {
- return (
-
- {label}
-
-
-
-
- );
-};
-
-export default InputWithTopLabel;
diff --git a/src/components/Modal.tsx b/src/components/Modal.tsx
new file mode 100644
index 0000000..83458f7
--- /dev/null
+++ b/src/components/Modal.tsx
@@ -0,0 +1,64 @@
+import { asp as g } from "@asp/asp";
+import type { FC } from "react";
+import { Modal, type ModalProps, View, type ViewProps, type ViewStyle } from "react-native";
+import { SafeAreaProvider, SafeAreaView } from "react-native-safe-area-context";
+
+/**
+ * A view container that wraps a {@link SafeAreaView} and a {@link SafeAreaProvider}.
+ * This is useful for modal components that should be centered and have a safe area.
+ *
+ * @param {ViewProps} props The props to pass to the {@link View} component.
+ * @returns {React.ReactElement} The container component.
+ */
+export const SafeView: FC = ({ children, style, ...rest }) => {
+ return (
+
+
+ {children}
+
+
+ );
+};
+
+/**
+ * RnModal is a styled Modal component that provides a basic styling for the
+ * inner content of a modal. It centers the content horizontally and vertically
+ * and provides a light green background color with rounded corners.
+ *
+ * @param {JSX.Element | JSX.Element[]} children The content to be rendered
+ * inside the modal.
+ * @param {ViewStyle} style Optional style overrides for the modal's outer View.
+ * @param {ModalProps} rest Optional props.
+ *
+ * @returns A styled Modal component with the inner content.
+ */
+export const RnModal: FC = ({ children, style, ...rest }) => {
+ return (
+
+ {children}
+
+ );
+};
+
+/**
+ * OuterView is a styled View component that provides a basic styling for the
+ * inner content of a modal. It centers the content horizontally and vertically
+ * and provides a light green background color with rounded corners.
+ *
+ * @param {JSX.Element | JSX.Element[]} children The content to be rendered
+ * inside the modal.
+ * @param {ViewProps} style Optional style overrides.
+ * @param {ViewProps} rest Optional props.
+ *
+ * @returns A styled View component with the inner content.
+ */
+export const OuterView: FC = ({ children, style, ...rest }) => {
+ return (
+
+ {children}
+
+ );
+};
diff --git a/src/components/NotificationIconButton.tsx b/src/components/NotificationIconButton.tsx
deleted file mode 100644
index 7a49a63..0000000
--- a/src/components/NotificationIconButton.tsx
+++ /dev/null
@@ -1,34 +0,0 @@
-import Box from "@components/bases/Box";
-import { Ionicons } from "@expo/vector-icons";
-const NotificationIconButton = () => {
- return (
-
-
-
-
-
-
- );
-};
-
-export default NotificationIconButton;
diff --git a/src/components/PaymentOption.tsx b/src/components/PaymentOption.tsx
deleted file mode 100644
index c83f6b6..0000000
--- a/src/components/PaymentOption.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import type { PaymentCode } from "@/utils/requests/types";
-import { images } from "@styles/Commons";
-import { Image, TouchableOpacity } from "react-native";
-import Box from "./bases/Box";
-
-type PaymentOptions = "OM" | "MTN" | "FLOOZ" | "WAVE" | "CB";
-
-type Props = {
- onPress: () => void;
- paymentMethod: PaymentCode;
-};
-
-const PaymentOptionContainer = ({ children }: { children: React.ReactNode }) => {
- return (
-
- {children}
-
- );
-};
-
-const Orange = () => {
- return (
-
- );
-};
-
-const Mtn = () => {
- return ;
-};
-
-const Flooz = () => {
- return ;
-};
-
-const Wave = () => {
- return ;
-};
-
-const Cb = () => {
- return ;
-};
-
-const PaymentOption = ({ onPress, paymentMethod }: Props) => {
- return (
-
- {paymentMethod === "OM" && }
- {paymentMethod === "MTN" && }
- {paymentMethod === "FLOOZ" && }
- {paymentMethod === "WAVE" && }
- {paymentMethod === "CB" && }
-
- );
-};
-
-export default PaymentOption;
diff --git a/src/components/PaymentsOptionsRendererTwoColumn.tsx b/src/components/PaymentsOptionsRendererTwoColumn.tsx
deleted file mode 100644
index bd2dd39..0000000
--- a/src/components/PaymentsOptionsRendererTwoColumn.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import type React from "react";
-import { Dimensions } from "react-native";
-import Box from "./bases/Box";
-
-// const PaymentsOptionsRendererTwoColumn = () => {
-// return (
-//
-//
-//
-// navigation.navigate("paymentAmountInputScreen")}
-// paymentMethod={"OrangeMoney"}
-// />
-//
-//
-// navigation.navigate("paymentAmountInputScreen")}
-// paymentMethod={"MtnMoney"}
-// />
-//
-//
-//
-//
-// navigation.navigate("paymentAmountInputScreen")}
-// paymentMethod={"MoovMoney"}
-// />
-//
-//
-// navigation.navigate("paymentAmountInputScreen")}
-// paymentMethod={"WaveMoney"}
-// />
-//
-//
-//
-// navigation.navigate("paymentAmountInputScreen")}
-// paymentMethod={"VisaCard"}
-// />
-//
-//
-// );
-// };
-
-const screenWidth = Dimensions.get("window").width;
-const paymentOptionCardWidth = screenWidth / 2 - 30;
-const paymentOptionCardHeight = paymentOptionCardWidth * 0.65;
-const PaymentOptionContainer = ({ children }: { children: React.ReactNode }) => {
- return (
-
- {children}
-
- );
-};
-
-// export default PaymentsOptionsRendererTwoColumn;
diff --git a/src/components/TransactionInformationsItem.tsx b/src/components/TransactionInformationsItem.tsx
deleted file mode 100644
index d6a0e43..0000000
--- a/src/components/TransactionInformationsItem.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import type { PaymentCode } from "@/utils/requests/types";
-import moment from "moment";
-import "moment/locale/fr";
-import PaymentOption from "./PaymentOption";
-import Box from "./bases/Box";
-import Text from "./bases/Text";
-
-interface Props {
- paymentType: PaymentCode;
- reference: string;
- date: string;
- amount: number;
- status: "SUCCESS" | "INITIATED" | "FAILED";
-}
-
-moment.locale("fr");
-
-const TransactionInformationsItem = ({ paymentType, reference, date, amount, status }: Props) => {
- const dateObject = Date.parse(date);
- return (
-
-
-
- {}} />
-
-
- {reference}
- {moment(dateObject).fromNow()}
-
-
-
-
-
-
-
- );
-};
-
-const AmountColorRenderer = ({ status, amount }: { status: string; amount: number }) => {
- if (status === "SUCCESS") {
- return {amount};
- }
- if (status === "INITIATED") {
- return {amount};
- }
- return {amount};
-};
-
-const AmountWrapper = ({
- color,
- children,
-}: { color: "secondary" | "softYellow" | "softRed"; children: React.ReactNode }) => {
- return (
-
-
- {children} F
-
-
- );
-};
-
-export default TransactionInformationsItem;
diff --git a/src/components/WrapperTopEdgeCurved.tsx b/src/components/WrapperTopEdgeCurved.tsx
deleted file mode 100644
index a74ac8c..0000000
--- a/src/components/WrapperTopEdgeCurved.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import type React from "react";
-import Box from "./bases/Box";
-
-const WrapperTopEdgeCurved = ({ children }: { children?: React.ReactElement }) => {
- return (
-
- {children}
-
- );
-};
-
-export default WrapperTopEdgeCurved;
diff --git a/src/components/backgrounds/BackgroundGreenWhiteContentArea.tsx b/src/components/backgrounds/BackgroundGreenWhiteContentArea.tsx
deleted file mode 100644
index 12a8070..0000000
--- a/src/components/backgrounds/BackgroundGreenWhiteContentArea.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import { containers, images } from "@styles/Commons";
-import { ImageBackground, View } from "react-native";
-
-type Props = { children: React.ReactNode };
-
-const BackgroundGreenWhiteContentArea = ({ children }: Props) => {
- return (
-
-
- {children}
-
-
- );
-};
-
-export default BackgroundGreenWhiteContentArea;
diff --git a/src/components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea.tsx b/src/components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea.tsx
deleted file mode 100644
index a440727..0000000
--- a/src/components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import BeasyLogoIcon from "@components/BeasyLogoIcon";
-import GoBackIconButton from "@components/GoBackIconButton";
-import WrapperTopEdgeCurved from "@components/WrapperTopEdgeCurved";
-import Box from "@components/bases/Box";
-import { useNavigation } from "@react-navigation/native";
-import type { ReactElement } from "react";
-import BackgroundDefault from "./BeasyDefaultBackground";
-
-const BackgroundWithBeasyIconAndWhiteContentArea = ({
- children,
- goBack = false,
-}: { children?: ReactElement; goBack?: boolean }) => {
- const navigation = useNavigation();
- return (
-
-
-
- {goBack && navigation.goBack()} />}
-
- {children}
-
- );
-};
-
-export default BackgroundWithBeasyIconAndWhiteContentArea;
diff --git a/src/components/backgrounds/BeasyDefaultBackground.tsx b/src/components/backgrounds/BeasyDefaultBackground.tsx
deleted file mode 100644
index 3e54f17..0000000
--- a/src/components/backgrounds/BeasyDefaultBackground.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { images } from "@styles/Commons";
-import { ImageBackground } from "react-native";
-
-type Props = { children: React.ReactNode };
-
-const BeasyDefaultBackground = ({ children }: Props) => {
- return (
-
- {children}
-
- );
-};
-
-export default BeasyDefaultBackground;
diff --git a/src/components/bases/ButtonBase.tsx b/src/components/bases/ButtonBase.tsx
deleted file mode 100644
index 87885db..0000000
--- a/src/components/bases/ButtonBase.tsx
+++ /dev/null
@@ -1,14 +0,0 @@
-import { type BoxProps, type VariantProps, createRestyleComponent } from "@shopify/restyle";
-import type { Theme } from "@themes/Theme";
-import { buttonVariants } from "@themes/Variants";
-import Box from "./Box";
-
-const ButtonBase = createRestyleComponent<
- VariantProps &
- BoxProps & {
- children: React.ReactNode;
- },
- Theme
->([buttonVariants], Box);
-
-export default ButtonBase;
diff --git a/src/components/bases/Card.tsx b/src/components/bases/Card.tsx
deleted file mode 100644
index 7393772..0000000
--- a/src/components/bases/Card.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import type { Theme } from "@/themes/Theme";
-import Box from "@re-box";
-import { type VariantProps, createRestyleComponent, createVariant } from "@shopify/restyle";
-
-const Card = createRestyleComponent<
- VariantProps & React.ComponentProps,
- Theme
->(
- [
- createVariant({
- themeKey: "cardVariants",
- defaults: {
- margin: {
- phone: "s",
- tablet: "m",
- },
- backgroundColor: "red",
- },
- }),
- ],
- Box,
-);
-export default Card;
diff --git a/src/components/bases/Text.tsx b/src/components/bases/Text.tsx
deleted file mode 100644
index ad64fae..0000000
--- a/src/components/bases/Text.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import type { Theme } from "@/themes/Theme";
-import { createText } from "@shopify/restyle";
-
-const Text = createText();
-
-export default Text;
diff --git a/src/components/containers/SafeAreaViewTopLeftRightFull.tsx b/src/components/containers/SafeAreaViewTopLeftRightFull.tsx
deleted file mode 100644
index 4454c82..0000000
--- a/src/components/containers/SafeAreaViewTopLeftRightFull.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import Box from "@components/bases/Box";
-import type React from "react";
-import {} from "react-native";
-import { SafeAreaView } from "react-native-safe-area-context";
-
-const SafeAreaViewTopLeftRightFull = ({ children }: { children: React.ReactNode }) => {
- return (
-
-
- {children}
-
-
- );
-};
-
-export default SafeAreaViewTopLeftRightFull;
diff --git a/src/components/icons/CheckIcon.tsx b/src/components/icons/CheckIcon.tsx
index 014924d..3182522 100644
--- a/src/components/icons/CheckIcon.tsx
+++ b/src/components/icons/CheckIcon.tsx
@@ -1,5 +1,5 @@
+import { asp as g } from "@asp/asp";
import Box from "@components/bases/Box";
-import { images } from "@styles/Commons";
import { Image } from "react-native";
const CheckIcon = () => {
@@ -7,7 +7,8 @@ const CheckIcon = () => {
);
diff --git a/src/components/icons/ErrorIcon.tsx b/src/components/icons/ErrorIcon.tsx
index c3dc64e..c7eeb9f 100644
--- a/src/components/icons/ErrorIcon.tsx
+++ b/src/components/icons/ErrorIcon.tsx
@@ -1,5 +1,5 @@
+import { asp as g } from "@asp/asp";
import Box from "@components/bases/Box";
-import { images } from "@styles/Commons";
import { Image } from "react-native";
const ErrorIcon = () => {
@@ -7,7 +7,8 @@ const ErrorIcon = () => {
);
diff --git a/src/components/icons/InformationIcon.tsx b/src/components/icons/InformationIcon.tsx
index 429b096..5cc263c 100644
--- a/src/components/icons/InformationIcon.tsx
+++ b/src/components/icons/InformationIcon.tsx
@@ -1,5 +1,5 @@
+import { asp as g } from "@asp/asp";
import Box from "@components/bases/Box";
-import { images } from "@styles/Commons";
import { Image } from "react-native";
const InformationIcon = () => {
@@ -7,7 +7,8 @@ const InformationIcon = () => {
);
diff --git a/src/components/modals/ErrorModal.tsx b/src/components/modals/ErrorModal.tsx
deleted file mode 100644
index e932ea0..0000000
--- a/src/components/modals/ErrorModal.tsx
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useModalsManagerContext } from "@/contexts/ModalsManagerContext";
-import Button from "@components/Button";
-import ErrorIcon from "@components/icons/ErrorIcon";
-import Box from "@re-box";
-import Card from "@re-card";
-import Text from "@re-text";
-
-interface Props {
- message?: string;
- // onPress?: () => void;
-}
-
-const ErrorModal = ({ message = "Une erreur s'est produite" }: Props) => {
- const { closeModal } = useModalsManagerContext();
- return (
-
-
-
- {message}
-
-
-
-
-
- );
-};
-
-export default ErrorModal;
diff --git a/src/components/modals/InformationModal.tsx b/src/components/modals/InformationModal.tsx
deleted file mode 100644
index 7afc7fa..0000000
--- a/src/components/modals/InformationModal.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { useModalsManagerContext } from "@/contexts/ModalsManagerContext";
-import Button from "@components/Button";
-import Box from "@components/bases/Box";
-import InformationIcon from "@components/icons/InformationIcon";
-import { Text } from "react-native";
-
-interface Props {
- message?: string;
- onPress?: () => void;
- actionLabel?: string;
-}
-
-const InformationModal = ({
- message = "Une erreur s'est produite",
- onPress = undefined,
- actionLabel = "Ok",
-}: Props) => {
- const { closeModal } = useModalsManagerContext();
- return (
-
-
- {message}
-
- {onPress && (
-
- )}
-
-
-
-
- );
-};
-
-export default InformationModal;
diff --git a/src/components/modals/LoadingModal.tsx b/src/components/modals/LoadingModal.tsx
deleted file mode 100644
index 87d1e3e..0000000
--- a/src/components/modals/LoadingModal.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import Box from "@components/bases/Box";
-import { ActivityIndicator, Text } from "react-native";
-
-interface Props {
- message?: string;
-}
-
-const LoadingModal = ({ message = "Veuillez patienter..." }: Props) => {
- return (
-
-
- {message}
-
- );
-};
-
-export default LoadingModal;
diff --git a/src/components/modals/MyModal.tsx b/src/components/modals/MyModal.tsx
deleted file mode 100644
index 35dbd67..0000000
--- a/src/components/modals/MyModal.tsx
+++ /dev/null
@@ -1,59 +0,0 @@
-import Button from "@components/Button";
-import Box from "@components/bases/Box";
-import InformationIcon from "@components/icons/InformationIcon";
-import { create } from "react-modal-promise";
-import { Text } from "react-native";
-
-interface Props {
- isOpen: boolean;
- onResolve: () => void;
- // biome-ignore lint/suspicious/noExplicitAny:
- onReject: any;
-}
-
-const MyModal = ({ isOpen, onResolve, onReject }: Props) => {
- return (
-
-
- Modal
-
-
-
-
-
- );
-};
-
-const myPromiseModal = create(MyModal);
-
-export { myPromiseModal };
-
-export default MyModal;
diff --git a/src/components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaFull.tsx b/src/components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaFull.tsx
deleted file mode 100644
index 052d0e2..0000000
--- a/src/components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaFull.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import BeasyDefaultBackground from "@components/backgrounds/BeasyDefaultBackground";
-import type React from "react";
-import { SafeAreaView } from "react-native-safe-area-context";
-
-type Props = { children: React.ReactNode };
-
-const WrapperWithDefaultBeasyBackgroundAndSafeAreaFull = ({ children }: Props) => {
- return (
-
- {children}
-
- );
-};
-
-export default WrapperWithDefaultBeasyBackgroundAndSafeAreaFull;
diff --git a/src/components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight.tsx b/src/components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight.tsx
deleted file mode 100644
index 33a0103..0000000
--- a/src/components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import BeasyDefaultBackground from "@components/backgrounds/BeasyDefaultBackground";
-import type React from "react";
-import { SafeAreaView } from "react-native-safe-area-context";
-
-type Props = { children: React.ReactNode };
-
-const WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight = ({ children }: Props) => {
- return (
-
- {children}
-
- );
-};
-
-export default WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight;
diff --git a/src/contexts/ModalsManagerContext.tsx b/src/contexts/ModalsManagerContext.tsx
deleted file mode 100644
index 5d83af6..0000000
--- a/src/contexts/ModalsManagerContext.tsx
+++ /dev/null
@@ -1,77 +0,0 @@
-import { createContext, useContext, useEffect, useState } from "react";
-import { View } from "react-native";
-
-export interface ImodalsManagerContext {
- showModal(element: React.ReactElement): void;
- closeModal(): void;
-}
-
-export const ModalsManagerContext = createContext({
- showModal: () => {},
- closeModal: () => {},
-});
-
-export const ModalsManagerProvider = ({ children }: { children: React.ReactNode }) => {
- const [showBackdrop, setShowBackdrop] = useState(false);
-
- const [modalElement, setModalElement] = useState(null);
-
- const showModal = (element: React.ReactElement) => {
- setModalElement(element);
- setShowBackdrop(true);
- };
-
- const closeModal = () => {
- setModalElement(null);
- setShowBackdrop(false);
- };
-
- useEffect(() => {
- return () => {
- setShowBackdrop(false);
- setModalElement(null);
- };
- }, []);
-
- return (
-
- {children}
-
- {modalElement && (
- <>
-
- {modalElement}
- >
- )}
-
- );
-};
-
-export const useModalsManagerContext = () => {
- return useContext(ModalsManagerContext);
-};
-
-export const OVERLAY_BACKDROP_Z_INDEX = 10;
-
-const OverlayBackdrop = () => {
- return (
-
- );
-};
diff --git a/src/components/providers_wrappers/ProvideQueryClient.tsx b/src/contexts/ProvideQueryClient.tsx
similarity index 100%
rename from src/components/providers_wrappers/ProvideQueryClient.tsx
rename to src/contexts/ProvideQueryClient.tsx
diff --git a/src/contexts/Types.ts b/src/contexts/Types.ts
deleted file mode 100644
index e831cc6..0000000
--- a/src/contexts/Types.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-export interface IauthenticationData {
- access: string;
- refresh: string;
-}
diff --git a/src/contexts/UserAuthenticationContext.tsx b/src/contexts/UserAuthenticationContext.tsx
deleted file mode 100644
index e3b902d..0000000
--- a/src/contexts/UserAuthenticationContext.tsx
+++ /dev/null
@@ -1,286 +0,0 @@
-import cacheAssetsAsync from "@/utils/assetsCache";
-import authenticateUser, { parseAuthicationErrors } from "@/utils/requests/authenticateUser";
-import type { IuserInformations } from "@/utils/requests/types";
-import getUserInformations, {
- parseUserInformationsErrors,
-} from "@/utils/requests/userInformations";
-import ErrorModal from "@components/modals/ErrorModal";
-import { LOG } from "@logger";
-import AsyncStorage from "@react-native-async-storage/async-storage";
-// import { type NavigationProp, useNavigation } from "@react-navigation/native";
-import { useMutation } from "@tanstack/react-query";
-import * as SplashScreen from "expo-splash-screen";
-import { createContext, useCallback, useContext, useEffect, useState } from "react";
-import { useModalsManagerContext } from "./ModalsManagerContext";
-import type { IauthenticationData } from "./Types";
-
-const log = LOG.extend("UserAuthenticationContext");
-
-SplashScreen.preventAutoHideAsync();
-
-export interface UserAuthenticationContextProps {
- isAuthenticated: boolean;
- setIsAuthenticated: React.Dispatch>;
- setAuthenticationData: React.Dispatch>;
- userInformations: IuserInformations;
- setUserInformations: React.Dispatch>;
- login: (email: string, password: string) => void;
- isAuthenticating: boolean;
- logout: () => void;
-}
-
-export const UserAuthenticationContext = createContext({
- isAuthenticated: false,
- setIsAuthenticated: () => {},
- setAuthenticationData: () => {},
- userInformations: {
- username: "",
- email: "",
- // biome-ignore lint/style/useNamingConvention:
- first_name: "",
- // biome-ignore lint/style/useNamingConvention:
- last_name: "",
- marchand: {
- // biome-ignore lint/style/useNamingConvention:
- marchand_id: "",
- nom: "",
- code: "",
- adresse: "",
- // biome-ignore lint/style/useNamingConvention:
- url_succes: "",
- // biome-ignore lint/style/useNamingConvention:
- url_echec: "",
- entreprise: 0,
- user: 0,
- },
- },
- setUserInformations: () => {},
- login: () => {},
- isAuthenticating: false,
- logout: () => {},
-});
-
-export const UserAuthenticationContextProvider = ({ children }: { children: React.ReactNode }) => {
- // States
-
- const [isAuthenticated, setIsAuthenticated] = useState(false);
- const [isAuthenticating, setIsAuthenticating] = useState(false);
- const [authenticationData, setAuthenticationData] = useState({
- access: "",
- refresh: "",
- });
- const [error, setError] = useState("");
- const [userInformations, setUserInformations] = useState({
- username: "JohnDoe",
- email: "JohnDoe@example.com",
- // biome-ignore lint/style/useNamingConvention:
- first_name: "John",
- // biome-ignore lint/style/useNamingConvention:
- last_name: "Doe",
- marchand: {
- // biome-ignore lint/style/useNamingConvention:
- marchand_id: "id123",
- nom: "Beasy",
- code: "BEASY-EXAMPLE-1",
- adresse: "Plateau 2, 1023, Immeuble Chardy",
- // biome-ignore lint/style/useNamingConvention:
- url_succes: "https://example.com/success",
- // biome-ignore lint/style/useNamingConvention:
- url_echec: "https://example.com/echec",
- entreprise: 0,
- user: 0,
- },
- });
-
- // Hoooks
- const { showModal } = useModalsManagerContext();
-
- // const navigation = useNavigation>();
-
- // Mutations
-
- const authenticationMutation = useMutation({
- mutationFn: authenticateUser,
- onMutate: () => {
- setIsAuthenticating(true);
- setError("");
- },
- onSuccess: (data) => {
- setAuthenticationData(data);
-
- log.info("Receive data from authenticateUser, running getUserInformations...");
- userInformationsMutation.mutate(data.access);
- },
- onError: (error: unknown) => {
- const errorString = parseAuthicationErrors(error);
- showModal();
- },
- onSettled: () => {
- setIsAuthenticating(false);
- },
- });
-
- const userInformationsMutation = useMutation({
- mutationFn: (userAccessToken: string) => getUserInformations(userAccessToken),
- onMutate: () => {
- setIsAuthenticating(true);
- setError("");
- },
- onSettled: () => {
- setIsAuthenticating(false);
- },
- onSuccess: (userInformations) => {
- log.info("getUserInformations request was a success, navigating to homepage");
- setUserInformations(userInformations);
- setIsAuthenticated(true);
- storeAuthenticationData(authenticationData);
- storeUserInformations(userInformations);
- // navigation.navigate("appBottomTabsNavigator");
- },
- onError: (error) => {
- log.error("userInformationsMutation", error);
- const errorString = parseUserInformationsErrors(error);
- showModal();
- clearStorages();
- },
- });
-
- // Methods
-
- const login = useCallback(
- (email: string, password: string) => {
- authenticationMutation.mutate({
- username: email,
- password: password,
- });
- },
- [authenticationMutation],
- );
-
- const logout = useCallback(() => {
- (async () => {
- setIsAuthenticated(false);
- setAuthenticationData({
- access: "",
- refresh: "",
- });
- setUserInformations({
- username: "",
- email: "",
- // biome-ignore lint/style/useNamingConvention:
- first_name: "",
- // biome-ignore lint/style/useNamingConvention:
- last_name: "",
- marchand: {
- // biome-ignore lint/style/useNamingConvention:
- marchand_id: "",
- nom: "",
- code: "",
- adresse: "",
- // biome-ignore lint/style/useNamingConvention:
- url_succes: "",
- // biome-ignore lint/style/useNamingConvention:
- url_echec: "",
- entreprise: 0,
- user: 0,
- },
- });
- await clearStorages();
- })();
- }, []);
-
- // Storages
-
- const storeAuthenticationData = async (authenticationData: IauthenticationData) => {
- try {
- await AsyncStorage.setItem("authenticationData", JSON.stringify(authenticationData));
- } catch (error) {
- log.error("storeAuthenticationData |", JSON.stringify(error, null, 2));
- // saving error
- }
- };
-
- const storeUserInformations = async (userInformations: IuserInformations) => {
- try {
- await AsyncStorage.setItem("userInformations", JSON.stringify(userInformations));
- } catch (error) {
- log.error("storeUserInformations |", JSON.stringify(error, null, 2));
- // saving error
- }
- };
-
- const clearStorages = async () => {
- try {
- await AsyncStorage.clear();
- } catch (error) {
- log.error("clearStorages |", JSON.stringify(error, null, 2));
- // saving error
- }
- };
-
- const loadAuthenticationData = async () => {
- log.debug("loadAuthenticationData | Loading authentication data");
- const jsonRepresentation = await AsyncStorage.getItem("authenticationData");
- return jsonRepresentation ? JSON.parse(jsonRepresentation) : null;
- };
-
- const loadUserInformations = async () => {
- log.debug("loadUserInformations | Loading user informations");
- const jsonRepresentation = await AsyncStorage.getItem("userInformations");
- return jsonRepresentation ? JSON.parse(jsonRepresentation) : null;
- };
-
- // biome-ignore lint/correctness/useExhaustiveDependencies:
- useEffect(() => {
- log.debug("UserAuthenticationContext | App Startup | loading saved user data.");
- (async () => {
- try {
- // await loadAssetsAsync();
- await cacheAssetsAsync({
- images: [
- "../assets/background_default.png",
- "../assets/beasy_default.png",
- "../assets/beasy_background.png",
- "../assets/background_content_white2.png",
- "../../assets/background.png",
- ],
- });
- const authenticationData = await loadAuthenticationData();
- const userInformations = await loadUserInformations();
- if (authenticationData && userInformations) {
- setAuthenticationData(authenticationData);
- setUserInformations(userInformations);
- setIsAuthenticated(true);
- }
- } catch (error) {
- log.error(
- "UserAuthenticationContext | App Startup | error during retrieval of stored data |",
- JSON.stringify(error, null, 2),
- );
- } finally {
- setTimeout(async () => await SplashScreen.hideAsync(), 500);
- }
- })();
- }, []);
-
- return (
-
- {children}
-
- );
-};
-
-export const useUserAuthenticationContext = () => {
- return useContext(UserAuthenticationContext);
-};
diff --git a/src/features/auth/api.ts b/src/features/auth/api.ts
new file mode 100644
index 0000000..ebe5ec1
--- /dev/null
+++ b/src/features/auth/api.ts
@@ -0,0 +1,11 @@
+import { axiosInstance } from "@/axios";
+import type { LoginPayload, Token, UserData } from "./types";
+
+export const login = (data: LoginPayload) => {
+ return axiosInstance.post("/login/token/", data);
+};
+
+// On this one you just provide the bear token and its should return the userData.
+export const getUserData = () => {
+ return axiosInstance.get("/user-info/");
+};
diff --git a/src/features/auth/components/LoginForm.tsx b/src/features/auth/components/LoginForm.tsx
new file mode 100644
index 0000000..df9eb21
--- /dev/null
+++ b/src/features/auth/components/LoginForm.tsx
@@ -0,0 +1,98 @@
+import { asp as g } from "@asp/asp";
+import * as Button from "@components/Button";
+import * as Input from "@components/Input";
+import * as Modal from "@components/Modal";
+import { MaterialIcons } from "@expo/vector-icons";
+import Feather from "@expo/vector-icons/Feather";
+import { useMutation } from "@tanstack/react-query";
+import type { AxiosError } from "axios";
+import { useRef, useState } from "react";
+import { Text, View } from "react-native";
+import { useDispatch } from "react-redux";
+import { getUserData, login } from "../api";
+import { setToken, setUserData } from "../slice";
+
+export const LoginForm = () => {
+ const dispatch = useDispatch();
+
+ const usernameRef = useRef("");
+ const passwordRef = useRef("");
+
+ const loginMutation = useMutation({
+ mutationFn: () => login({ username: usernameRef.current, password: passwordRef.current }),
+ onSuccess: (data) => {
+ dispatch(setToken(data.data));
+ useDataMutation.mutate();
+ },
+ onError: (error: AxiosError) => {
+ setError(JSON.stringify(error.response?.data) || error.message);
+ },
+ });
+
+ const useDataMutation = useMutation({
+ mutationFn: getUserData,
+ onSuccess: (data) => {
+ dispatch(setUserData(data.data));
+ },
+ });
+
+ const [error, setError] = useState("");
+ return (
+
+ Connexion
+ Bienvenue, vous nous avez manqué !
+
+
+ Addresse e-mail
+
+
+ (usernameRef.current = v)} />
+
+
+
+
+ Mot de passe
+
+
+ (passwordRef.current = v)} />
+
+
+
+ loginMutation.mutate()}
+ >
+ Se connecter
+
+
+ Créer un compte
+
+
+ {/* MODAL */}
+
+
+
+ {error}
+
+ setError("")}>
+ OK
+
+
+
+
+
+ );
+};
diff --git a/src/features/auth/slice.ts b/src/features/auth/slice.ts
new file mode 100644
index 0000000..a1d92bd
--- /dev/null
+++ b/src/features/auth/slice.ts
@@ -0,0 +1,42 @@
+import type { PayloadAction } from "@reduxjs/toolkit";
+import { createSlice } from "@reduxjs/toolkit";
+import type { Token, UserData, UserDataAndToken } from "./types";
+
+export interface AuthState {
+ isAuthenticated: boolean;
+ user: UserData;
+ token: Token;
+}
+
+const initialState: AuthState = {
+ isAuthenticated: false,
+ user: {} as UserData,
+ token: {} as Token,
+};
+
+export const authSlice = createSlice({
+ name: "auth",
+ initialState: initialState,
+ reducers: {
+ setToken: (state, action: PayloadAction) => {
+ state.token = action.payload;
+ },
+ setUserData: (state, action: PayloadAction) => {
+ state.user = action.payload;
+ state.isAuthenticated = true;
+ },
+ login: (state, action: PayloadAction) => {
+ state.isAuthenticated = true;
+ state.user = action.payload.user;
+ state.token = action.payload.tokens;
+ },
+ logout: (state) => {
+ state.isAuthenticated = false;
+ state.token = {} as Token;
+ state.user = {} as UserData;
+ },
+ },
+});
+
+export const { login, logout, setToken, setUserData } = authSlice.actions;
+export const authReducer = authSlice.reducer;
diff --git a/src/features/auth/types.ts b/src/features/auth/types.ts
new file mode 100644
index 0000000..b6087a7
--- /dev/null
+++ b/src/features/auth/types.ts
@@ -0,0 +1,34 @@
+export interface Merchant {
+ marchand_id: string;
+ nom: string;
+ code: string;
+ adresse: string;
+ url_succes: string;
+ url_echec: string;
+ entreprise: number;
+ user: number;
+}
+export type UserData = {
+ id: number;
+ username: string;
+ email: string;
+ first_name: string;
+ last_name: string;
+ role: string;
+ marchand: Merchant;
+};
+
+export type Token = {
+ access: string;
+ refresh: string;
+};
+
+export type LoginPayload = {
+ username: string;
+ password: string;
+};
+
+export type UserDataAndToken = {
+ user: UserData;
+ tokens: Token;
+};
diff --git a/src/features/pay/api.ts b/src/features/pay/api.ts
new file mode 100644
index 0000000..354b00d
--- /dev/null
+++ b/src/features/pay/api.ts
@@ -0,0 +1,61 @@
+import { axiosInstance } from "@/axios";
+import type {
+ DjangoPaginated,
+ OmTransaction,
+ OmInitializationPayload as OmTransactionInitializationPayload,
+ OmInitializationResponse as OmTransactionInitializationResponse,
+ PaymentType,
+ Transaction,
+ WaveInitializationPayload,
+ WaveTransactionInitilizationResponse,
+} from "./types";
+
+export const getPaymentTypes = () => {
+ return axiosInstance.get>>("/operateur/");
+};
+
+// OM
+
+export const omInitializeTransaction = (payload: OmTransactionInitializationPayload) => {
+ return axiosInstance.post("/transactions/", payload);
+};
+
+export const omVerifyTransactionState = (orderId: string) => {
+ return axiosInstance.get(`/api/TransactionCheckStatus/${orderId}/`);
+};
+
+export const omVerifyTransactionStateWithTimeout = async (
+ orderId: string,
+ timeout: number,
+ retryAfter = 5000,
+) => {
+ const sleep = (ms: number) => {
+ return new Promise((resolve) => setTimeout(resolve, ms));
+ };
+ const now = Date.now();
+
+ while (true) {
+ const result = await omVerifyTransactionState(orderId);
+ if (result.data.status !== "INITIATED") {
+ return result;
+ }
+
+ if (Date.now() - now > timeout) {
+ throw result;
+ }
+
+ await sleep(retryAfter);
+ }
+};
+
+export const waveInitializeTransaction = (payload: WaveInitializationPayload) => {
+ return axiosInstance.post("/transactions/", payload);
+};
+
+export const waveGetTransactionStatus = (id: string) => {
+ return axiosInstance.get(`/wave-session/${id}/`);
+};
+
+export const getTransactions = () => {
+ return axiosInstance.get>("/transactions/");
+};
diff --git a/src/features/pay/components/PaymentType.tsx b/src/features/pay/components/PaymentType.tsx
new file mode 100644
index 0000000..d06049c
--- /dev/null
+++ b/src/features/pay/components/PaymentType.tsx
@@ -0,0 +1,30 @@
+/** biome-ignore-all lint/style/useNamingConvention: */
+
+import { asp as g } from "@asp/asp";
+import { Image } from "expo-image";
+import type { FC } from "react";
+import { TouchableOpacity, type TouchableOpacityProps } from "react-native";
+import type { PaymentTypeCode } from "../types";
+
+const Images = {
+ OM: require("@assets/operators/orange_money.png"),
+ MTN: require("@assets/operators/mtn_money.png"),
+ WAVE: require("@assets/operators/wave_money.png"),
+ FLOOZ: require("@assets/operators/moov_money.png"),
+ CB: require("@assets/operators/visa_card.png"),
+};
+
+type PaymentTypeProps = Omit & { type: PaymentTypeCode };
+
+const PaymentType: FC = ({ style, type, ...rest }) => {
+ return (
+
+
+
+ );
+};
+
+export default PaymentType;
diff --git a/src/features/pay/components/TransactionItem.tsx b/src/features/pay/components/TransactionItem.tsx
new file mode 100644
index 0000000..5357f78
--- /dev/null
+++ b/src/features/pay/components/TransactionItem.tsx
@@ -0,0 +1,46 @@
+import moment from "moment";
+import "moment/locale/fr";
+import { asp as g } from "@asp/asp";
+import type { FC } from "react";
+import { Text, View } from "react-native";
+import type { Transaction } from "../types";
+import PaymentType from "./PaymentType";
+
+moment.locale("fr");
+
+export const TransactionItem: FC<{ transaction: Transaction }> = ({ transaction }) => {
+ const { type_paiement_label, reference, date, montant, status } = transaction;
+ const dateObject = Date.parse(date);
+ const color = status === "SUCCESS" ? "green" : status === "INITIATED" ? "orange" : "red";
+ return (
+
+
+
+
+
+
+ {reference}
+ {moment(dateObject).fromNow()}
+
+
+
+
+ {montant}
+
+
+ );
+};
diff --git a/src/features/pay/types.ts b/src/features/pay/types.ts
new file mode 100644
index 0000000..bcd5987
--- /dev/null
+++ b/src/features/pay/types.ts
@@ -0,0 +1,107 @@
+export type PaymentTypeCode = "OM" | "FLOOZ" | "MTN" | "WAVE" | "CB";
+
+export interface PaymentType {
+ reference: number;
+ nom: string;
+ description: string;
+ code: PaymentTypeCode;
+ etat: boolean;
+ type_operateur: string;
+}
+
+export interface DjangoPaginated {
+ count: number;
+ next: string | null;
+ previous: string | null;
+ results: T;
+}
+
+export interface Merchant {
+ marchand_id: string;
+ nom: string;
+ code: string;
+ adresse: string;
+ url_succes: string;
+ url_echec: string;
+ entreprise: number;
+ user: number;
+}
+
+export interface IuserInformations {
+ username: string;
+ email: string;
+ first_name: string;
+ last_name: string;
+ marchand: Merchant;
+}
+
+// ORANGE MONEY
+
+export type OmInitializationPayload = {
+ type_paiement: number;
+ marchand: string;
+ service: string;
+ montant: number;
+ commentaire: string;
+ numero: string;
+};
+
+export type OmInitializationResponse = {
+ status: number;
+ message: string;
+ pay_token: string;
+ payment_url: string;
+ notif_token: string;
+ order_id: string;
+};
+
+export type OmTransactionState = "INITIATED" | "SUCCESS" | "FAILED";
+export interface OmTransaction {
+ status: OmTransactionState;
+ code: number;
+ message: {
+ status: OmTransactionState;
+ order_id: string;
+ txnid?: string;
+ };
+}
+
+// WAVE
+export type WaveInitializationPayload = {
+ type_paiement: number;
+ marchand: string;
+ service: string;
+ montant: number;
+};
+export interface WaveTransactionInitilizationResponse {
+ id: string;
+ amount: string;
+ checkout_status: string;
+ client_reference: unknown;
+ currenfy: string;
+ error_url: string;
+ last_payment_errror: unknown;
+ business_name: string;
+ payment_status: string;
+ succes_url: string;
+ wave_launch_url: string;
+ when_completed: unknown;
+ when_created: string;
+ when_expires: string;
+}
+
+export type Transaction = {
+ type_paiement: number;
+ type_paiement_label: PaymentTypeCode;
+ marchand: string;
+ marchand_name: string;
+ service: string;
+ montant: number;
+ date: string;
+ commentaire: string;
+ etat: boolean;
+ status: "SUCCESS" | "INITIATED" | "FAILED";
+ reference: string;
+ transaction_id: number;
+ marchand_code: string;
+};
diff --git a/src/hooks/useOrangeMoney.tsx b/src/hooks/useOrangeMoney.tsx
deleted file mode 100644
index 7810905..0000000
--- a/src/hooks/useOrangeMoney.tsx
+++ /dev/null
@@ -1,241 +0,0 @@
-import { useModalsManagerContext } from "@/contexts/ModalsManagerContext";
-import type { IpaymentStackNavigator } from "@/navigations/Types";
-import {
- type IorangePaymentStarter,
- getTransactionStatus,
- getTransactionsData,
-} from "@/utils/requests/orangePayment";
-import ErrorModal from "@components/modals/ErrorModal";
-import LoadingModal from "@components/modals/LoadingModal";
-import { LOG } from "@logger";
-import type { NativeStackNavigationProp } from "@react-navigation/native-stack";
-
-import { useMutation, useQueryClient } from "@tanstack/react-query";
-import { AxiosError } from "axios";
-import * as WebBrowser from "expo-web-browser";
-import { useRef, useState } from "react";
-
-import { AppState, Platform } from "react-native";
-
-const log = LOG.extend("useOrangeMoney");
-
-const paymentObjectDefault: IorangePaymentStarter = {
- // biome-ignore lint/style/useNamingConvention:
- type_paiement: 1,
- marchand: "1",
- service: "2",
- montant: 0,
- numero: "0707070707",
- commentaire: "Un commentaire",
-};
-const useOrangeMoney = (
- navigation?: NativeStackNavigationProp<
- IpaymentStackNavigator,
- "paymentAmountInputScreen",
- "IpaymentStackNavigator"
- >,
-) => {
- const queryClient = useQueryClient();
-
- const [isBrowserOpen, setIsBrowserOpen] = useState(false);
- const { showModal, closeModal } = useModalsManagerContext();
- const appState = useRef(AppState.currentState);
- const [appStateVisible, setAppStateVisible] = useState(appState.current);
-
- const handlePaymentUsingBrowser = async (url: string) => {
- setIsBrowserOpen(true);
- const result = await WebBrowser.openBrowserAsync(url);
- // setResult(result);
- log.debug("handlePaymentUsingBrowser | Result ::", result);
- setIsBrowserOpen(false);
- };
-
- const orangeTransactionInitializerMutation = useMutation({
- mutationFn: (amount: number) =>
- getTransactionsData({
- ...paymentObjectDefault,
- montant: amount,
- }),
- onSuccess: (data) => {
- // return data.payment_url
- log.debug("orangeTransactionInitializerMutation request success, opening browser...");
- queryClient.invalidateQueries({ queryKey: ["transactionsHistory"] });
- // await handlePaymentUsingBrowser(data.payment_url);
- // await transactionsStatusMutation.mutate(data.order_id);
- // setResult(result);
- },
- onError: (err) => {
- log.error("orangeTransactionInitializerMutation |", err);
- },
- });
-
- const maxRetry = 3;
- const retryDelay = 5000;
-
- const transactionsStatusMutation = useMutation({
- mutationFn: (orderId: string) => getTransactionStatus(orderId),
- onSuccess: (data) => {
- log.debug("transactionsStatusMutation request success");
- queryClient.invalidateQueries({ queryKey: ["transactionsHistory"] });
- return data.status;
- },
- onError: (err) => {
- log.error("transactionsStatusMutation |", err);
- queryClient.invalidateQueries({ queryKey: ["transactionsHistory"] });
- },
- // retry: (failureCount, error) => {
- // log.warn("transactionsStatusMutation | retrying", failureCount, error);
- // return failureCount < maxRetry;
- // },
- // retryDelay(_failureCount, _error) {
- // return retryDelay;
- // },
- });
-
- // biome-ignore lint/complexity/noExcessiveCognitiveComplexity:
- const checkStatus = async (orderId: string, retry = 0): Promise => {
- // Check the transactions 'retry' time.
- let numberOfTries = 0;
-
- while (numberOfTries <= retry) {
- log.verbose("useOrangePayment | checkStatus | Try No.", numberOfTries + 1);
- try {
- await transactionsStatusMutation.mutateAsync(orderId);
- return;
- } catch (error) {
- // errors are throwned from getTransactions status when the staus is either initiated or failed.
- if (error instanceof AxiosError && error.response?.status === 404) {
- log.error("useOrangeMoney | checkStatus | Transaction not found");
- return error.response.data.error || `Transaction ${orderId} not found !!`;
- }
- if (error instanceof AxiosError && error.name === "ORANGE_PAYMENT_FAILED") {
- return "La transaction à échoué.";
- }
- if (error instanceof AxiosError && error.name === "ORANGE_UNKNOWN_PAYMENT_ERROR") {
- return "Une erreur est survenue.";
- }
- }
-
- numberOfTries += 1;
- }
-
- return "La transaction est toujours en cours.";
- };
-
- const openBrowserThenCheckStatus = async (paymentUrl: string, orderId: string) => {
- try {
- await handlePaymentUsingBrowser(paymentUrl);
- if (Platform.OS === "android") {
- log.debug(
- "useOrangeMoney | openBrowserThenCheckStatus | Android device. Setup listener for browser close event.",
- );
- const sub = AppState.addEventListener("change", async (nextAppState) => {
- log.debug(
- "useOrangeMoney | openBrowserThenCheckStatus | Android device. Browser state :",
- nextAppState,
- );
-
- if (nextAppState === "active") {
- log.debug(
- "useOrangeMoney | openBrowserThenCheckStatus | Android device. Browser is closed. Removing listener. Checking for transaction State.",
- );
- sub.remove();
- log.info("openBrowserThenCheckStatus | Verifying transaction status...");
- showModal(
- ,
- );
- // await transactionsStatusMutation.mutateAsync(orderId);
- const message = await checkStatus(orderId);
- if (message) {
- showModal();
- } else {
- navigation?.getParent()?.navigate("paymentResultScreen");
- }
- }
- });
- } else {
- log.info("openBrowserThenCheckStatus | Verifying transaction status...");
- showModal();
- // await transactionsStatusMutation.mutateAsync(orderId);
- const message = await checkStatus(orderId);
- if (message) {
- showModal();
- } else {
- navigation?.getParent()?.navigate("paymentResultScreen");
- }
- }
- // closeModal();
- } catch (error: unknown) {
- log.verbose("Error catching");
- if (error instanceof AxiosError) {
- log.error("openBrowserThenCheckStatus Catch Block|", error);
- showModal(
- ,
- );
- } else {
- showModal();
- }
- // log.error("openBrowserThenCheckStatus Catch Block|", error);
- // if (error instanceof Error) {
- // log.debug("1");
- // if (error.name === "ORANGE_PAYMENT_IN_PROGRESS") {
- // log.debug("2");
-
- // log.warn("openBrowserThenCheckStatus | ORANGE_PAYMENT_IN_PROGRESS");
- // await showModal(
- // openBrowserThenCheckStatus(paymentUrl, orderId)}
- // />,
- // );
- // log.debug("3");
- // } else if (error.name === "ORANGE_PAYMENT_FAILED") {
- // showModal();
- // log.error("openBrowserThenCheckStatus | ORANGE_PAYMENT_FAILED");
- // }
- // log.debug("4 --", error.name);
- // } else {
- // log.error("openBrowserThenCheckStatus Else Block|", error);
- // closeModal();
- // throw error;
- // }
- }
- };
-
- const orangePaymentTransactionHandler = async (amount: number) => {
- try {
- showModal();
- const { payment_url, order_id } =
- await orangeTransactionInitializerMutation.mutateAsync(amount);
- log.info("orangePaymentTransactionHandler |", payment_url, order_id);
- log.info("Opening browser for payment...");
- await openBrowserThenCheckStatus(payment_url, order_id);
- // biome-ignore lint/suspicious/noExplicitAny:
- } catch (error: any) {
- log.error("makePayment |", error);
- showModal(
- ,
- );
-
- throw error;
- } finally {
- //closeModal(); // just to be ultra sure that the modal is closed
- }
- };
-
- return {
- orangeTransactionInitializerMutation: orangeTransactionInitializerMutation,
-
- handlePaymentUsingBrowser,
- isBrowserOpen,
- isWaitingForOmPaymentUrl: orangeTransactionInitializerMutation.isPending,
- isCheckingForTransactionStatus: transactionsStatusMutation.isPending,
- transactionsStatusMutation,
- orangePaymentTransactionHandler,
- };
-};
-
-export default useOrangeMoney;
diff --git a/src/hooks/useTransactionsHistory.tsx b/src/hooks/useTransactionsHistory.tsx
deleted file mode 100644
index 7f5db7b..0000000
--- a/src/hooks/useTransactionsHistory.tsx
+++ /dev/null
@@ -1,91 +0,0 @@
-import { type Transaction, getTransactionsHistory } from "@/utils/requests/transactions";
-import type { PaymentCode } from "@/utils/requests/types";
-import { LOG } from "@logger";
-import { useQuery } from "@tanstack/react-query";
-import { useCallback, useMemo, useState } from "react";
-
-const log = LOG.extend("useTransactionsHistory");
-
-// biome-ignore lint/style/useNamingConvention:
-export type OperatorsFilter = { [key in PaymentCode]: boolean };
-
-const useTransactionsHistory = () => {
- log.verbose("useTransactionsHistory");
-
- const [referenceFilter, setReferenceFilter] = useState("");
- // biome-ignore lint/style/useNamingConvention:
- const [operatorsFilter, setOperatorsFilter] = useState({
- // biome-ignore lint/style/useNamingConvention:
- OM: true,
- // biome-ignore lint/style/useNamingConvention:
- MTN: true,
- // biome-ignore lint/style/useNamingConvention:
- FLOOZ: true,
- // biome-ignore lint/style/useNamingConvention:
- WAVE: true,
- // biome-ignore lint/style/useNamingConvention:
- CB: true,
- });
-
- const { data, isLoading, error, refetch } = useQuery({
- queryKey: ["transactionsHistory"],
- queryFn: getTransactionsHistory,
- });
-
- const filterByReference = useCallback(
- (reference: string) => {
- if (!data?.length) return [];
-
- return data.filter(
- (transaction) => transaction.reference.includes(reference) && transaction.reference,
- );
- },
- [data],
- );
-
- const filterDataByReference = (data: Transaction[], reference: string) => {
- if (!data?.length) return [];
-
- return data.filter(
- (transaction) => transaction.reference.includes(reference) && transaction.reference,
- );
- };
-
- const filterByOperators = (data: Transaction[]) => {
- if (!data?.length) return [];
- // create a set
- const set = new Set();
-
- for (const key of Object.keys(operatorsFilter)) {
- if (operatorsFilter[key as keyof OperatorsFilter]) {
- set.add(key as PaymentCode);
- }
- }
- return data.filter((transaction) => {
- // return true if the set is empty, as there is no need to check
- if (set.size === 0) return true;
- // return true if the set contains the value
- return set.has(transaction.type_paiement_label);
- });
- };
-
- const transactionsHistory: Transaction[] = useMemo(() => {
- if (!data) return [];
- const filteredByOperators = filterByOperators(data);
- const filteredByReference = filterDataByReference(filteredByOperators, referenceFilter);
- return filteredByReference;
- // return filterByReference(referenceFilter);
- }, [data, referenceFilter, filterByOperators, filterDataByReference]);
-
- return {
- transactionsHistory,
- isLoading,
- error,
- refetch,
- setReferenceFilter,
- operatorsFilter,
- setOperatorsFilter,
- };
-};
-
-export default useTransactionsHistory;
diff --git a/src/hooks/useWave.tsx b/src/hooks/useWave.tsx
deleted file mode 100644
index 277b1b6..0000000
--- a/src/hooks/useWave.tsx
+++ /dev/null
@@ -1,150 +0,0 @@
-import { useModalsManagerContext } from "@/contexts/ModalsManagerContext";
-import type { IpaymentStackNavigator } from "@/navigations/Types";
-import {
- type IwavePaymentStarter,
- getTransactionStatus,
- initTransaction,
-} from "@/utils/requests/wavePayment";
-import ErrorModal from "@components/modals/ErrorModal";
-import LoadingModal from "@components/modals/LoadingModal";
-import { LOG } from "@logger";
-import type { NativeStackNavigationProp } from "@react-navigation/native-stack";
-import { useMutation, useQueryClient } from "@tanstack/react-query";
-import * as WebBrowser from "expo-web-browser";
-import { useState } from "react";
-
-const log = LOG.extend("useWave");
-
-const paymentObjectDefault: IwavePaymentStarter = {
- // biome-ignore lint/style/useNamingConvention:
- type_paiement: 2,
- marchand: "1",
- service: "2",
- montant: 0,
-};
-
-const useWave = (
- navigation?: NativeStackNavigationProp<
- IpaymentStackNavigator,
- "paymentAmountInputScreen",
- "IpaymentStackNavigator"
- >,
-) => {
- const { showModal, closeModal } = useModalsManagerContext();
- const [isBrowserOpen, setIsBrowserOpen] = useState(false);
-
- const queryClient = useQueryClient();
-
- // Mutations
-
- const waveTransactionInitializerMutation = useMutation({
- mutationFn: (amount: number) =>
- initTransaction({
- ...paymentObjectDefault,
- montant: amount,
- }),
- onSuccess: (data) => {},
- onError: (err) => {
- log.error("waveTransactionInitializerMutation |", err);
- },
- });
-
- const waveTransactionStatusMutation = useMutation({
- mutationFn: (orderId: string) => getTransactionStatus(orderId),
- onSuccess: (data) => {
- log.debug("waveTransactionStatusMutation request success");
- },
- onError: (err) => {
- log.error("waveTransactionStatusMutation |", err);
- },
- });
-
- // Browser stuff
-
- const handlePaymentUsingBrowser = async (url: string) => {
- log.debug("handlePaymentUsingBrowser | Opening the browser at url :: ", url);
-
- setIsBrowserOpen(true);
- const result = await WebBrowser.openBrowserAsync(url);
- // setResult(result);
- log.debug("handlePaymentUsingBrowser | Result ::", result);
- setIsBrowserOpen(false);
- };
-
- const openBrowserThenCheckStatus = async (paymentUrl: string, orderId: string) => {
- try {
- await handlePaymentUsingBrowser(paymentUrl);
- log.info("openBrowserThenCheckStatus | Verifying transaction status...");
- showModal();
- await waveTransactionStatusMutation.mutateAsync(orderId);
- closeModal();
- // navigation?.getParent()?.navigate("paymentResultScreen");
- } catch (error) {
- log.error("openBrowserThenCheckStatus |", error);
- // if (error instanceof Error) {
- // if (error.name === "ORANGE_PAYMENT_IN_PROGRESS") {
- // log.warn("openBrowserThenCheckStatus | ORANGE_PAYMENT_IN_PROGRESS");
- // await showModal(
- // openBrowserThenCheckStatus(paymentUrl, orderId)}
- // />,
- // );
- // } else if (error.name === "ORANGE_PAYMENT_FAILED") {
- // showModal();
- // log.error("openBrowserThenCheckStatus | ORANGE_PAYMENT_FAILED");
- // }
- // } else {
- // log.error("openBrowserThenCheckStatus |", error);
- // closeModal();
- // throw error;
- // }
- }
- };
-
- // Handlers
-
- const waveTransactionHandler = async (amount: number) => {
- try {
- showModal();
-
- const response = await waveTransactionInitializerMutation.mutateAsync(amount);
- log.info("waveTransactionHandler payment url received :: ", response.wave_launch_url);
- // log.info("Opening browser for payment...");
- log.info("Navigating to the qr code screen...");
- closeModal();
- navigation?.getParent()?.navigate("waveQrCodePaymentScreen", { data: response });
-
- // await openBrowserThenCheckStatus(response.wave_launch_url, response.id);
- } catch (error) {
- log.error("waveTransactionHandler |", error);
- showModal();
- throw error;
- }
- };
-
- const handlePaymentVerification = async (id: string) => {
- log.info("handlePaymentVerification |", id);
- try {
- showModal();
- const response = await waveTransactionStatusMutation.mutateAsync(id);
- closeModal();
- } catch (error) {
- log.error("handlePaymentVerification |", error);
- // closeModal();
- // showModal();
- } finally {
- // TODO : remove this finally block once a proper implementation workflow is set. currently we close the modal after logging whatever response we get from the request
- closeModal();
- }
- };
-
- return {
- waveTransactionInitializerMutation,
- waveTransactionHandler,
- handlePaymentVerification,
- };
-};
-
-export default useWave;
diff --git a/src/navigations/AppBottomTabsNavigator.tsx b/src/navigations/AppBottomTabsNavigator.tsx
index 165ad0b..2b53882 100644
--- a/src/navigations/AppBottomTabsNavigator.tsx
+++ b/src/navigations/AppBottomTabsNavigator.tsx
@@ -3,10 +3,9 @@ import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import TransactionHistoryScreen from "@screens/TransactionHistoryScreen";
import UserProfileScreen from "@screens/UserProfileScreen";
import { useTheme } from "@shopify/restyle";
-// import palette
import type { Theme } from "@themes/Theme";
-import { View } from "react-native";
-import Text from "../components/bases/Text";
+import { Text, View } from "react-native";
+
import PaymentStackNavigator from "./PaymentStackNavigation";
const Tab = createBottomTabNavigator();
@@ -63,22 +62,6 @@ export const AppBottomTabsNavigator = () => {
);
};
-const HomeScreen = () => {
- return (
-
- Home!
-
- );
-};
-
-const Transactions = () => {
- return (
-
- Transactions!
-
- );
-};
-
const SettingsScreen = () => {
return (
@@ -86,11 +69,3 @@ const SettingsScreen = () => {
);
};
-
-const ProfileScreen = () => {
- return (
-
- Profile!
-
- );
-};
diff --git a/src/navigations/AppMainStackNavigator.tsx b/src/navigations/AppMainStackNavigator.tsx
index c767f93..91859a4 100644
--- a/src/navigations/AppMainStackNavigator.tsx
+++ b/src/navigations/AppMainStackNavigator.tsx
@@ -1,4 +1,3 @@
-import { useUserAuthenticationContext } from "@/contexts/UserAuthenticationContext";
import { LOG } from "@logger";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import HomeUserNotLoggedIn from "@screens/HomeUserNotLoggedIn";
@@ -6,8 +5,10 @@ import PaymentResultScreen from "@screens/PaymentResultScreen";
import UserLoginScreen from "@screens/UserLoginScreen";
import WaveQrCodePaymentScreen from "@screens/WaveQrCodePaymentScreen";
import { memo } from "react";
+import { useSelector } from "react-redux";
+import type { RootState } from "@/redux";
import { AppBottomTabsNavigator } from "./AppBottomTabsNavigator";
-import type { ImainStackNavigator } from "./Types";
+import type { ImainStackNavigator } from "./types";
const Stack = createNativeStackNavigator();
@@ -50,6 +51,6 @@ const AppMainStackNavigator: React.FC = ({ isAuthen
export default memo(AppMainStackNavigator);
export const AppMainStackNavigatorAuthWrapper = () => {
- const { isAuthenticated } = useUserAuthenticationContext();
+ const isAuthenticated = useSelector((state: RootState) => state.auth.isAuthenticated);
return ;
};
diff --git a/src/navigations/PaymentStackNavigation.tsx b/src/navigations/PaymentStackNavigation.tsx
index 356a698..645b8c3 100644
--- a/src/navigations/PaymentStackNavigation.tsx
+++ b/src/navigations/PaymentStackNavigation.tsx
@@ -2,7 +2,7 @@ import { createNativeStackNavigator } from "@react-navigation/native-stack";
import HomePageWithPaymentOptions from "@screens/HomePageWithPaymentOptions";
import NumberAndOtpForPaymentScreen from "@screens/NumberAndOtpForPaymentScreen";
import PaymentAmountInputScreen from "@screens/PaymentAmountInputScreen";
-import type { IpaymentStackNavigator } from "./Types";
+import type { IpaymentStackNavigator } from "./types";
const Stack = createNativeStackNavigator();
diff --git a/src/navigations/Types.ts b/src/navigations/types.ts
similarity index 82%
rename from src/navigations/Types.ts
rename to src/navigations/types.ts
index f331d6b..922d0ee 100644
--- a/src/navigations/Types.ts
+++ b/src/navigations/types.ts
@@ -1,12 +1,14 @@
-import type { PaymentCode } from "@/utils/requests/types";
-import type { IwaveStarterRespone } from "@/utils/requests/wavePayment";
import type { NativeStackScreenProps } from "@react-navigation/native-stack";
+import type { PaymentType, WaveTransactionInitilizationResponse } from "@/features/pay/types";
export type IpaymentStackNavigator = {
homePageWithPaymentOptions: undefined;
- numberAndOtpForPaymentScreen: undefined;
+ numberAndOtpForPaymentScreen: {
+ paymentType: PaymentType;
+ amount: number;
+ };
paymentAmountInputScreen: {
- paymentType: PaymentCode;
+ paymentType: PaymentType;
};
};
@@ -23,7 +25,7 @@ export type ImainStackNavigator = {
appBottomTabsNavigator: undefined;
paymentResultScreen: undefined;
waveQrCodePaymentScreen: {
- data: IwaveStarterRespone;
+ data: WaveTransactionInitilizationResponse;
};
};
diff --git a/src/redux/index.ts b/src/redux/index.ts
new file mode 100644
index 0000000..784f334
--- /dev/null
+++ b/src/redux/index.ts
@@ -0,0 +1,12 @@
+import { configureStore } from "@reduxjs/toolkit";
+import { authReducer } from "../features/auth/slice";
+
+export const store = configureStore({
+ reducer: {
+ auth: authReducer,
+ },
+});
+
+export type RootState = ReturnType;
+export type AppDispatch = typeof store.dispatch;
+export type AppReduxStore = typeof store;
diff --git a/src/screens/HomePageWithPaymentOptions.tsx b/src/screens/HomePageWithPaymentOptions.tsx
index cf5fcec..a611bb0 100644
--- a/src/screens/HomePageWithPaymentOptions.tsx
+++ b/src/screens/HomePageWithPaymentOptions.tsx
@@ -1,115 +1,87 @@
-import type { PaymentStackScreenComponentProps } from "@/navigations/Types";
-import getPaymentTypes from "@/utils/requests/getPaymentTypes";
-import BalanceContainer from "@components/BalanceContainer";
-import BarWithBeasyAndNotificationsIcon from "@components/BarWithBeasyAndNotificationsIcon";
-import PaymentOption from "@components/PaymentOption";
-import Box from "@components/bases/Box";
-import WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight from "@components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight";
+import { asp as g } from "@asp/asp";
+import { Balance } from "@components/Balance";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import Ionicons from "@expo/vector-icons/Ionicons";
import { LOG } from "@logger";
-import Card from "@re-card";
-import Text from "@re-text";
import { useQuery } from "@tanstack/react-query";
-import { useMemo } from "react";
-import { Dimensions } from "react-native";
+import { Text, View } from "react-native";
+import { getPaymentTypes } from "@/features/pay/api";
+import PaymentType from "@/features/pay/components/PaymentType";
+import type { PaymentStackScreenComponentProps } from "@/navigations/types";
const log = LOG.extend("HomePageWithPaymentOptions");
-const HomePageWithPaymentOptions: PaymentStackScreenComponentProps<"homePageWithPaymentOptions"> =
- ({ navigation }) => {
- log.debug("HomePageWithPaymentOptions");
- const { data, isLoading, error } = useQuery({
- queryKey: ["paymentTypes"],
- queryFn: getPaymentTypes,
- enabled: true,
- });
+const HomePageWithPaymentOptions: PaymentStackScreenComponentProps<
+ "homePageWithPaymentOptions"
+> = ({ navigation }) => {
+ log.debug("HomePageWithPaymentOptions");
+ const paymentTypesQuery = useQuery({
+ queryKey: ["paymentTypes"],
+ queryFn: getPaymentTypes,
+ });
- // getting valid payments supported
- const paymentTypesWithActiveStatus = useMemo(() => {
- log.info("Filtering payment types");
- const paymentTypes = data?.results || [];
- return paymentTypes.filter((paymentType) => paymentType.etat === true);
- }, [data]);
+ const paymentTypes = paymentTypesQuery.isSuccess
+ ? Object.keys(paymentTypesQuery.data.data.results)
+ .map((key) => paymentTypesQuery.data.data.results[key])
+ .filter((item) => item.etat === true)
+ : [];
- log.info(
- "payment types to render",
- paymentTypesWithActiveStatus.map((paymentType) => paymentType.code),
- );
-
- return (
-
-
-
-
-
-
-
-
-
-
-
- Types de paiement
-
-
-
-
- {isLoading && (
-
-
- Chargement des méthodes de paiement...
-
-
- )}
- {!isLoading &&
- !error &&
- paymentTypesWithActiveStatus.map((paymentType) => (
-
-
- navigation.navigate(
- "paymentAmountInputScreen",
- {
- paymentType: paymentType.code,
- },
- )
- }
- paymentMethod={paymentType.code}
- />
-
- ))}
-
-
-
-
-
- );
- };
+ return (
+
+
+
+
+
-export default HomePageWithPaymentOptions;
+
+
+
-const screenWidth = Dimensions.get("window").width;
-const paymentOptionCardWidth = screenWidth / 2 - 30;
-const paymentOptionCardHeight = paymentOptionCardWidth * 0.65;
-const PaymentOptionContainer = ({ children }: { children: React.ReactNode }) => {
- return (
-
- {children}
-
+
+ Types de paiement
+
+ {paymentTypes.map((paymentType) => {
+ return (
+ {
+ navigation.navigate("paymentAmountInputScreen", {
+ paymentType,
+ });
+ }}
+ key={paymentType.reference}
+ style={[{ width: "47%" }]}
+ type={paymentType.code}
+ />
+ );
+ })}
+
+
+
);
};
+
+export default HomePageWithPaymentOptions;
diff --git a/src/screens/HomeUserNotLoggedIn.tsx b/src/screens/HomeUserNotLoggedIn.tsx
index 14c452e..b01372a 100644
--- a/src/screens/HomeUserNotLoggedIn.tsx
+++ b/src/screens/HomeUserNotLoggedIn.tsx
@@ -1,65 +1,38 @@
-import type { MainStackScreenComponentProps } from "@/navigations/Types";
-import Button from "@components/Button";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
-import { Image, StyleSheet } from "react-native";
+import { asp as g } from "@asp/asp";
+import * as Button from "@components/Button";
+import { Image } from "expo-image";
+import { Text, View } from "react-native";
+import type { MainStackScreenComponentProps } from "@/navigations/types";
const HomeUserNotLoggedIn: MainStackScreenComponentProps<"homeUserNotLoggedIn"> = ({
navigation,
}) => {
return (
- <>
-
-
-
-
-
-
- Acceptez des paiements en magasin et en ligne et recevez votre argent en
- quelques secondes
-
-
-
-
-
- >
+
+
+
+
+
+ Acceptez des paiements en magasin et en ligne et recevez votre argent en quelques
+ secondes
+
+
+ navigation.navigate("userLoginScreen")}
+ style={[g.mt_5xl]}
+ >
+ Se connecter
+
+
+ Créer un compte
+
+
);
};
-const style = StyleSheet.create({
- container: {
- width: "100%",
- height: "100%",
- flex: 1,
- alignItems: "center",
- justifyContent: "center",
- },
- image: {
- width: "100%",
- height: "100%",
- },
-});
-
export default HomeUserNotLoggedIn;
diff --git a/src/screens/NumberAndOtpForPaymentScreen.tsx b/src/screens/NumberAndOtpForPaymentScreen.tsx
index 69a2121..5dea6f0 100644
--- a/src/screens/NumberAndOtpForPaymentScreen.tsx
+++ b/src/screens/NumberAndOtpForPaymentScreen.tsx
@@ -1,66 +1,66 @@
-import type { PaymentStackScreenComponentProps } from "@/navigations/Types";
+import { asp as g } from "@asp/asp";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
import BeasyLogoIcon from "@components/BeasyLogoIcon";
-import Button from "@components/Button";
-import GoBackIconButton from "@components/GoBackIconButton";
-import InputWithTopLabel from "@components/InputWithTopLabel";
-import PaymentOption from "@components/PaymentOption";
-import BackgroundGreenWhiteContentArea from "@components/backgrounds/BackgroundGreenWhiteContentArea";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
+import * as Button from "@components/Button";
+import * as Input from "@components/Input";
+import AntDesign from "@expo/vector-icons/AntDesign";
import { LOG } from "@logger";
-import { SafeAreaView } from "react-native-safe-area-context";
+import { Text, View } from "react-native";
+import PaymentType from "@/features/pay/components/PaymentType";
+import type { PaymentStackScreenComponentProps } from "@/navigations/types";
-const log = LOG.extend("NumberAndOtpForPaymentScreen");
+const _log = LOG.extend("NumberAndOtpForPaymentScreen");
const NumberAndOtpForPaymentScreen: PaymentStackScreenComponentProps<
"numberAndOtpForPaymentScreen"
-> = ({ navigation }) => {
- console.debug("NumberAndOtpForPaymentScreen");
+> = ({ navigation, route }) => {
return (
-
-
-
-
-
- navigation.goBack()} />
-
-
- Montant à payer
-
- 78000
-
-
-
-
- {}} paymentMethod={"OM"} />
-
-
-
-
-
- {}}
- variant={"full"}
- textVariants={"primary"}
- label="Confirmer"
- />
-
-
-
-
+
+
+
+ navigation.goBack()}
+ />
+
+
+
+ Montant à payé
+
+ {route.params.amount}
+
+
+
+
+
+
+ Entrer le numéro
+
+
+
+
+
+
+ Code OTP
+
+
+
+
+
+
+ Confirmer
+
+
+
);
};
diff --git a/src/screens/PaymentAmountInputScreen.tsx b/src/screens/PaymentAmountInputScreen.tsx
index 94460c6..39ad56a 100644
--- a/src/screens/PaymentAmountInputScreen.tsx
+++ b/src/screens/PaymentAmountInputScreen.tsx
@@ -1,19 +1,22 @@
-import { useModalsManagerContext } from "@/contexts/ModalsManagerContext";
-import type { PaymentStackScreenComponentProps } from "@/navigations/Types";
+import { asp as g } from "@asp/asp";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
import BeasyLogoIcon from "@components/BeasyLogoIcon";
-import Button from "@components/Button";
-import GoBackIconButton from "@components/GoBackIconButton";
-import InputWithTopLabel from "@components/InputWithTopLabel";
-import PaymentOption from "@components/PaymentOption";
-import BeasyDefaultBackgroundWrapper from "@components/backgrounds/BeasyDefaultBackground";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
-import useOrangeMoney from "@hooks/useOrangeMoney";
-import useWave from "@hooks/useWave";
+import * as Button from "@components/Button";
+import * as Input from "@components/Input";
+import * as Modal from "@components/Modal";
import { LOG } from "@logger";
-import { useCallback, useState } from "react";
-import { Keyboard, View } from "react-native";
-import { useSafeAreaInsets } from "react-native-safe-area-context";
+import { useMutation } from "@tanstack/react-query";
+import type { AxiosError } from "axios";
+import * as WebBrowser from "expo-web-browser";
+import { useEffect, useRef, useState } from "react";
+import { AppState, Text, View } from "react-native";
+import {
+ omInitializeTransaction,
+ omVerifyTransactionStateWithTimeout,
+ waveInitializeTransaction,
+} from "@/features/pay/api";
+import PaymentType from "@/features/pay/components/PaymentType";
+import type { PaymentStackScreenComponentProps } from "@/navigations/types";
const log = LOG.extend("PaymentAmountInputScreen");
const PaymentAmountInputScreen: PaymentStackScreenComponentProps<"paymentAmountInputScreen"> = ({
@@ -21,158 +24,171 @@ const PaymentAmountInputScreen: PaymentStackScreenComponentProps<"paymentAmountI
navigation,
}) => {
log.debug("PaymentAmountInputScreen");
- const { paymentType } = route.params;
- const [amountToPay, setAmountToPay] = useState(0);
- const { showModal, closeModal } = useModalsManagerContext();
-
- const {
- orangeTransactionInitializerMutation,
- handlePaymentUsingBrowser,
- isBrowserOpen,
- isWaitingForOmPaymentUrl,
- isCheckingForTransactionStatus,
- transactionsStatusMutation,
- orangePaymentTransactionHandler,
- } = useOrangeMoney(navigation);
-
- const { waveTransactionHandler } = useWave(navigation);
-
- const insets = useSafeAreaInsets();
-
- log.debug({
- isWaitingForOmPaymentUrl,
- isCheckingForTransactionStatus,
- isBrowserOpen,
- });
- const updateAmountToPay = (amount: string) => {
- const amountParsed = Number.parseInt(amount);
- if (!Number.isNaN(amountParsed)) {
- return setAmountToPay(amountParsed);
- }
+ const [amount, setAmount] = useState(0);
+ const [error, setError] = useState("");
+ const appState = useRef(AppState.currentState);
- return setAmountToPay(0);
+ const handlePayment = async () => {
+ try {
+ const code = route.params.paymentType.code;
+ if (code === "OM") {
+ // TODO: ASK THE BOSS WHY THE PAYLOAD IS MOSTLY USELESS HERE.
+ const res = await omInitializeTransaction({
+ type_paiement: 1,
+ marchand: "1",
+ service: "1",
+ montant: amount,
+ commentaire: "un commentaire",
+ numero: "0707070707",
+ });
+ WebBrowser.openBrowserAsync(res.data.payment_url);
+ } else if (code === "WAVE") {
+ const res = await waveInitializeTransaction({
+ type_paiement: 2,
+ marchand: "1",
+ service: "1",
+ montant: amount,
+ });
+ navigation?.getParent()?.navigate("waveQrCodePaymentScreen", {
+ data: res,
+ });
+ } else {
+ navigation.navigate("numberAndOtpForPaymentScreen", {
+ paymentType: route.params.paymentType,
+ amount: amount,
+ });
+ }
+ } catch (error) {
+ const err = error as AxiosError;
+ setError(JSON.stringify(err.response?.data) || err.message);
+ }
};
- const handlePaymentButton = useCallback(async () => {
- switch (paymentType) {
- case "OM": {
- Keyboard.dismiss();
- log.info("OM so we stays on screen !!");
- // await orangePaymentSequence();
- try {
- await orangePaymentTransactionHandler(amountToPay);
- // navigation.getParent()?.navigate("paymentResultScreen");
- } catch (error) {
- log.error("handlePaymentButton |", error);
- }
-
- break;
- }
- case "WAVE": {
- try {
- log.info("Wave so we stay on screen.");
- await waveTransactionHandler(amountToPay);
- } catch (error) {
- log.error("handlePaymentButton Wave|", error);
- }
- break;
+ const omTransactionVerification = useMutation({
+ mutationFn: () => omVerifyTransactionStateWithTimeout("1", 10000, 2000),
+ onSuccess: (_data) => {
+ navigation?.getParent()?.navigate("paymentResultScreen");
+ },
+ onError: (err: AxiosError) => {
+ setError(JSON.stringify(err.response?.data) || err.message);
+ },
+ });
+
+ useEffect(() => {
+ if (route.params.paymentType.code !== "OM") return; // only for orange money payment should this effect be run
+ const subscription = AppState.addEventListener("change", (nextAppState) => {
+ if (
+ appState.current.match(/inactive|background/) &&
+ nextAppState === "active" &&
+ route.params.paymentType.code === "OM"
+ ) {
+ console.log("App has come to the foreground!");
+ omTransactionVerification.mutate();
}
- default:
- log.info("Navigating to numberAndOtpForPaymentScreen");
- navigation.navigate("numberAndOtpForPaymentScreen");
- break;
- }
- }, [
- paymentType,
- navigation,
- amountToPay,
- orangePaymentTransactionHandler,
- waveTransactionHandler,
- ]);
+
+ appState.current = nextAppState;
+
+ console.log("AppState", appState.current);
+ });
+
+ return () => {
+ subscription.remove();
+ };
+ }, [route, omTransactionVerification]);
+
+ // switch (paymentType) {
+ // case "OM": {
+ // Keyboard.dismiss();
+ // log.info("OM so we stays on screen !!");
+ // // await orangePaymentSequence();
+ // try {
+ // await orangePaymentTransactionHandler(amountToPay);
+ // // navigation.getParent()?.navigate("paymentResultScreen");
+ // } catch (error) {
+ // log.error("handlePaymentButton |", error);
+ // }
+
+ // break;
+ // }
+ // case "WAVE": {
+ // try {
+ // log.info("Wave so we stay on screen.");
+ // await waveTransactionHandler(amountToPay);
+ // } catch (error) {
+ // log.error("handlePaymentButton Wave|", error);
+ // }
+ // break;
+ // }
+ // default:
+ // log.info("Navigating to numberAndOtpForPaymentScreen");
+ // navigation.navigate("numberAndOtpForPaymentScreen");
+ // break;
+ // }
+ // }, [
+ // paymentType,
+ // navigation,
+ // amountToPay,
+ // orangePaymentTransactionHandler,
+ // waveTransactionHandler,
+ // ]);
return (
-
- {/* */}
-
- {transactionsStatusMutation.isPending && }
-
+
+
+
+
+
+ Montant à payé
+ {amount}
+
+
+
-
-
- navigation.goBack()} />
-
- {/*
-
- */}
-
- Montant à payé
-
- {amountToPay}
-
-
-
-
- {}} paymentMethod={paymentType} />
-
-
- updateAmountToPay(e)}
+
+
+ Entrer le montant
+
+ setAmount(Number(v))}
/>
-
-
-
-
- {/* */}
-
- );
-};
+
+
-export default PaymentAmountInputScreen;
+
+ Payer
+
+
-const LoadingScreen = () => {
- return (
-
- Verification du status de la transaction.
- Veuillez patienter
-
+
+
+ {error}
+
+ setError("")}>
+ OK
+
+
+
+
+
+
+ Loading...
+
+
+
);
};
+
+export default PaymentAmountInputScreen;
diff --git a/src/screens/PaymentResultScreen.tsx b/src/screens/PaymentResultScreen.tsx
index 292cf1c..c528ee7 100644
--- a/src/screens/PaymentResultScreen.tsx
+++ b/src/screens/PaymentResultScreen.tsx
@@ -1,15 +1,13 @@
-import type { MainStackScreenComponentProps } from "@/navigations/Types";
+import { asp as g } from "@asp/asp";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
import BeasyLogoIcon from "@components/BeasyLogoIcon";
-import Button from "@components/Button";
-import GoBackIconButton from "@components/GoBackIconButton";
-import BeasyDefaultBackgroundWrapper from "@components/backgrounds/BeasyDefaultBackground";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
+import * as Button from "@components/Button";
import CheckIcon from "@components/icons/CheckIcon";
+import { AntDesign } from "@expo/vector-icons";
import { LOG } from "@logger";
-import { CommonActions } from "@react-navigation/native";
-// import { Text } from "react-native";
-import { SafeAreaView, useSafeAreaInsets } from "react-native-safe-area-context";
+import { Text, View } from "react-native";
+import { useSafeAreaInsets } from "react-native-safe-area-context";
+import type { MainStackScreenComponentProps } from "@/navigations/types";
const log = LOG.extend("PaymentResultScreen");
@@ -20,122 +18,109 @@ const PaymentResultScreen: MainStackScreenComponentProps<"paymentResultScreen">
const insets = useSafeAreaInsets();
log.debug("insets", insets);
return (
-
-
-
+
+
+ navigation.goBack()}
+ />
+
+
+
-
-
- {
- navigation.dispatch(
- CommonActions.reset({
- index: 1,
- routes: [{ name: "appBottomTabsNavigator" }],
- }),
- );
- }}
- />
-
-
-
-
-
-
- Transactions effectué avec succès !
-
- {}}
- />
-
-
- Caisse
- 00147C
-
-
- Reference
- CP...
-
-
- Mode de paiement
- Orange
-
-
- Infos client
- Dogeless Miso
-
-
- Montant
- 10
-
-
- N° Client
- Dogeless Misso
-
-
-
-
-
-
+
+
+
+ Transactions effectué avec succès !
+
+
+ Imprimer le réçu
+
+
+
+
+ Caisse
+ 00147C
+
+
+ Reference
+ CP...
+
+
+ Mode de paiement
+ Orange
+
+
+ Infos client
+ Dogeless Miso
+
+
+ Montant
+ 10
+
+
+ N° Client
+ Dogeless Misso
+
+
+
+
+
);
};
diff --git a/src/screens/TransactionHistoryScreen.tsx b/src/screens/TransactionHistoryScreen.tsx
index f9a9dff..4b1f63c 100644
--- a/src/screens/TransactionHistoryScreen.tsx
+++ b/src/screens/TransactionHistoryScreen.tsx
@@ -1,260 +1,221 @@
-import { useModalsManagerContext } from "@/contexts/ModalsManagerContext";
-import BarWithBeasyAndNotificationsIcon from "@components/BarWithBeasyAndNotificationsIcon";
-import Button from "@components/Button";
-import Input from "@components/Input";
-import TransactionInformationsItem from "@components/TransactionInformationsItem";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
-import WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight from "@components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight";
-import useTransactionsHistory, { type OperatorsFilter } from "@hooks/useTransactionsHistory";
+/** biome-ignore-all lint/style/useNamingConvention: */
+
+import { asp as g } from "@asp/asp";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import * as Button from "@components/Button";
+import * as Input from "@components/Input";
+import * as Modal from "@components/Modal";
+import Entypo from "@expo/vector-icons/Entypo";
+import Ionicons from "@expo/vector-icons/Ionicons";
import { LOG } from "@logger";
-import Card from "@re-card";
-import theme from "@themes/Theme";
-import { useCallback, useState } from "react";
-import { RefreshControl, ScrollView, Switch } from "react-native";
-import Icon from "react-native-vector-icons/Ionicons";
+import { FlashList } from "@shopify/flash-list";
+import { useQuery } from "@tanstack/react-query";
+import { useState } from "react";
+import { Switch, Text, TouchableOpacity, View } from "react-native";
+import { getTransactions } from "@/features/pay/api";
+import { TransactionItem } from "@/features/pay/components/TransactionItem";
+import type { PaymentTypeCode } from "@/features/pay/types";
const log = LOG.extend("TransactionHistoryScreen");
const TransactionHistoryScreen = () => {
log.verbose("TransactionHistoryScreen");
+ const [showFilterModal, setShowFilterModal] = useState(false);
+ const [filters, setFilters] = useState>({
+ CB: true,
+ FLOOZ: true,
+ MTN: true,
+ WAVE: true,
+ OM: true,
+ });
+ const [referenceFilter, setReferenceFilter] = useState("");
- const {
- transactionsHistory: data,
- isLoading,
- error,
- refetch,
- setReferenceFilter,
- operatorsFilter,
- setOperatorsFilter,
- } = useTransactionsHistory();
+ const transactionHistoryQuery = useQuery({
+ queryKey: ["transactionsHistory"],
+ queryFn: getTransactions,
+ });
- const { showModal } = useModalsManagerContext();
+ const transactions = transactionHistoryQuery.data?.data.results
+ ? transactionHistoryQuery.data?.data?.results.filter(
+ (transaction) =>
+ filters[transaction.type_paiement_label] &&
+ transaction.reference.includes(referenceFilter),
+ )
+ : [];
return (
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+ setShowFilterModal(true)}
+ style={[
+ g.justify_center,
+ g.align_center,
+ g.p_md,
+ g.rounded_md,
+ { backgroundColor: "#e8e8e9ff" },
+ ]}
>
- setShowFiltersModal(true)}
- onPress={() =>
- showModal(
- ,
- )
- }
- />
-
-
- }
- contentContainerStyle={{
- gap: 10,
- padding: 5,
- // marginTop: 10,
- paddingBottom: 30,
- flexDirection: "column",
- }}
- showsVerticalScrollIndicator={false}
- >
- {data?.map((transaction) => (
-
- ))}
-
-
-
- );
-};
+
+
+
-export default TransactionHistoryScreen;
-
-interface FiltersModalProps {
- // biome-ignore lint/style/useNamingConvention:
- operatorsFilter: OperatorsFilter;
- // biome-ignore lint/style/useNamingConvention:
- setOperatorsFilter: React.Dispatch>;
-}
-const FiltersModal: React.FC = ({ operatorsFilter, setOperatorsFilter }) => {
- const [filterOm, setFilterOm] = useState(operatorsFilter.OM);
- const [filterMtn, setFilterMtn] = useState(operatorsFilter.MTN);
- const [filterFlooz, setFilterFlooz] = useState(operatorsFilter.FLOOZ);
- const [filterWave, setFilterWave] = useState(operatorsFilter.WAVE);
- const [filterCb, setFilterCb] = useState(operatorsFilter.CB);
-
- const saveOperatorsFilters = useCallback(() => {
- setOperatorsFilter({
- // biome-ignore lint/style/useNamingConvention:
- OM: filterOm,
- // biome-ignore lint/style/useNamingConvention:
- MTN: filterMtn,
- // biome-ignore lint/style/useNamingConvention:
- FLOOZ: filterFlooz,
- // biome-ignore lint/style/useNamingConvention:
- WAVE: filterWave,
- // biome-ignore lint/style/useNamingConvention:
- CB: filterCb,
- });
- }, [filterOm, filterMtn, filterFlooz, filterWave, filterCb, setOperatorsFilter]);
-
- const { closeModal } = useModalsManagerContext();
+ {!transactions ? (
+ Aucune transaction n'a été trouvée
+ ) : (
+ item.reference}
+ estimatedItemSize={75}
+ bounces={false}
+ renderItem={({ item }) => (
+
+
+
+ )}
+ />
+ )}
+
- const saveFilters = useCallback(() => {
- saveOperatorsFilters();
- closeModal();
- }, [saveOperatorsFilters, closeModal]);
+ {/* FILTER MODAL */}
- return (
-
-
-
-
- Paramétrage filtre
-
- {
- closeModal();
- }}
- />
-
-
-
- Opérateurs
-
-
-
- Orange Money
-
-
-
- MTN Money
-
-
-
- Flooz Money
-
-
-
- Wave
-
-
-
- Carte Bancaire
-
-
-
-
-
-
-
-
+
+
+ Paramétrage du filtre
+
+
+ Opétareurs
+
+
+ Orange Money
+
+ setFilters((prev) => ({ ...prev, OM: checked }))
+ }
+ />
+
+
+ MTN Money
+
+ setFilters((prev) => ({ ...prev, MTN: checked }))
+ }
+ />
+
+
+ Flooz Money
+
+ setFilters((prev) => ({ ...prev, FLOOZ: checked }))
+ }
+ />
+
+
+ Wave
+
+ setFilters((prev) => ({ ...prev, WAVE: checked }))
+ }
+ />
+
+
+ Carte Bancaire
+
+ setFilters((prev) => ({ ...prev, CB: checked }))
+ }
+ />
+
+
+ setShowFilterModal(false)}>
+ Valider
+
+
+
+
+
);
};
+
+export default TransactionHistoryScreen;
diff --git a/src/screens/UserLoginScreen.tsx b/src/screens/UserLoginScreen.tsx
index bbd31de..1816509 100644
--- a/src/screens/UserLoginScreen.tsx
+++ b/src/screens/UserLoginScreen.tsx
@@ -1,112 +1,22 @@
-import { useUserAuthenticationContext } from "@/contexts/UserAuthenticationContext";
-import type { MainStackScreenComponentProps } from "@/navigations/Types";
-import Button from "@components/Button";
-import InputWithTopLabel from "@components/InputWithTopLabel";
-import Box from "@components/bases/Box";
-import WrapperWithDefaultBeasyBackgroundAndSafeAreaFull from "@components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaFull";
-import { Fontisto } from "@expo/vector-icons";
+import { asp as g } from "@asp/asp";
import { LOG } from "@logger";
-import Card from "@re-card";
-import Text from "@re-text";
-import { useCallback, useState } from "react";
-import { TouchableOpacity } from "react-native";
-import { KeyboardAwareScrollView } from "react-native-keyboard-aware-scroll-view";
-import { useSafeAreaInsets } from "react-native-safe-area-context";
+import { ImageBackground, View } from "react-native";
+import { LoginForm } from "@/features/auth/components/LoginForm";
+import type { MainStackScreenComponentProps } from "@/navigations/types";
const log = LOG.extend("UserLoginScreen");
const UserLoginScreen: MainStackScreenComponentProps<"userLoginScreen"> = ({ navigation }) => {
log.debug("UserLoginScreen");
- const { login, isAuthenticating } = useUserAuthenticationContext();
-
- // TODO : Remove default value for email and password
- const [email, setEmail] = useState("admin");
- const [password, setPassword] = useState("admin");
- const insets = useSafeAreaInsets();
-
- const submit = useCallback(() => {
- login(email, password);
- }, [email, password, login]);
return (
-
-
-
-
- navigation.goBack()}>
-
-
-
-
- Mot de passe oublie ?
-
-
-
-
-
-
-
-
- Connexion
-
- Bienvenue, vous nous avez manqué !
-
-
-
- setEmail(email)}
- />
- setPassword(text)}
- />
-
-
-
- {
- submit();
- }}
- isLoading={isAuthenticating}
- />
- {}}
- />
-
-
-
-
-
-
+
+
+
+
+
);
};
diff --git a/src/screens/UserProfileScreen.tsx b/src/screens/UserProfileScreen.tsx
index 099b94c..c247ef0 100644
--- a/src/screens/UserProfileScreen.tsx
+++ b/src/screens/UserProfileScreen.tsx
@@ -1,176 +1,146 @@
-import { useUserAuthenticationContext } from "@/contexts/UserAuthenticationContext";
-import BarWithBeasyAndNotificationsIcon from "@components/BarWithBeasyAndNotificationsIcon";
-import Button from "@components/Button";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
-import WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight from "@components/wrappers/WrapperWithDefaultBeasyBackgroundAndSafeAreaTopLeftRight";
+import { asp as g } from "@asp/asp";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import * as Button from "@components/Button";
+import Ionicons from "@expo/vector-icons/Ionicons";
import { LOG } from "@logger";
-import Card from "@re-card";
+import { Text, View } from "react-native";
+import { useDispatch, useSelector } from "react-redux";
+import { logout } from "@/features/auth/slice";
+import type { RootState } from "@/redux";
const log = LOG.extend("UserProfileScreen");
const UserProfileScreen = () => {
log.verbose("UserProfileScreen");
- const { logout } = useUserAuthenticationContext();
-
- const { userInformations } = useUserAuthenticationContext();
+ const dispatch = useDispatch();
+ const userInformations = useSelector((state: RootState) => state.auth.user);
return (
-
- <>
-
-
-
-
-
-
-
+
+
+
+
+
-
-
- {userInformations.first_name} {userInformations.last_name}
-
- {userInformations.email}
-
-
-
-
- Utilisateur
+
+
+
+
+
+
+
+ {userInformations.first_name} {userInformations.last_name}
- {userInformations.username}
-
-
+ {userInformations.email}
+
+
+
+ Utilisateur
+ {userInformations.username}
+
+
-
+ dispatch(logout())}
+ >
+ Deconnexion
+
- Informations sur le marchand
- Informations sur le marchand
+
+
-
-
- Identifiant
-
-
- {userInformations.marchand.marchand_id}
-
-
-
-
- Entreprise
-
- {userInformations.marchand.nom}
-
-
-
- Code
-
- {userInformations.marchand.code}
-
-
-
- Addresse
-
- {userInformations.marchand.adresse}
-
-
-
- Url succès
-
- {userInformations.marchand.url_succes}
-
-
-
- Url échec
-
- {userInformations.marchand.url_echec}
-
-
-
- >
-
+ Identifiant
+ {userInformations.marchand.marchand_id}
+
+
+ Entreprise
+ {userInformations.marchand.nom}
+
+
+ Code
+ {userInformations.marchand.code}
+
+
+ Addresse
+ {userInformations.marchand.adresse}
+
+
+ Url succès
+ {userInformations.marchand.url_succes}
+
+
+ Url échec
+ {userInformations.marchand.url_echec}
+
+
+
+
);
};
diff --git a/src/screens/WaveQrCodePaymentScreen.tsx b/src/screens/WaveQrCodePaymentScreen.tsx
index 452cc39..1112e77 100644
--- a/src/screens/WaveQrCodePaymentScreen.tsx
+++ b/src/screens/WaveQrCodePaymentScreen.tsx
@@ -1,13 +1,17 @@
-import type { MainStackScreenComponentProps } from "@/navigations/Types";
-import Button from "@components/Button";
-import BackgroundWithBeasyIconAndWhiteContentArea from "@components/backgrounds/BackgroundWithBeasyIconAndWhiteContentArea";
-import Box from "@components/bases/Box";
-import Text from "@components/bases/Text";
-import useWave from "@hooks/useWave";
+import { asp as g } from "@asp/asp";
+import { BarnoinPayBackground } from "@components/BarnoinPayBackground";
+import BeasyLogoIcon from "@components/BeasyLogoIcon";
+import * as Button from "@components/Button";
+import * as Modal from "@components/Modal";
+import AntDesign from "@expo/vector-icons/AntDesign";
import { LOG } from "@logger";
-import { Dimensions } from "react-native";
-// biome-ignore lint/style/useNamingConvention:
-import QRCode from "react-native-qrcode-svg";
+import { useMutation } from "@tanstack/react-query";
+import type { AxiosError } from "axios";
+import { useState } from "react";
+import { Dimensions, ScrollView, Text, View } from "react-native";
+import QrCode from "react-native-qrcode-svg";
+import { waveGetTransactionStatus } from "@/features/pay/api";
+import type { MainStackScreenComponentProps } from "@/navigations/types";
const log = LOG.extend("WaveQrCodePaymentScreen");
@@ -16,62 +20,108 @@ const WaveQrCodePaymentScreen: MainStackScreenComponentProps<"waveQrCodePaymentS
navigation,
}) => {
log.verbose("WaveQrCodePaymentScreen");
+ const [error, setError] = useState("");
const data = route.params.data;
const windowWidth = Dimensions.get("window").width;
- const { handlePaymentVerification } = useWave();
+ const qrSize = windowWidth * 0.7;
+ const [isSuccess, setIsSuccess] = useState(false);
+
+ const query = useMutation({
+ mutationKey: ["waveTransactionStatus", data.id],
+ mutationFn: () => waveGetTransactionStatus(data.id),
+ onError: (err: AxiosError) => {
+ setError(JSON.stringify(err.response?.data) || err.message);
+ },
+ onSuccess: (_data) => {
+ setIsSuccess(true);
+ },
+ });
return (
-
-
+
+
+ navigation.goBack()}
+ />
+
+
-
- Votre QR Code
-
+ Votre QR Code
-
-
-
+
+
Veuillez scanner le QR Code pour terminer le paiement
-
- handlePaymentVerification(data.id)}
- />
-
-
-
+ query.mutate()} isLoading={query.isPending}>
+ Verification
+
+
+
+
+
+
+
+ {error}
+
+
+ setError("")}>
+ OK
+
+
+
+
+
+
+
+
+ Transaction réussie
+
+ navigation.getParent()?.navigate("paymentResultScreen")}
+ >
+ OK
+
+
+
+
+
);
};
diff --git a/src/styles/Commons.tsx b/src/styles/Commons.tsx
deleted file mode 100644
index 48013a9..0000000
--- a/src/styles/Commons.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { StyleSheet } from "react-native";
-
-export const containers = StyleSheet.create({
- fullScreenContentCentered: {
- width: "100%",
- height: "100%",
- flex: 1,
- alignItems: "center",
- justifyContent: "center",
- },
- containerFull: {
- width: "100%",
- height: "100%",
- flex: 1,
- },
- containerFlexUno: {
- flex: 1,
- },
-});
-
-export const images = StyleSheet.create({
- cover: {
- flex: 1,
- width: "100%",
- height: "100%",
- resizeMode: "cover",
- },
- background: {
- flex: 1,
- resizeMode: "cover",
- justifyContent: "center",
- },
- contain: {
- flex: 1,
- width: "100%",
- height: "100%",
- resizeMode: "contain",
- },
-});
diff --git a/src/themes/variants/cardVariants.ts b/src/themes/variants/cardVariants.ts
index e731030..f9a7b4f 100644
--- a/src/themes/variants/cardVariants.ts
+++ b/src/themes/variants/cardVariants.ts
@@ -1,4 +1,5 @@
-import { OVERLAY_BACKDROP_Z_INDEX } from "@/contexts/ModalsManagerContext";
+const OVERLAY_BACKDROP_Z_INDEX = 999;
+
import { Dimensions } from "react-native";
export const cardVariants = {
diff --git a/src/utils/assetsCache.tsx b/src/utils/assetsCache.tsx
deleted file mode 100644
index b395d01..0000000
--- a/src/utils/assetsCache.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-// To load assets asynchronously
-
-import { Asset } from "expo-asset";
-
-import { LOG } from "@logger";
-
-const log = LOG.extend("assetsCache");
-
-export default function cacheAssetsAsync({
- images = [],
- fonts = [],
- videos = [],
-}: { images?: string[]; fonts?: string[]; videos?: string[] }) {
- return Promise.all([...cacheImages(images)]);
-}
-
-function cacheImages(images: string[]) {
- return images.map((image) => Asset.fromModule(image).downloadAsync());
-}
-
-// function cacheVideos(videos) {
-// return videos.map((video) => Asset.fromModule(video).downloadAsync());
-// }
-
-// function cacheFonts(fonts) {
-// return fonts.map((font) => Font.loadAsync(font));
-// }
diff --git a/src/utils/axiosRequest.ts b/src/utils/axiosRequest.ts
deleted file mode 100644
index d911edb..0000000
--- a/src/utils/axiosRequest.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { LOG } from "@logger";
-import axios, { type AxiosError, type AxiosResponse } from "axios";
-
-const log = LOG.extend("AxiosRequest");
-
-const baseUrl = process.env.EXPO_PUBLIC_API_URL;
-
-// biome-ignore lint/style/useNamingConvention:
-const client = axios.create({ baseURL: baseUrl });
-
-const axiosRequest = async ({ ...options }): Promise => {
- // console.log("base Url", baseUrl);
- // client.defaults.headers.common.Authorization = `Bearer ${""}`;
- // client.defaults.headers.common['Content-Type'] = 'application/json';
- // console.log("client default", client.defaults);
- // console.log("client datas", client.defaults.data);
- log.debug("Base url :: ", client.getUri());
- log.debug("RequestOptions :: ", options);
-
- const onSuccess = (response: T) => {
- return response;
- };
- const onError = (error: AxiosError) => {
- log.error(error);
- throw error;
- };
-
- try {
- const response: AxiosResponse = await client({ ...options });
- return onSuccess(response.data);
- } catch (error: unknown) {
- if (axios.isAxiosError(error)) {
- log.error("axiosRequest | Response :: ", JSON.stringify(error.response, null, 2));
- // log.error("Axios RequestError Reponse message:: ", error.message);
- // log.error("Axios RequestError Reponse name:: ", error.response?.data);
- } else {
- log.error("axiosRequest | General RequestError :: ", JSON.stringify(error, null, 2));
- }
- // biome-ignore lint/suspicious/noExplicitAny:
- return onError(error as any);
- }
-};
-
-export default axiosRequest;
diff --git a/src/utils/requests/authenticateUser.ts b/src/utils/requests/authenticateUser.ts
deleted file mode 100644
index b6ad52c..0000000
--- a/src/utils/requests/authenticateUser.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import type { IauthenticationData } from "@/contexts/Types";
-import { LOG } from "@logger";
-import { AxiosError } from "axios";
-import axiosRequest from "../axiosRequest";
-
-const log = LOG.extend("authenticateUser");
-
-const authenticateUser = async ({ username, password }: { username: string; password: string }) => {
- log.http({ username, password });
- const response = await axiosRequest({
- url: "/login/token/",
- method: "POST",
- data: {
- username: username,
- password: password,
- },
- });
- log.http(JSON.stringify(response, null, 2));
- return response;
-};
-
-export default authenticateUser;
-
-export const parseAuthicationErrors = (error: unknown): string => {
- if (error instanceof AxiosError && error.response) {
- switch (error.response.status) {
- case 401:
- return "Wrong username or password";
- default:
- return "Unknown Error. Please try again.";
- }
- }
- if (error instanceof AxiosError && error.request) {
- return "Network error";
- }
- return "Unknown error";
-};
diff --git a/src/utils/requests/getPaymentTypes.ts b/src/utils/requests/getPaymentTypes.ts
deleted file mode 100644
index f39d498..0000000
--- a/src/utils/requests/getPaymentTypes.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { LOG } from "@logger";
-import base64 from "react-native-base64";
-import axiosRequest from "../axiosRequest";
-import type { IpaginatedResponse, IpaymentType } from "./types";
-
-const basictoken = base64.encode("admin:admin");
-
-const log = LOG.extend("getPaymentTypes");
-const getPaymentTypes = async () => {
- log.http("getPaymentTypes");
- const response = await axiosRequest>({
- url: "/operateur/",
- method: "GET",
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- });
- log.http(JSON.stringify(response, null, 2));
- return response;
-};
-
-export default getPaymentTypes;
diff --git a/src/utils/requests/orangePayment.ts b/src/utils/requests/orangePayment.ts
deleted file mode 100644
index a5d974b..0000000
--- a/src/utils/requests/orangePayment.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import { LOG } from "@logger";
-import base64 from "react-native-base64";
-import axiosRequest from "../axiosRequest";
-
-export interface IorangePaymentStarter {
- // biome-ignore lint/style/useNamingConvention:
- type_paiement: number;
- marchand: "1";
- service: string;
- montant: number;
- commentaire: string;
- numero: string;
-}
-
-export interface IorangeResponse {
- status: number;
- message: string;
- // biome-ignore lint/style/useNamingConvention:
- pay_token: string;
- // biome-ignore lint/style/useNamingConvention:
- payment_url: string;
- // biome-ignore lint/style/useNamingConvention:
- notif_token: string;
- // biome-ignore lint/style/useNamingConvention:
- order_id: string;
-}
-
-const basictoken = base64.encode("admin:admin");
-
-export type OrangeStatus = "INITIATED" | "SUCCESS" | "FAILED";
-export interface IorangePaymentStatus {
- status: OrangeStatus;
- code: number;
- message: {
- status: OrangeStatus;
- // biome-ignore lint/style/useNamingConvention:
- order_id: string;
- txnid?: string;
- };
-}
-
-const log = LOG.extend("orangePayment");
-
-export const getTransactionsData = async (payload: IorangePaymentStarter) => {
- log.http("getTransactionsData", payload);
-
- // const basictoken = base64.encode("admin:admin");
- const response = await axiosRequest({
- url: "/transactions/",
- method: "POST",
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- data: payload,
- });
-
- log.http("getTransactionsData |", JSON.stringify(response, null, 2));
-
- return response;
-};
-
-export const getTransactionStatus = async (orderId: string) => {
- log.http("getTransactionStatus |", { orderId });
-
- try {
- const response = await axiosRequest({
- url: `/api/TransactionCheckStatus/${orderId}/`,
- method: "GET",
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- });
-
- log.http("getTransactionStatus |", JSON.stringify(response, null, 2));
- switch (response.status) {
- case "SUCCESS": {
- log.http("getTransactionStatus |", JSON.stringify(response, null, 2));
- return response;
- }
- case "INITIATED": {
- log.warn("Payment is still in progress, throwing error for mutation to catch");
- const error = new Error("Payment is still in progress");
- error.name = "ORANGE_PAYMENT_IN_PROGRESS";
- throw error;
- }
- case "FAILED": {
- log.warn("Payment failed, throwing error for mutation to catch");
- const error = new Error("Payment failed");
- error.name = "ORANGE_PAYMENT_FAILED";
- throw error;
- }
-
- default: {
- log.warn("An unknown error occured, throwing error for mutation to catch");
- const error = new Error("Payment failed");
- error.name = "ORANGE_UNKNOWN_PAYMENT_ERROR";
- throw error;
- }
- }
- } catch (error) {
- log.error(
- "getTransactionStatus | An unexpected error occured |",
- JSON.stringify(error, null, 2),
- );
- throw error;
- }
-};
diff --git a/src/utils/requests/transactions.ts b/src/utils/requests/transactions.ts
deleted file mode 100644
index bb723b9..0000000
--- a/src/utils/requests/transactions.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { LOG } from "@logger";
-import base64 from "react-native-base64";
-import axiosRequest from "../axiosRequest";
-import type { PaymentCode } from "./types";
-
-const log = LOG.extend("transactions");
-
-export interface Transaction {
- // biome-ignore lint/style/useNamingConvention:
- type_paiement: number;
- // biome-ignore lint/style/useNamingConvention:
- type_paiement_label: PaymentCode;
- marchand: string;
- // biome-ignore lint/style/useNamingConvention:
- marchand_name: string;
- service: string;
- montant: number;
- date: string;
- commentaire: string;
- etat: boolean;
- status: "SUCCESS" | "INITIATED" | "FAILED";
- reference: string;
- // biome-ignore lint/style/useNamingConvention:
- transaction_id: number;
- // biome-ignore lint/style/useNamingConvention:
- marchand_code: string;
-}
-
-export interface TransactionHistoryResponse {
- count: number;
- next: string | null;
- previous: string | null;
- results: Transaction[];
-}
-
-export const getTransactionsHistory = async (): Promise => {
- const basictoken = base64.encode("admin:admin");
-
- log.http("getTransactionsHistory");
- try {
- const response = await axiosRequest({
- url: "/transactions/",
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- });
-
- log.http("getTransactionsHistory |", JSON.stringify(response, null, 2));
-
- // TODO: Update this when the api is fixed, response should not be reversed
- return response.results.reverse();
- } catch (error) {
- log.error("getTransactionsHistory |", error);
- throw error;
- }
-};
diff --git a/src/utils/requests/types.ts b/src/utils/requests/types.ts
deleted file mode 100644
index a1a3011..0000000
--- a/src/utils/requests/types.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-export type PaymentCode = "OM" | "FLOOZ" | "MTN" | "WAVE" | "CB";
-
-export interface IpaymentType {
- id: number;
- code: PaymentCode;
- etat: boolean;
-}
-
-export interface IpaginatedResponse {
- count: number;
- next: string | null;
- previous: string | null;
- results: T;
-}
-
-export interface ImerchandInformations {
- // biome-ignore lint/style/useNamingConvention:
- marchand_id: string;
- nom: string;
- code: string;
- adresse: string;
- // biome-ignore lint/style/useNamingConvention:
- url_succes: string;
- // biome-ignore lint/style/useNamingConvention:
- url_echec: string;
- entreprise: number;
- user: number;
-}
-
-export interface IuserInformations {
- username: string;
- email: string;
- // biome-ignore lint/style/useNamingConvention:
- first_name: string;
- // biome-ignore lint/style/useNamingConvention:
- last_name: string;
- marchand: ImerchandInformations;
-}
diff --git a/src/utils/requests/userInformations.ts b/src/utils/requests/userInformations.ts
deleted file mode 100644
index f533b83..0000000
--- a/src/utils/requests/userInformations.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import { LOG } from "@logger";
-import base64 from "react-native-base64";
-import axiosRequest from "../axiosRequest";
-import type { IuserInformations } from "./types";
-
-const log = LOG.extend("getUserInformations");
-
-const getUserInformations = async (userAccessToken: string) => {
- log.http("getUserInformations", userAccessToken);
- const basictoken = base64.encode("admin:admin");
- log.http("basictoken", basictoken);
-
- const response = await axiosRequest({
- url: "/user-info/",
- method: "GET",
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- });
- log.http(JSON.stringify(response, null, 2));
- return response;
-};
-
-export default getUserInformations;
-
-export const parseUserInformationsErrors = (error: unknown): string => {
- // if (error instanceof AxiosError && error.response) {
- // switch (error.response.status) {
- // case 401:
- // return "Wrong username or password";
- // default:
- // return "Unknown Error. Please try again.";
- // }
- // }
- // if (error instanceof AxiosError && error.request) {
- // return "Network error";
- // }
- return "Failure to fetch user informations. Please try again.";
-};
diff --git a/src/utils/requests/wavePayment.ts b/src/utils/requests/wavePayment.ts
deleted file mode 100644
index 79a4cb1..0000000
--- a/src/utils/requests/wavePayment.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-import { LOG } from "@logger";
-import base64 from "react-native-base64";
-import axiosRequest from "../axiosRequest";
-
-const log = LOG.extend("wavePayment");
-
-export interface IwavePaymentStarter {
- // biome-ignore lint/style/useNamingConvention:
- type_paiement: 2; // id 2 is for wave.
- marchand: string;
- service: string;
- montant: number;
-}
-
-export interface IwaveStarterRespone {
- id: string;
- amount: string;
- // biome-ignore lint/style/useNamingConvention:
- checkout_status: string;
- // biome-ignore lint/style/useNamingConvention:
- client_reference: unknown;
- currenfy: string;
- // biome-ignore lint/style/useNamingConvention:
- error_url: string;
- // biome-ignore lint/style/useNamingConvention:
- last_payment_errror: unknown;
- // biome-ignore lint/style/useNamingConvention:
- business_name: string;
- // biome-ignore lint/style/useNamingConvention:
- payment_status: string;
- // biome-ignore lint/style/useNamingConvention:
- succes_url: string;
- // biome-ignore lint/style/useNamingConvention:
- wave_launch_url: string;
- // biome-ignore lint/style/useNamingConvention:
- when_completed: unknown;
- // biome-ignore lint/style/useNamingConvention:
- when_created: string;
- // biome-ignore lint/style/useNamingConvention:
- when_expires: string;
-}
-
-export interface IwaveStatusResponse {
- status: string;
- code: number;
- message: IwaveStarterRespone;
-}
-
-const basictoken = base64.encode("admin:admin");
-
-export const initTransaction = async (payload: IwavePaymentStarter) => {
- log.http("initTransaction", payload);
-
- // const basictoken = base64.encode("admin:admin");
- try {
- const response = await axiosRequest({
- url: "/transactions/",
- method: "POST",
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- data: payload,
- });
- log.http("initTransaction |", JSON.stringify(response, null, 2));
- return response;
- } catch (error) {
- log.error("initTransaction |", error);
- throw error;
- }
-};
-
-export const getTransactionStatus = async (id: string) => {
- log.http("getTransactionStatus", id);
-
- try {
- const response = await axiosRequest({
- url: `/wave-session/${id}/`,
- headers: {
- // biome-ignore lint/style/useNamingConvention:
- Authorization: `Basic ${basictoken}`,
- },
- });
- log.http("getTransactionStatus |", JSON.stringify(response, null, 2));
-
- return response;
- } catch (error) {
- log.error("getTransactionStatus |", error);
- throw error;
- }
-};
diff --git a/tsconfig.json b/tsconfig.json
index 194f209..34bbf79 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -14,6 +14,8 @@
"@styles/*": ["./src/styles/*"],
"@hooks/*": ["./src/hooks/*"],
"@logger": ["./src/utils/logger"],
+ "@asp/*": ["./src/appStylingPrimitives/*"],
+ "@assets/*": ["./assets/*"],
"@/*": ["./src/*"]
}
}
diff --git a/yarn.lock b/yarn.lock
index 44eb907..ae1a4cc 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -22,6 +22,15 @@
dependencies:
"@babel/highlight" "^7.10.4"
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
+ integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.27.1"
+ js-tokens "^4.0.0"
+ picocolors "^1.1.1"
+
"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7", "@babel/code-frame@^7.26.2":
version "7.26.2"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
@@ -36,6 +45,11 @@
resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367"
integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==
+"@babel/compat-data@^7.27.2":
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.0.tgz#9fc6fd58c2a6a15243cd13983224968392070790"
+ integrity sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==
+
"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.20.0", "@babel/core@^7.25.2":
version "7.26.9"
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.9.tgz#71838542a4b1e49dfed353d7acbc6eb89f4a76f2"
@@ -57,6 +71,27 @@
json5 "^2.2.3"
semver "^6.3.1"
+"@babel/core@^7.21.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.3.tgz#aceddde69c5d1def69b839d09efa3e3ff59c97cb"
+ integrity sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==
+ dependencies:
+ "@ampproject/remapping" "^2.2.0"
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-compilation-targets" "^7.27.2"
+ "@babel/helper-module-transforms" "^7.28.3"
+ "@babel/helpers" "^7.28.3"
+ "@babel/parser" "^7.28.3"
+ "@babel/template" "^7.27.2"
+ "@babel/traverse" "^7.28.3"
+ "@babel/types" "^7.28.2"
+ convert-source-map "^2.0.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.2"
+ json5 "^2.2.3"
+ semver "^6.3.1"
+
"@babel/generator@^7.20.5", "@babel/generator@^7.25.0", "@babel/generator@^7.26.9":
version "7.26.9"
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.9.tgz#75a9482ad3d0cc7188a537aa4910bc59db67cbca"
@@ -68,6 +103,17 @@
"@jridgewell/trace-mapping" "^0.3.25"
jsesc "^3.0.2"
+"@babel/generator@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e"
+ integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==
+ dependencies:
+ "@babel/parser" "^7.28.3"
+ "@babel/types" "^7.28.2"
+ "@jridgewell/gen-mapping" "^0.3.12"
+ "@jridgewell/trace-mapping" "^0.3.28"
+ jsesc "^3.0.2"
+
"@babel/helper-annotate-as-pure@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4"
@@ -86,6 +132,17 @@
lru-cache "^5.1.1"
semver "^6.3.1"
+"@babel/helper-compilation-targets@^7.27.2":
+ version "7.27.2"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
+ integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
+ dependencies:
+ "@babel/compat-data" "^7.27.2"
+ "@babel/helper-validator-option" "^7.27.1"
+ browserslist "^4.24.0"
+ lru-cache "^5.1.1"
+ semver "^6.3.1"
+
"@babel/helper-create-class-features-plugin@^7.25.9":
version "7.26.9"
resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz#d6f83e3039547fbb39967e78043cd3c8b7820c71"
@@ -119,6 +176,11 @@
lodash.debounce "^4.0.8"
resolve "^1.14.2"
+"@babel/helper-globals@^7.28.0":
+ version "7.28.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674"
+ integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
+
"@babel/helper-member-expression-to-functions@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3"
@@ -135,6 +197,14 @@
"@babel/traverse" "^7.25.9"
"@babel/types" "^7.25.9"
+"@babel/helper-module-imports@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
+ integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
+ dependencies:
+ "@babel/traverse" "^7.27.1"
+ "@babel/types" "^7.27.1"
+
"@babel/helper-module-transforms@^7.26.0":
version "7.26.0"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae"
@@ -144,6 +214,15 @@
"@babel/helper-validator-identifier" "^7.25.9"
"@babel/traverse" "^7.25.9"
+"@babel/helper-module-transforms@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6"
+ integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
+ dependencies:
+ "@babel/helper-module-imports" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
+ "@babel/traverse" "^7.28.3"
+
"@babel/helper-optimise-call-expression@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e"
@@ -192,16 +271,31 @@
resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c"
integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==
+"@babel/helper-string-parser@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
+ integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
+
"@babel/helper-validator-identifier@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7"
integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==
+"@babel/helper-validator-identifier@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8"
+ integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==
+
"@babel/helper-validator-option@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72"
integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==
+"@babel/helper-validator-option@^7.27.1":
+ version "7.27.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
+ integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
+
"@babel/helper-wrap-function@^7.25.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0"
@@ -219,6 +313,14 @@
"@babel/template" "^7.26.9"
"@babel/types" "^7.26.9"
+"@babel/helpers@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.3.tgz#b83156c0a2232c133d1b535dd5d3452119c7e441"
+ integrity sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==
+ dependencies:
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.2"
+
"@babel/highlight@^7.10.4":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6"
@@ -236,6 +338,13 @@
dependencies:
"@babel/types" "^7.26.9"
+"@babel/parser@^7.27.2", "@babel/parser@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71"
+ integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==
+ dependencies:
+ "@babel/types" "^7.28.2"
+
"@babel/plugin-proposal-decorators@^7.12.9":
version "7.25.9"
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz#8680707f943d1a3da2cd66b948179920f097e254"
@@ -744,6 +853,15 @@
"@babel/parser" "^7.26.9"
"@babel/types" "^7.26.9"
+"@babel/template@^7.27.2":
+ version "7.27.2"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
+ integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/parser" "^7.27.2"
+ "@babel/types" "^7.27.1"
+
"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3":
version "7.26.9"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.9.tgz#4398f2394ba66d05d988b2ad13c219a2c857461a"
@@ -770,6 +888,19 @@
debug "^4.3.1"
globals "^11.1.0"
+"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3":
+ version "7.28.3"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.3.tgz#6911a10795d2cce43ec6a28cffc440cca2593434"
+ integrity sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==
+ dependencies:
+ "@babel/code-frame" "^7.27.1"
+ "@babel/generator" "^7.28.3"
+ "@babel/helper-globals" "^7.28.0"
+ "@babel/parser" "^7.28.3"
+ "@babel/template" "^7.27.2"
+ "@babel/types" "^7.28.2"
+ debug "^4.3.1"
+
"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.25.2", "@babel/types@^7.25.9", "@babel/types@^7.26.9", "@babel/types@^7.3.3":
version "7.26.9"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce"
@@ -778,59 +909,76 @@
"@babel/helper-string-parser" "^7.25.9"
"@babel/helper-validator-identifier" "^7.25.9"
-"@biomejs/biome@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.7.1.tgz#db64c9640ff5a60396c40dc94ce58010f8bacd4e"
- integrity sha512-wb2UNoFXcgaMdKXKT5ytsYntaogl2FSTjDt20CZynF3v7OXQUcIpTrr+be3XoOGpoZRj3Ytq9TSpmplUREXmeA==
- optionalDependencies:
- "@biomejs/cli-darwin-arm64" "1.7.1"
- "@biomejs/cli-darwin-x64" "1.7.1"
- "@biomejs/cli-linux-arm64" "1.7.1"
- "@biomejs/cli-linux-arm64-musl" "1.7.1"
- "@biomejs/cli-linux-x64" "1.7.1"
- "@biomejs/cli-linux-x64-musl" "1.7.1"
- "@biomejs/cli-win32-arm64" "1.7.1"
- "@biomejs/cli-win32-x64" "1.7.1"
-
-"@biomejs/cli-darwin-arm64@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.7.1.tgz#5d31b472a537054f8032456f928cb76785877e3c"
- integrity sha512-qfLrIIB58dkgiY/1tgG6fSCBK22PZaSIf6blweZBsG6iMij05mEuJt50ne+zPnNFNUmt8t43NC/qOXT3iFHQBA==
-
-"@biomejs/cli-darwin-x64@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.7.1.tgz#868dd2a9285c7ec73c425eab5a0923d58477409f"
- integrity sha512-OGeyNsEcp5VnKbF9/TBjPCTHNEOm7oHegEve07U3KZmzqfpw2Oe3i9DVW8t6vvj1TYbrwWYCld25H34kBDY7Vg==
-
-"@biomejs/cli-linux-arm64-musl@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.7.1.tgz#22b5c6130d0e5da3e315da8e3975b49491102bea"
- integrity sha512-giH0/CzLOJ+wbxLxd5Shnr5xQf5fGnTRWLDe3lzjaF7IplVydNCEeZJtncB01SvyA6DAFJsvQ4LNxzAOQfEVCg==
-
-"@biomejs/cli-linux-arm64@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.7.1.tgz#495530cf404c707d8938ce10d0324ee3f7a0298a"
- integrity sha512-MQDf5wErj1iBvlcxCyOa0XqZYN8WJrupVgbNnqhntO3yVATg8GxduVUn1fDSaolznkDRsj7Pz3Xu1esBFwvfmg==
-
-"@biomejs/cli-linux-x64-musl@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.7.1.tgz#db3cd5d239deba606d72403b547344c41f87dd2b"
- integrity sha512-ySNDtPhsLxU125IFHHAxfpoHBpkM56s4mEXeO70GZtgZay/o1h8IUPWCWf5Z7gKgc4jwgYN1U1U9xabI3hZVAg==
-
-"@biomejs/cli-linux-x64@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.7.1.tgz#6ac6e680778a5b9125f2aa9685d7d14de2fa7319"
- integrity sha512-3wmCsGcC3KZ4pfTknXHfyMMlXPMhgfXVAcG5GlrR+Tq2JGiAw0EUydaLpsSBEbcG7IxH6OiUZEJZ95kAycCHBA==
-
-"@biomejs/cli-win32-arm64@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.7.1.tgz#124890636bddb112a25af64a561feaca81a3664b"
- integrity sha512-8hIDakEqZn0i6+388noYKdZ0ZrovTwnvMU/Qp/oJou0G7EPVdXupOe0oxiQSdRN0W7f6CS/yjPCYuVGzDG6r0g==
+"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.28.2":
+ version "7.28.2"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b"
+ integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==
+ dependencies:
+ "@babel/helper-string-parser" "^7.27.1"
+ "@babel/helper-validator-identifier" "^7.27.1"
-"@biomejs/cli-win32-x64@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.7.1.tgz#34e9daa9f30372acb39f5e1bdf47cbfff22419ba"
- integrity sha512-3W9k3uH6Ea6VOpAS9xkkAlS0LTfnGQjmIUCegZ8SDtK2NgJ1gO+qdEkGJb0ltahusFTN1QxJ107dM7ASA9IUEg==
+"@biomejs/biome@^2.2.0":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.2.2.tgz#a039a59ce8612ee706c0abbf285eb3ae04a6f1a9"
+ integrity sha512-j1omAiQWCkhuLgwpMKisNKnsM6W8Xtt1l0WZmqY/dFj8QPNkIoTvk4tSsi40FaAAkBE1PU0AFG2RWFBWenAn+w==
+ optionalDependencies:
+ "@biomejs/cli-darwin-arm64" "2.2.2"
+ "@biomejs/cli-darwin-x64" "2.2.2"
+ "@biomejs/cli-linux-arm64" "2.2.2"
+ "@biomejs/cli-linux-arm64-musl" "2.2.2"
+ "@biomejs/cli-linux-x64" "2.2.2"
+ "@biomejs/cli-linux-x64-musl" "2.2.2"
+ "@biomejs/cli-win32-arm64" "2.2.2"
+ "@biomejs/cli-win32-x64" "2.2.2"
+
+"@biomejs/cli-darwin-arm64@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.2.tgz#18560240d374d8fa89df7d5af0f2101971a05d04"
+ integrity sha512-6ePfbCeCPryWu0CXlzsWNZgVz/kBEvHiPyNpmViSt6A2eoDf4kXs3YnwQPzGjy8oBgQulrHcLnJL0nkCh80mlQ==
+
+"@biomejs/cli-darwin-x64@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.2.tgz#68bf6e2dc4384f96d590b2c342bfa09fbb7be492"
+ integrity sha512-Tn4JmVO+rXsbRslml7FvKaNrlgUeJot++FkvYIhl1OkslVCofAtS35MPlBMhXgKWF9RNr9cwHanrPTUUXcYGag==
+
+"@biomejs/cli-linux-arm64-musl@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.2.tgz#3f091595615739c69ccc300a5eb3acbefca3996c"
+ integrity sha512-/MhYg+Bd6renn6i1ylGFL5snYUn/Ct7zoGVKhxnro3bwekiZYE8Kl39BSb0MeuqM+72sThkQv4TnNubU9njQRw==
+
+"@biomejs/cli-linux-arm64@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.2.tgz#9ed17fc01681e83a1d52efd366f9edc3efbca0ae"
+ integrity sha512-JfrK3gdmWWTh2J5tq/rcWCOsImVyzUnOS2fkjhiYKCQ+v8PqM+du5cfB7G1kXas+7KQeKSWALv18iQqdtIMvzw==
+
+"@biomejs/cli-linux-x64-musl@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.2.tgz#01bcb119f2f94af5e5610a961b9ffcfa26cf2a3b"
+ integrity sha512-ZCLXcZvjZKSiRY/cFANKg+z6Fhsf9MHOzj+NrDQcM+LbqYRT97LyCLWy2AS+W2vP+i89RyRM+kbGpUzbRTYWig==
+
+"@biomejs/cli-linux-x64@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.2.tgz#c5d0c6ce58b90e30f123e2cfdb29d2add65e2384"
+ integrity sha512-Ogb+77edO5LEP/xbNicACOWVLt8mgC+E1wmpUakr+O4nKwLt9vXe74YNuT3T1dUBxC/SnrVmlzZFC7kQJEfquQ==
+
+"@biomejs/cli-win32-arm64@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.2.tgz#26e0fe782de6d83f3ecb4f247322a483104d749a"
+ integrity sha512-wBe2wItayw1zvtXysmHJQoQqXlTzHSpQRyPpJKiNIR21HzH/CrZRDFic1C1jDdp+zAPtqhNExa0owKMbNwW9cQ==
+
+"@biomejs/cli-win32-x64@2.2.2":
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.2.tgz#8c08d82e50b06ad50e4bc54b4bb41428d4261b5c"
+ integrity sha512-DAuHhHekGfiGb6lCcsT4UyxQmVwQiBCBUMwVra/dcOSs9q8OhfaZgey51MlekT3p8UwRqtXQfFuEJBhJNdLZwg==
+
+"@conventional-changelog/git-client@^2.5.1":
+ version "2.5.1"
+ resolved "https://registry.yarnpkg.com/@conventional-changelog/git-client/-/git-client-2.5.1.tgz#770d3911264653492d18366751e06b14a6ec7b3d"
+ integrity sha512-lAw7iA5oTPWOLjiweb7DlGEMDEvzqzLLa6aWOly2FSZ64IwLE8T458rC+o+WvI31Doz6joM7X2DoNog7mX8r4A==
+ dependencies:
+ "@simple-libs/child-process-utils" "^1.0.0"
+ "@simple-libs/stream-utils" "^1.1.0"
+ semver "^7.5.2"
"@egjs/hammerjs@^2.0.17":
version "2.0.17"
@@ -1150,6 +1298,33 @@
find-up "^5.0.0"
js-yaml "^4.1.0"
+"@gorhom/bottom-sheet@^5":
+ version "5.2.6"
+ resolved "https://registry.yarnpkg.com/@gorhom/bottom-sheet/-/bottom-sheet-5.2.6.tgz#5f2045f6ca965383afe39f7dfa3afad1502b7467"
+ integrity sha512-vmruJxdiUGDg+ZYcDmS30XDhq/h/+QkINOI5LY/uGjx8cPGwgJW0H6AB902gNTKtccbiKe/rr94EwdmIEz+LAQ==
+ dependencies:
+ "@gorhom/portal" "1.0.14"
+ invariant "^2.2.4"
+
+"@gorhom/portal@1.0.14":
+ version "1.0.14"
+ resolved "https://registry.yarnpkg.com/@gorhom/portal/-/portal-1.0.14.tgz#1953edb76aaba80fb24021dc774550194a18e111"
+ integrity sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==
+ dependencies:
+ nanoid "^3.3.1"
+
+"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0":
+ version "9.3.0"
+ resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb"
+ integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==
+
+"@hapi/topo@^5.1.0":
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012"
+ integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
@@ -1247,6 +1422,17 @@
slash "^3.0.0"
write-file-atomic "^4.0.2"
+"@jest/types@^26.6.2":
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
+ integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+
"@jest/types@^29.6.3":
version "29.6.3"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59"
@@ -1259,6 +1445,14 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
+"@jridgewell/gen-mapping@^0.3.12":
+ version "0.3.13"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
+ integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
+ dependencies:
+ "@jridgewell/sourcemap-codec" "^1.5.0"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
version "0.3.8"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142"
@@ -1291,6 +1485,11 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
+"@jridgewell/sourcemap-codec@^1.5.0":
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
+ integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
+
"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
version "0.3.25"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
@@ -1299,6 +1498,14 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@jridgewell/trace-mapping@^0.3.28":
+ version "0.3.30"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz#4a76c4daeee5df09f5d3940e087442fb36ce2b99"
+ integrity sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
"@motionone/animation@^10.12.0":
version "10.18.0"
resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.18.0.tgz#868d00b447191816d5d5cf24b1cafa144017922b"
@@ -1352,6 +1559,27 @@
hey-listen "^1.0.8"
tslib "^2.3.1"
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3":
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
"@pkgjs/parseargs@^0.11.0":
version "0.11.0"
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
@@ -1364,6 +1592,167 @@
dependencies:
merge-options "^3.0.4"
+"@react-native-community/cli-clean@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-15.1.3.tgz#cc177378d9c903737fbc1f22d7aa712a61d562be"
+ integrity sha512-3s9NGapIkONFoCUN2s77NYI987GPSCdr74rTf0TWyGIDf4vTYgKoWKKR+Ml3VTa1BCj51r4cYuHEKE1pjUSc0w==
+ dependencies:
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ execa "^5.0.0"
+ fast-glob "^3.3.2"
+
+"@react-native-community/cli-config-android@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-config-android/-/cli-config-android-15.1.3.tgz#c1d91246291c8584ab7bafc63198860d86884f24"
+ integrity sha512-v9okV/WQfMJEWRddI0S6no2v9Lvk54KgFkw1mvMYhJKVqloCNsIWzoqme0u7zIuYSzwsjXUQXVlGiDzbbwdkBw==
+ dependencies:
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ fast-glob "^3.3.2"
+ fast-xml-parser "^4.4.1"
+
+"@react-native-community/cli-config-apple@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-config-apple/-/cli-config-apple-15.1.3.tgz#fa9aab320d6f8fa3319fef9304e442dd11884d58"
+ integrity sha512-Qv6jaEaycv+7s8wR9l9bdpIeSNFCeVANfGCX1x76SgOmGfZNIa7J3l1HaeF/5ktERMYsw/hm4u3rUn4Ks0YV1g==
+ dependencies:
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ execa "^5.0.0"
+ fast-glob "^3.3.2"
+
+"@react-native-community/cli-config@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-15.1.3.tgz#bdc12e63ff72963319a527acb313978b37d106c1"
+ integrity sha512-fJ9MrWp+/SszEVg5Wja8A57Whl5EfjRCHWFNkvFBtfjVUfi2hWvSTW3VBxzJuCHnPIIwpQafwjEgOrIRUI8y6w==
+ dependencies:
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ cosmiconfig "^9.0.0"
+ deepmerge "^4.3.0"
+ fast-glob "^3.3.2"
+ joi "^17.2.1"
+
+"@react-native-community/cli-debugger-ui@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-15.1.3.tgz#fc8ac730bf1b61e16b2e3910ef654c79726ee654"
+ integrity sha512-m+fb9iAUNb9WiDdokCBLh0InJvollcgAM3gLjCT8DGTP6bH/jxtZ3DszzyIRqN9cMamItVrvDM0vkIg48xK7rQ==
+ dependencies:
+ serve-static "^1.13.1"
+
+"@react-native-community/cli-doctor@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-15.1.3.tgz#2a6d103e899773fe738f67d97da0a4f74549eed9"
+ integrity sha512-WC9rawobuITAtJjyZ68E1M0geRt+b9A2CGB354L/tQp+XMKobGGVI4Y0DsattK83Wdg59GPyldE8C0Wevfgm/A==
+ dependencies:
+ "@react-native-community/cli-config" "15.1.3"
+ "@react-native-community/cli-platform-android" "15.1.3"
+ "@react-native-community/cli-platform-apple" "15.1.3"
+ "@react-native-community/cli-platform-ios" "15.1.3"
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ command-exists "^1.2.8"
+ deepmerge "^4.3.0"
+ envinfo "^7.13.0"
+ execa "^5.0.0"
+ node-stream-zip "^1.9.1"
+ ora "^5.4.1"
+ semver "^7.5.2"
+ strip-ansi "^5.2.0"
+ wcwidth "^1.0.1"
+ yaml "^2.2.1"
+
+"@react-native-community/cli-platform-android@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-15.1.3.tgz#c10c434ea559414b00ca3297a4aabbbba16647c8"
+ integrity sha512-ZwrBK0UK4DRHoQm2v5m8+PlNHBK5gmibBU6rqNFLo4aZJ2Rufalbv3SF+DukgSyoI9/kI8UVrzSNj17e+HhN5A==
+ dependencies:
+ "@react-native-community/cli-config-android" "15.1.3"
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ execa "^5.0.0"
+ logkitty "^0.7.1"
+
+"@react-native-community/cli-platform-apple@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-15.1.3.tgz#e8cd6d7edad60ee21e38d9c338332645a05d05e3"
+ integrity sha512-awotqCGVcTdeRmTlE3wlsZgNxZUDGojUhPYOVMKejgdCzNM2bvzF8fqhETH2sc64Hbw/tQJg8pYeD4MZR0bHxw==
+ dependencies:
+ "@react-native-community/cli-config-apple" "15.1.3"
+ "@react-native-community/cli-tools" "15.1.3"
+ chalk "^4.1.2"
+ execa "^5.0.0"
+ fast-xml-parser "^4.4.1"
+
+"@react-native-community/cli-platform-ios@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-15.1.3.tgz#57d119796b2eab49565131cdfefcf22211a8fdad"
+ integrity sha512-DxM8GYkqjrlGuuGiGjrcvUmKC2xv9zDzHbsc4+S160Nn0zbF2OH1DhMlnIuUeCmQnAO6QFMqU99O120iEzCAug==
+ dependencies:
+ "@react-native-community/cli-platform-apple" "15.1.3"
+
+"@react-native-community/cli-server-api@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-15.1.3.tgz#a0da5d36680802f699f6ddea4873048fb57dfa19"
+ integrity sha512-kXZ0evedluLt6flWQiI3JqwnW8rSBspOoQ7JVTQYiG5lDHAeL3Om9PjAyiQBg1EZRMjiWZDV7nDxhR+m+6NX5Q==
+ dependencies:
+ "@react-native-community/cli-debugger-ui" "15.1.3"
+ "@react-native-community/cli-tools" "15.1.3"
+ compression "^1.7.1"
+ connect "^3.6.5"
+ errorhandler "^1.5.1"
+ nocache "^3.0.1"
+ pretty-format "^26.6.2"
+ serve-static "^1.13.1"
+ ws "^6.2.3"
+
+"@react-native-community/cli-tools@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-15.1.3.tgz#354863cefd8e39e674c072c6b18a1ac4d4497d30"
+ integrity sha512-2RzoUKR+Y03ijBeeSoCSQihyN6dxy3fbHjraO4MheZZUzt/Yd1VMEDd0R5aa6rtiRDoknbHt45RL2GMa8MSaEA==
+ dependencies:
+ appdirsjs "^1.2.4"
+ chalk "^4.1.2"
+ execa "^5.0.0"
+ find-up "^5.0.0"
+ mime "^2.4.1"
+ open "^6.2.0"
+ ora "^5.4.1"
+ prompts "^2.4.2"
+ semver "^7.5.2"
+ shell-quote "^1.7.3"
+ sudo-prompt "^9.0.0"
+
+"@react-native-community/cli-types@15.1.3":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-15.1.3.tgz#1e6d6cd24e2eba974031fc7553f214b653b1f1b4"
+ integrity sha512-0ZaM8LMsa7z7swBN+ObL2ysc6aA3AdS698Q6uEukym6RyX1uLbiofUdlvFSMpWSEL3D8f9OTymmL4RkCH8k6dw==
+ dependencies:
+ joi "^17.2.1"
+
+"@react-native-community/cli@^15.1.2":
+ version "15.1.3"
+ resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-15.1.3.tgz#35c113d19282b8ac22bfa55ac0045fa8d3c04834"
+ integrity sha512-+ih/WYUkJsEV2CMAnOHvVoSIz/Ahg5UJk+sqSIOmY79mWAglQzfLP71o7b0neJCnJWLmWiO6G6/S+kmULefD5g==
+ dependencies:
+ "@react-native-community/cli-clean" "15.1.3"
+ "@react-native-community/cli-config" "15.1.3"
+ "@react-native-community/cli-debugger-ui" "15.1.3"
+ "@react-native-community/cli-doctor" "15.1.3"
+ "@react-native-community/cli-server-api" "15.1.3"
+ "@react-native-community/cli-tools" "15.1.3"
+ "@react-native-community/cli-types" "15.1.3"
+ chalk "^4.1.2"
+ commander "^9.4.1"
+ deepmerge "^4.3.0"
+ execa "^5.0.0"
+ find-up "^5.0.0"
+ fs-extra "^8.1.0"
+ graceful-fs "^4.1.3"
+ prompts "^2.4.2"
+ semver "^7.5.2"
+
"@react-native/assets-registry@0.79.5":
version "0.79.5"
resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.5.tgz#90a178ec6646a22eb4218285cc2df7fd82603e34"
@@ -1533,65 +1922,119 @@
invariant "^2.2.4"
nullthrows "^1.1.1"
-"@react-navigation/bottom-tabs@^7.0.0-alpha.22":
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-7.2.1.tgz#bae1f92c7549e64520310a45b9da7ef6d95a47ca"
- integrity sha512-UGC7csRD/1+SJKLbaEg8K44KvkdBaEBIro0PpIRawRmHS93emf4LNfDafd8y6pReJN93OVVnqLWqcYozx4lZ4A==
+"@react-navigation/bottom-tabs@^7.4.6":
+ version "7.4.7"
+ resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-7.4.7.tgz#c6fb80bfe25f47db27491918a764e01877f7efeb"
+ integrity sha512-SQ4KuYV9yr3SV/thefpLWhAD0CU2CrBMG1l0w/QKl3GYuGWdN5OQmdQdmaPZGtsjjVOb+N9Qo7Tf6210P4TlpA==
dependencies:
- "@react-navigation/elements" "^2.2.6"
+ "@react-navigation/elements" "^2.6.4"
color "^4.2.3"
-"@react-navigation/core@^7.4.0":
- version "7.4.0"
- resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-7.4.0.tgz#416177bae380ccf4de53916fb7ab8c3d80f25652"
- integrity sha512-URiDluFl7cLA7GtOAsEvRqPmEMlSSXadqQ3wi9+Dl43dNRMqnoF76WQ9BCXeUPLydJq4yVte9XeMPyD6a0lY1g==
+"@react-navigation/core@^7.12.4":
+ version "7.12.4"
+ resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-7.12.4.tgz#73cc4c0989455c93bf21d7aeecc89d3a7006ccde"
+ integrity sha512-xLFho76FA7v500XID5z/8YfGTvjQPw7/fXsq4BIrVSqetNe/o/v+KAocEw4ots6kyv3XvSTyiWKh2g3pN6xZ9Q==
dependencies:
- "@react-navigation/routers" "^7.2.0"
+ "@react-navigation/routers" "^7.5.1"
escape-string-regexp "^4.0.0"
- nanoid "3.3.8"
+ nanoid "^3.3.11"
query-string "^7.1.3"
- react-is "^18.2.0"
- use-latest-callback "^0.2.1"
- use-sync-external-store "^1.2.2"
+ react-is "^19.1.0"
+ use-latest-callback "^0.2.4"
+ use-sync-external-store "^1.5.0"
-"@react-navigation/elements@^2.2.6":
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-2.2.6.tgz#7f9bf87e9c48c4c47bb3b59650bc3a884a9998ae"
- integrity sha512-UPeaCcEDSDRaxjG+qEHbur6jmNW/f9QNCyPsUt6NMgPEdbB5Z8K8oSx2swIaiCnvUbs/K5G3MuWkqQxGj8QXXA==
+"@react-navigation/elements@^2.6.4":
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-2.6.4.tgz#f1dc8548b1289588fabcd2f0342c1391c689a49f"
+ integrity sha512-O3X9vWXOEhAO56zkQS7KaDzL8BvjlwZ0LGSteKpt1/k6w6HONG+2Wkblrb057iKmehTkEkQMzMLkXiuLmN5x9Q==
dependencies:
color "^4.2.3"
+ use-latest-callback "^0.2.4"
+ use-sync-external-store "^1.5.0"
-"@react-navigation/native-stack@^7.0.0-alpha.20":
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-7.2.1.tgz#0d89e13999520a3b05de742ff1f6745b9e981870"
- integrity sha512-zqC6DVpO4pFZrl+8JuIgV8qk+AGdTuv+hJ5EHePmzs9gYSUrDpw6LahFCiXshwBvi9LinIw9Do7mtnQK2Q8AGA==
+"@react-navigation/native-stack@^7.3.25":
+ version "7.3.26"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-7.3.26.tgz#a08ee0626e49428a808da9d810f24db5b08deae9"
+ integrity sha512-EjaBWzLZ76HJGOOcWCFf+h/M+Zg7M1RalYioDOb6ZdXHz7AwYNidruT3OUAQgSzg3gVLqvu5OYO0jFsNDPCZxQ==
dependencies:
- "@react-navigation/elements" "^2.2.6"
+ "@react-navigation/elements" "^2.6.4"
warn-once "^0.1.1"
-"@react-navigation/native@^7.0.0-alpha.18":
- version "7.0.15"
- resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-7.0.15.tgz#683f7e41c27c0728ca0f254825c960e97b0e5983"
- integrity sha512-72PabJJ8VY3GM8i/DCutFW+ATED96ZV6NH+bW+ry1EL0ZFGHoie96H+KzTqktsrUbBw1rd9KXbEQhBQgo0N7iQ==
+"@react-navigation/native@^7.1.17":
+ version "7.1.17"
+ resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-7.1.17.tgz#88d557c0f5000aa2741e4368c59719526f1394c4"
+ integrity sha512-uEcYWi1NV+2Qe1oELfp9b5hTYekqWATv2cuwcOAg5EvsIsUPtzFrKIasgUXLBRGb9P7yR5ifoJ+ug4u6jdqSTQ==
dependencies:
- "@react-navigation/core" "^7.4.0"
+ "@react-navigation/core" "^7.12.4"
escape-string-regexp "^4.0.0"
fast-deep-equal "^3.1.3"
- nanoid "3.3.8"
- use-latest-callback "^0.2.1"
+ nanoid "^3.3.11"
+ use-latest-callback "^0.2.4"
-"@react-navigation/routers@^7.2.0":
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-7.2.0.tgz#2e4cad8d2939b1394dc2bd4a02cd8d20d02a5bbb"
- integrity sha512-lMyib39H4a//u+eiyt162U6TwCfI8zJbjl9ovjKtDddQ4/Vf7b8/OhyimnJH09N2CBfm4pv0gCV6Q0WnZcfaJg==
+"@react-navigation/routers@^7.5.1":
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/@react-navigation/routers/-/routers-7.5.1.tgz#b8f6e9b491fdc1bc7164fdac4fa4faa82f397daf"
+ integrity sha512-pxipMW/iEBSUrjxz2cDD7fNwkqR4xoi0E/PcfTQGCcdJwLoaxzab5kSadBLj1MTJyT0YRrOXL9umHpXtp+Dv4w==
+ dependencies:
+ nanoid "^3.3.11"
+
+"@reduxjs/toolkit@^2.8.2":
+ version "2.9.0"
+ resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.9.0.tgz#d4b12b90c27716a6a507193f8c3b2880729b97d5"
+ integrity sha512-fSfQlSRu9Z5yBkvsNhYF2rPS8cGXn/TZVrlwN1948QyZ8xMZ0JvP50S2acZNaf+o63u6aEeMjipFyksjIcWrog==
dependencies:
- nanoid "3.3.8"
+ "@standard-schema/spec" "^1.0.0"
+ "@standard-schema/utils" "^0.3.0"
+ immer "^10.0.3"
+ redux "^5.0.1"
+ redux-thunk "^3.1.0"
+ reselect "^5.1.0"
+
+"@shopify/flash-list@1.7.6":
+ version "1.7.6"
+ resolved "https://registry.yarnpkg.com/@shopify/flash-list/-/flash-list-1.7.6.tgz#367e76866c71d1f1be0ff70f0b28be4bbfbcf595"
+ integrity sha512-0kuuAbWgy4YSlN05mt0ScvxK8uiDixMsICWvDed+LTxvZ5+5iRyt3M8cRLUroB8sfiZlJJZWlxHrx0frBpsYOQ==
+ dependencies:
+ recyclerlistview "4.2.3"
+ tslib "2.8.1"
"@shopify/restyle@^2.4.4":
version "2.4.4"
resolved "https://registry.yarnpkg.com/@shopify/restyle/-/restyle-2.4.4.tgz#a94dde4e7fcfa03bc5f06648b70ecf47caa661ba"
integrity sha512-Y64T8pCSKZi7ChMMfCfe+EJJsqeF+lNLsxYDHbuU63ffLHN7wRwIALJY6VqzcJWZX3fhCztX7AqOkgc7CetfPg==
+"@sideway/address@^4.1.5":
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
+ integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==
+ dependencies:
+ "@hapi/hoek" "^9.0.0"
+
+"@sideway/formula@^3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f"
+ integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==
+
+"@sideway/pinpoint@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df"
+ integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==
+
+"@simple-libs/child-process-utils@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@simple-libs/child-process-utils/-/child-process-utils-1.0.1.tgz#75062207018fff34727364c5a77ee7d4289874ad"
+ integrity sha512-3nWd8irxvDI6v856wpPCHZ+08iQR0oHTZfzAZmnbsLzf+Sf1odraP6uKOHDZToXq3RPRV/LbqGVlSCogm9cJjg==
+ dependencies:
+ "@simple-libs/stream-utils" "^1.1.0"
+ "@types/node" "^22.0.0"
+
+"@simple-libs/stream-utils@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@simple-libs/stream-utils/-/stream-utils-1.1.0.tgz#646d414701d15fdb0636561a744ff978e985dda5"
+ integrity sha512-6rsHTjodIn/t90lv5snQjRPVtOosM7Vp0AKdrObymq45ojlgVwnpAqdc+0OBBrpEiy31zZ6/TKeIVqV1HwvnuQ==
+ dependencies:
+ "@types/node" "^22.0.0"
+
"@sinclair/typebox@^0.27.8":
version "0.27.8"
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
@@ -1611,6 +2054,108 @@
dependencies:
"@sinonjs/commons" "^3.0.0"
+"@standard-schema/spec@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/spec/-/spec-1.0.0.tgz#f193b73dc316c4170f2e82a881da0f550d551b9c"
+ integrity sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==
+
+"@standard-schema/utils@^0.3.0":
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/@standard-schema/utils/-/utils-0.3.0.tgz#3d5e608f16c2390c10528e98e59aef6bf73cae7b"
+ integrity sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==
+
+"@svgr/babel-plugin-add-jsx-attribute@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz#4001f5d5dd87fa13303e36ee106e3ff3a7eb8b22"
+ integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==
+
+"@svgr/babel-plugin-remove-jsx-attribute@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186"
+ integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==
+
+"@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44"
+ integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==
+
+"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz#8fbb6b2e91fa26ac5d4aa25c6b6e4f20f9c0ae27"
+ integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==
+
+"@svgr/babel-plugin-svg-dynamic-title@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz#1d5ba1d281363fc0f2f29a60d6d936f9bbc657b0"
+ integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==
+
+"@svgr/babel-plugin-svg-em-dimensions@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz#35e08df300ea8b1d41cb8f62309c241b0369e501"
+ integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==
+
+"@svgr/babel-plugin-transform-react-native-svg@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz#90a8b63998b688b284f255c6a5248abd5b28d754"
+ integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==
+
+"@svgr/babel-plugin-transform-svg-component@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz#013b4bfca88779711f0ed2739f3f7efcefcf4f7e"
+ integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==
+
+"@svgr/babel-preset@8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-8.1.0.tgz#0e87119aecdf1c424840b9d4565b7137cabf9ece"
+ integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==
+ dependencies:
+ "@svgr/babel-plugin-add-jsx-attribute" "8.0.0"
+ "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0"
+ "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0"
+ "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0"
+ "@svgr/babel-plugin-svg-dynamic-title" "8.0.0"
+ "@svgr/babel-plugin-svg-em-dimensions" "8.0.0"
+ "@svgr/babel-plugin-transform-react-native-svg" "8.1.0"
+ "@svgr/babel-plugin-transform-svg-component" "8.0.0"
+
+"@svgr/core@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/core/-/core-8.1.0.tgz#41146f9b40b1a10beaf5cc4f361a16a3c1885e88"
+ integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==
+ dependencies:
+ "@babel/core" "^7.21.3"
+ "@svgr/babel-preset" "8.1.0"
+ camelcase "^6.2.0"
+ cosmiconfig "^8.1.3"
+ snake-case "^3.0.4"
+
+"@svgr/hast-util-to-babel-ast@8.0.0":
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz#6952fd9ce0f470e1aded293b792a2705faf4ffd4"
+ integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==
+ dependencies:
+ "@babel/types" "^7.21.3"
+ entities "^4.4.0"
+
+"@svgr/plugin-jsx@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz#96969f04a24b58b174ee4cd974c60475acbd6928"
+ integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==
+ dependencies:
+ "@babel/core" "^7.21.3"
+ "@svgr/babel-preset" "8.1.0"
+ "@svgr/hast-util-to-babel-ast" "8.0.0"
+ svg-parser "^2.0.4"
+
+"@svgr/plugin-svgo@^8.1.0":
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz#b115b7b967b564f89ac58feae89b88c3decd0f00"
+ integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==
+ dependencies:
+ cosmiconfig "^8.1.3"
+ deepmerge "^4.3.1"
+ svgo "^3.0.2"
+
"@tanstack/query-core@5.66.11":
version "5.66.11"
resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.66.11.tgz#0c3660ee7d185598e2b3d1ffcdaba55f5b7ce6ae"
@@ -1623,6 +2168,11 @@
dependencies:
"@tanstack/query-core" "5.66.11"
+"@trysound/sax@0.2.0":
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad"
+ integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==
+
"@types/babel__core@^7.1.14":
version "7.20.5"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
@@ -1694,6 +2244,18 @@
dependencies:
undici-types "~6.20.0"
+"@types/node@^22.0.0":
+ version "22.18.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-22.18.1.tgz#cc85ee6999b2a2928739281d2f56ff410a140c52"
+ integrity sha512-rzSDyhn4cYznVG+PCzGe1lwuMYJrcBS1fc3JqSa2PvtABwWo+dZ1ij5OVok3tqfpEBCBoaR4d7upFJk73HRJDw==
+ dependencies:
+ undici-types "~6.21.0"
+
+"@types/normalize-package-data@^2.4.4":
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901"
+ integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==
+
"@types/react-native-base64@^0.2.2":
version "0.2.2"
resolved "https://registry.yarnpkg.com/@types/react-native-base64/-/react-native-base64-0.2.2.tgz#d4e1d537e6d547d23d96a1e64627acc13587ae6b"
@@ -1733,11 +2295,23 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
+"@types/use-sync-external-store@^0.0.6":
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz#60be8d21baab8c305132eb9cb912ed497852aadc"
+ integrity sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==
+
"@types/yargs-parser@*":
version "21.0.3"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
+"@types/yargs@^15.0.0":
+ version "15.0.19"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9"
+ integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==
+ dependencies:
+ "@types/yargs-parser" "*"
+
"@types/yargs@^17.0.8":
version "17.0.33"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d"
@@ -1773,7 +2347,7 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
-accepts@^1.3.7, accepts@^1.3.8:
+accepts@^1.3.7, accepts@^1.3.8, accepts@~1.3.7:
version "1.3.8"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
@@ -1830,6 +2404,15 @@ ansi-escapes@^7.0.0:
dependencies:
environment "^1.0.0"
+ansi-fragments@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e"
+ integrity sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==
+ dependencies:
+ colorette "^1.0.7"
+ slice-ansi "^2.0.0"
+ strip-ansi "^5.0.0"
+
ansi-regex@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
@@ -1845,7 +2428,7 @@ ansi-regex@^6.0.1:
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
-ansi-styles@^3.2.1:
+ansi-styles@^3.2.0, ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -1882,6 +2465,11 @@ anymatch@^3.0.3:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+appdirsjs@^1.2.4:
+ version "1.2.7"
+ resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.7.tgz#50b4b7948a26ba6090d4aede2ae2dc2b051be3b3"
+ integrity sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==
+
application-config-path@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.1.tgz#8b5ac64ff6afdd9bd70ce69f6f64b6998f5f756e"
@@ -1914,6 +2502,11 @@ asap@~2.0.6:
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==
+astral-regex@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
+ integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+
async-limiter@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
@@ -2088,6 +2681,15 @@ big-integer@1.6.x:
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
+bl@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
boolbase@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
@@ -2158,7 +2760,7 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
-buffer@^5.4.3:
+buffer@^5.4.3, buffer@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
@@ -2198,6 +2800,11 @@ callsites@^2.0.0:
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==
+callsites@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
+ integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
+
camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
@@ -2279,6 +2886,13 @@ cli-cursor@^2.1.0:
dependencies:
restore-cursor "^2.0.0"
+cli-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+ integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+ dependencies:
+ restore-cursor "^3.1.0"
+
cli-cursor@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38"
@@ -2286,7 +2900,7 @@ cli-cursor@^5.0.0:
dependencies:
restore-cursor "^5.0.0"
-cli-spinners@^2.0.0:
+cli-spinners@^2.0.0, cli-spinners@^2.5.0:
version "2.9.2"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41"
integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
@@ -2371,6 +2985,11 @@ color@^4.2.3:
color-convert "^2.0.1"
color-string "^1.9.0"
+colorette@^1.0.7:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
+ integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
+
colorette@^2.0.20:
version "2.0.20"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
@@ -2383,7 +3002,7 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
-command-exists@^1.2.4:
+command-exists@^1.2.4, command-exists@^1.2.8:
version "1.2.9"
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
@@ -2413,6 +3032,11 @@ commander@^7.2.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+commander@^9.4.1:
+ version "9.5.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
+ integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
+
compressible@~2.0.18:
version "2.0.18"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
@@ -2420,6 +3044,19 @@ compressible@~2.0.18:
dependencies:
mime-db ">= 1.43.0 < 2"
+compression@^1.7.1:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79"
+ integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==
+ dependencies:
+ bytes "3.1.2"
+ compressible "~2.0.18"
+ debug "2.6.9"
+ negotiator "~0.6.4"
+ on-headers "~1.1.0"
+ safe-buffer "5.2.1"
+ vary "~1.1.2"
+
compression@^1.7.4:
version "1.8.0"
resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.0.tgz#09420efc96e11a0f44f3a558de59e321364180f7"
@@ -2448,6 +3085,47 @@ connect@^3.6.5, connect@^3.7.0:
parseurl "~1.3.3"
utils-merge "1.0.1"
+conventional-changelog-preset-loader@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz#922ad617c13ad3243bef967cfc0f8373893c216d"
+ integrity sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==
+
+conventional-changelog-writer@^8.2.0:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz#1b77ef8e45ccc4559e02a23a34d50c15d2051e5a"
+ integrity sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==
+ dependencies:
+ conventional-commits-filter "^5.0.0"
+ handlebars "^4.7.7"
+ meow "^13.0.0"
+ semver "^7.5.2"
+
+conventional-changelog@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-7.1.1.tgz#9dbeb2ed54d519f53edd2922eda4145990f1de62"
+ integrity sha512-rlqa8Lgh8YzT3Akruk05DR79j5gN9NCglHtJZwpi6vxVeaoagz+84UAtKQj/sT+RsfGaZkt3cdFCjcN6yjr5sw==
+ dependencies:
+ "@conventional-changelog/git-client" "^2.5.1"
+ "@types/normalize-package-data" "^2.4.4"
+ conventional-changelog-preset-loader "^5.0.0"
+ conventional-changelog-writer "^8.2.0"
+ conventional-commits-parser "^6.2.0"
+ fd-package-json "^2.0.0"
+ meow "^13.0.0"
+ normalize-package-data "^7.0.0"
+
+conventional-commits-filter@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz#72811f95d379e79d2d39d5c0c53c9351ef284e86"
+ integrity sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==
+
+conventional-commits-parser@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-6.2.0.tgz#1a2159471896f43101b8817e5709b8da78334aaa"
+ integrity sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==
+ dependencies:
+ meow "^13.0.0"
+
convert-source-map@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
@@ -2470,6 +3148,26 @@ cosmiconfig@^5.0.5:
js-yaml "^3.13.1"
parse-json "^4.0.0"
+cosmiconfig@^8.1.3:
+ version "8.3.6"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3"
+ integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==
+ dependencies:
+ import-fresh "^3.3.0"
+ js-yaml "^4.1.0"
+ parse-json "^5.2.0"
+ path-type "^4.0.0"
+
+cosmiconfig@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d"
+ integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==
+ dependencies:
+ env-paths "^2.2.1"
+ import-fresh "^3.3.0"
+ js-yaml "^4.1.0"
+ parse-json "^5.2.0"
+
cross-spawn@^7.0.3, cross-spawn@^7.0.6:
version "7.0.6"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
@@ -2503,16 +3201,44 @@ css-tree@^1.1.3:
mdn-data "2.0.14"
source-map "^0.6.1"
+css-tree@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
+ integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==
+ dependencies:
+ mdn-data "2.0.30"
+ source-map-js "^1.0.1"
+
+css-tree@~2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032"
+ integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==
+ dependencies:
+ mdn-data "2.0.28"
+ source-map-js "^1.0.1"
+
css-what@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
+csso@^5.0.5:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6"
+ integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==
+ dependencies:
+ css-tree "~2.2.0"
+
csstype@^3.0.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
+dayjs@^1.8.15:
+ version "1.11.18"
+ resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.18.tgz#835fa712aac52ab9dec8b1494098774ed7070a11"
+ integrity sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==
+
debug@2.6.9, debug@^2.2.0, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -2549,7 +3275,7 @@ deep-extend@^0.6.0:
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-deepmerge@^4.3.1:
+deepmerge@^4.3.0, deepmerge@^4.3.1:
version "4.3.1"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
@@ -2621,6 +3347,14 @@ domutils@^3.0.1:
domelementtype "^2.3.0"
domhandler "^5.0.3"
+dot-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
+ integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
+ dependencies:
+ no-case "^3.0.4"
+ tslib "^2.0.3"
+
dotenv-expand@~11.0.6:
version "11.0.7"
resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08"
@@ -2682,7 +3416,7 @@ encodeurl@~2.0.0:
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58"
integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==
-entities@^4.2.0:
+entities@^4.2.0, entities@^4.4.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
@@ -2692,6 +3426,16 @@ env-editor@^0.4.1:
resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861"
integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==
+env-paths@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+envinfo@^7.13.0:
+ version "7.14.0"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae"
+ integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==
+
environment@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1"
@@ -2716,6 +3460,14 @@ error-stack-parser@^2.0.6:
dependencies:
stackframe "^1.3.4"
+errorhandler@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.5.1.tgz#b9ba5d17cf90744cd1e851357a6e75bf806a9a91"
+ integrity sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==
+ dependencies:
+ accepts "~1.3.7"
+ escape-html "~1.0.3"
+
es-define-property@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
@@ -2793,6 +3545,21 @@ exec-async@^2.2.0:
resolved "https://registry.yarnpkg.com/exec-async/-/exec-async-2.2.0.tgz#c7c5ad2eef3478d38390c6dd3acfe8af0efc8301"
integrity sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==
+execa@^5.0.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
+ dependencies:
+ cross-spawn "^7.0.3"
+ get-stream "^6.0.0"
+ human-signals "^2.1.0"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.1"
+ onetime "^5.1.2"
+ signal-exit "^3.0.3"
+ strip-final-newline "^2.0.0"
+
execa@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
@@ -2824,6 +3591,11 @@ expo-build-properties@~0.14.8:
ajv "^8.11.0"
semver "^7.6.0"
+expo-checkbox@~4.1.4:
+ version "4.1.4"
+ resolved "https://registry.yarnpkg.com/expo-checkbox/-/expo-checkbox-4.1.4.tgz#ad5de0d346af26027c939f943d87ac4c68283d00"
+ integrity sha512-sahBTVble5/6EnHgLyGvX6fAytkZ7vmllHUbX5ko1kTQ59qTdiVmCznxqaT5DNWfxRZ0gdQVlao46dGQ3hbmeQ==
+
expo-constants@~17.1.7:
version "17.1.7"
resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-17.1.7.tgz#35194c1cef51f1ea756333418f1e077be79a012b"
@@ -2832,6 +3604,11 @@ expo-constants@~17.1.7:
"@expo/config" "~11.0.12"
"@expo/env" "~1.0.7"
+expo-contacts@~14.2.5:
+ version "14.2.5"
+ resolved "https://registry.yarnpkg.com/expo-contacts/-/expo-contacts-14.2.5.tgz#fe2d933ff425c2c5e3377d53853f4ed7906ef974"
+ integrity sha512-yiVmXrLKBCcBkwsaHFlbs0f7UwE2t7Aa1NBOK4Y06ya0Y5WyE6I/P5ZAtWNjXnKmbV7iNKAiPUzqVaNazhCtWA==
+
expo-dev-client@~5.2.4:
version "5.2.4"
resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-5.2.4.tgz#cdffaea81841b2903cb9585bdd1566dea275a097"
@@ -2882,6 +3659,11 @@ expo-font@~13.3.2:
dependencies:
fontfaceobserver "^2.1.0"
+expo-image@~2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-2.4.0.tgz#02f7fd743387206914cd431a6367f5be53509e3e"
+ integrity sha512-TQ/LvrtJ9JBr+Tf198CAqflxcvdhuj7P24n0LQ1jHaWIVA7Z+zYKbYHnSMPSDMul/y0U46Z5bFLbiZiSidgcNw==
+
expo-json-utils@~0.15.0:
version "0.15.0"
resolved "https://registry.yarnpkg.com/expo-json-utils/-/expo-json-utils-0.15.0.tgz#6723574814b9e6b0a90e4e23662be76123ab6ae9"
@@ -3009,6 +3791,17 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+fast-glob@^3.3.2:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
+ integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.8"
+
fast-json-stable-stringify@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -3019,6 +3812,20 @@ fast-uri@^3.0.1:
resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748"
integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==
+fast-xml-parser@^4.4.1:
+ version "4.5.3"
+ resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb"
+ integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==
+ dependencies:
+ strnum "^1.1.1"
+
+fastq@^1.6.0:
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
+ integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
+ dependencies:
+ reusify "^1.0.4"
+
fb-watchman@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c"
@@ -3026,6 +3833,13 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
+fd-package-json@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/fd-package-json/-/fd-package-json-2.0.0.tgz#03f53ce5a0af552c2f4faf703a24e526310a2411"
+ integrity sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==
+ dependencies:
+ walk-up-path "^4.0.0"
+
fill-range@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
@@ -3131,6 +3945,15 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
+fs-extra@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+ integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+ dependencies:
+ graceful-fs "^4.2.0"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
@@ -3195,6 +4018,11 @@ get-proto@^1.0.1:
dunder-proto "^1.0.1"
es-object-atoms "^1.0.0"
+get-stream@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
+
get-stream@^8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
@@ -3205,6 +4033,13 @@ getenv@^2.0.0:
resolved "https://registry.yarnpkg.com/getenv/-/getenv-2.0.0.tgz#b1698c7b0f29588f4577d06c42c73a5b475c69e0"
integrity sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
glob@^10.3.10, glob@^10.4.2:
version "10.4.5"
resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956"
@@ -3239,11 +4074,23 @@ gopd@^1.2.0:
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
-graceful-fs@^4.2.4, graceful-fs@^4.2.9:
+graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9:
version "4.2.11"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+handlebars@^4.7.7:
+ version "4.7.8"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9"
+ integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==
+ dependencies:
+ minimist "^1.2.5"
+ neo-async "^2.6.2"
+ source-map "^0.6.1"
+ wordwrap "^1.0.0"
+ optionalDependencies:
+ uglify-js "^3.1.4"
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -3316,6 +4163,13 @@ hosted-git-info@^7.0.0:
dependencies:
lru-cache "^10.0.1"
+hosted-git-info@^8.0.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-8.1.0.tgz#153cd84c03c6721481e16a5709eb74b1a0ab2ed0"
+ integrity sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==
+ dependencies:
+ lru-cache "^10.0.1"
+
http-errors@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
@@ -3335,6 +4189,11 @@ https-proxy-agent@^7.0.5:
agent-base "^7.1.2"
debug "4"
+human-signals@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+
human-signals@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
@@ -3362,6 +4221,11 @@ image-size@^1.0.2:
dependencies:
queue "6.0.2"
+immer@^10.0.3:
+ version "10.1.3"
+ resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.3.tgz#e38a0b97db59949d31d9b381b04c2e441b1c3747"
+ integrity sha512-tmjF/k8QDKydUlm3mZU+tjM6zeq9/fFpPqH9SzWmBnVVKsPBg/V66qsMwb3/Bo90cgUN+ghdVBess+hPsxUyRw==
+
import-fresh@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546"
@@ -3370,6 +4234,14 @@ import-fresh@^2.0.0:
caller-path "^2.0.0"
resolve-from "^3.0.0"
+import-fresh@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf"
+ integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -3383,7 +4255,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -3427,6 +4299,16 @@ is-docker@^2.0.0, is-docker@^2.1.1:
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==
+
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
@@ -3444,6 +4326,18 @@ is-fullwidth-code-point@^5.0.0:
dependencies:
get-east-asian-width "^1.0.0"
+is-glob@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-interactive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+ integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@@ -3454,11 +4348,26 @@ is-plain-obj@^2.1.0:
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+is-stream@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
+
is-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-wsl@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==
+
is-wsl@^2.1.1, is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -3600,6 +4509,17 @@ jimp-compact@0.16.1:
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
+joi@^17.2.1:
+ version "17.13.3"
+ resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec"
+ integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==
+ dependencies:
+ "@hapi/hoek" "^9.3.0"
+ "@hapi/topo" "^5.1.0"
+ "@sideway/address" "^4.1.5"
+ "@sideway/formula" "^3.0.1"
+ "@sideway/pinpoint" "^2.0.0"
+
"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -3640,6 +4560,11 @@ json-parse-better-errors@^1.0.1:
resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+ integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
json-schema-traverse@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
@@ -3650,6 +4575,13 @@ json5@^2.2.3:
resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
kleur@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
@@ -3793,7 +4725,7 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
-lodash.debounce@^4.0.8:
+lodash.debounce@4.0.8, lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
@@ -3815,6 +4747,14 @@ log-symbols@^2.2.0:
dependencies:
chalk "^2.0.1"
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
log-update@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4"
@@ -3826,6 +4766,15 @@ log-update@^6.1.0:
strip-ansi "^7.1.0"
wrap-ansi "^9.0.0"
+logkitty@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7"
+ integrity sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==
+ dependencies:
+ ansi-fragments "^0.2.1"
+ dayjs "^1.8.15"
+ yargs "^15.1.0"
+
loose-envify@^1.0.0, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@@ -3833,6 +4782,13 @@ loose-envify@^1.0.0, loose-envify@^1.4.0:
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
+lower-case@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
+ integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
+ dependencies:
+ tslib "^2.0.3"
+
lru-cache@^10.0.1, lru-cache@^10.2.0:
version "10.4.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
@@ -3867,11 +4823,26 @@ mdn-data@2.0.14:
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50"
integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==
+mdn-data@2.0.28:
+ version "2.0.28"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba"
+ integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==
+
+mdn-data@2.0.30:
+ version "2.0.30"
+ resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc"
+ integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==
+
memoize-one@^5.0.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e"
integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==
+meow@^13.0.0:
+ version "13.2.0"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f"
+ integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==
+
merge-options@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7"
@@ -3884,6 +4855,11 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+merge2@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
metro-babel-transformer@0.82.2:
version "0.82.2"
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.82.2.tgz#acb89a300a070b685cadbfdc3aa3f809b52de9fc"
@@ -4107,11 +5083,21 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+mime@^2.4.1:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+ integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
mimic-fn@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
+mimic-fn@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
mimic-fn@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
@@ -4136,7 +5122,7 @@ minimatch@^9.0.0, minimatch@^9.0.4:
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.6:
+minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
@@ -4201,7 +5187,12 @@ mz@^2.7.0:
object-assign "^4.0.1"
thenify-all "^1.0.0"
-nanoid@3.3.8, nanoid@^3.3.7:
+nanoid@^3.3.1, nanoid@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
+ integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
+
+nanoid@^3.3.7:
version "3.3.8"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
@@ -4216,11 +5207,29 @@ negotiator@~0.6.4:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
+neo-async@^2.6.2:
+ version "2.6.2"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
+ integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+
nested-error-stacks@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz#d2cc9fc5235ddb371fc44d506234339c8e4b0a4b"
integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==
+no-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
+ integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
+ dependencies:
+ lower-case "^2.0.2"
+ tslib "^2.0.3"
+
+nocache@^3.0.1:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79"
+ integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==
+
node-forge@^1.2.1, node-forge@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
@@ -4236,6 +5245,20 @@ node-releases@^2.0.19:
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314"
integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==
+node-stream-zip@^1.9.1:
+ version "1.15.0"
+ resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea"
+ integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==
+
+normalize-package-data@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-7.0.1.tgz#84d2971bd8be97b23f0ce06f9e401840be8eaa3e"
+ integrity sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==
+ dependencies:
+ hosted-git-info "^8.0.0"
+ semver "^7.3.5"
+ validate-npm-package-license "^3.0.4"
+
normalize-path@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
@@ -4251,6 +5274,13 @@ npm-package-arg@^11.0.0:
semver "^7.3.5"
validate-npm-package-name "^5.0.0"
+npm-run-path@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
npm-run-path@^5.1.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"
@@ -4301,6 +5331,11 @@ on-headers@~1.0.2:
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f"
integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==
+on-headers@~1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65"
+ integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==
+
once@^1.3.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@@ -4315,6 +5350,13 @@ onetime@^2.0.0:
dependencies:
mimic-fn "^1.0.0"
+onetime@^5.1.0, onetime@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+ dependencies:
+ mimic-fn "^2.1.0"
+
onetime@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
@@ -4329,6 +5371,13 @@ onetime@^7.0.0:
dependencies:
mimic-function "^5.0.0"
+open@^6.2.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
+ integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==
+ dependencies:
+ is-wsl "^1.1.0"
+
open@^7.0.3:
version "7.4.2"
resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321"
@@ -4358,6 +5407,21 @@ ora@^3.4.0:
strip-ansi "^5.2.0"
wcwidth "^1.0.1"
+ora@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+ integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+ dependencies:
+ bl "^4.1.0"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.5.0"
+ is-interactive "^1.0.0"
+ is-unicode-supported "^0.1.0"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -4401,6 +5465,13 @@ package-json-from-dist@^1.0.0:
resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
@@ -4409,6 +5480,16 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
+parse-json@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+ integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
@@ -4429,6 +5510,11 @@ password-prompt@^1.0.4:
ansi-escapes "^4.3.2"
cross-spawn "^7.0.3"
+path-dirname@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==
+
path-exists@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
@@ -4439,7 +5525,7 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
-path-key@^3.1.0:
+path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
@@ -4462,6 +5548,11 @@ path-scurry@^1.11.1:
lru-cache "^10.2.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
picocolors@^1.0.0, picocolors@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
@@ -4530,6 +5621,16 @@ pretty-bytes@^5.6.0:
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb"
integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==
+pretty-format@^26.6.2:
+ version "26.6.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
+ integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
+ dependencies:
+ "@jest/types" "^26.6.2"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^17.0.1"
+
pretty-format@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
@@ -4556,7 +5657,7 @@ promise@^8.3.0:
dependencies:
asap "~2.0.6"
-prompts@^2.3.2:
+prompts@^2.3.2, prompts@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
@@ -4564,7 +5665,7 @@ prompts@^2.3.2:
kleur "^3.0.3"
sisteransi "^1.0.5"
-prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1:
+prop-types@15.8.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.0, prop-types@^15.8.1:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@@ -4607,6 +5708,11 @@ query-string@^7.1.3:
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
queue@6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
@@ -4647,21 +5753,31 @@ react-is@^16.13.1, react-is@^16.7.0:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
-react-is@^18.0.0, react-is@^18.2.0:
+react-is@^17.0.1:
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
+ integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
+
+react-is@^18.0.0:
version "18.3.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
-react-modal-promise@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/react-modal-promise/-/react-modal-promise-1.0.2.tgz#122620b7f19eec73683affadfa77c543d88edc40"
- integrity sha512-dqT618ROhG8qh1+O6EZkia5ELw3zaZWGpMX2YfEH4bgwYENPuFonqKw1W70LFx3K/SCZvVBcD6UYEI12yzYXzg==
+react-is@^19.1.0:
+ version "19.1.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.1.1.tgz#038ebe313cf18e1fd1235d51c87360eb87f7c36a"
+ integrity sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==
react-native-base64@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/react-native-base64/-/react-native-base64-0.2.1.tgz#3d0e73a649c4c0129f7b7695d3912456aebae847"
integrity sha512-eHgt/MA8y5ZF0aHfZ1aTPcIkDWxza9AaEk4GcpIX+ZYfZ04RcaNahO+527KR7J44/mD3efYfM23O2C1N44ByWA==
+react-native-date-picker@5.0.12:
+ version "5.0.12"
+ resolved "https://registry.yarnpkg.com/react-native-date-picker/-/react-native-date-picker-5.0.12.tgz#12540b6a58500811ee7e4fc0244e3accc7cca9c1"
+ integrity sha512-R/mUnCKhcuxbhKPFwYdBQCxQt9HHLqpM4ruRUqlcBjiUZ3N2wdnwOMyc888Ps8qp8e7v29PrDHtUlG8LPuFn9w==
+
react-native-edge-to-edge@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/react-native-edge-to-edge/-/react-native-edge-to-edge-1.6.0.tgz#2ba63b941704a7f713e298185c26cde4d9e4b973"
@@ -4686,7 +5802,7 @@ react-native-is-edge-to-edge@1.1.7, react-native-is-edge-to-edge@^1.1.6:
resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.7.tgz#28947688f9fafd584e73a4f935ea9603bd9b1939"
integrity sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==
-react-native-is-edge-to-edge@^1.1.7:
+react-native-is-edge-to-edge@^1.1.7, react-native-is-edge-to-edge@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz#64e10851abd9d176cbf2b40562f751622bde3358"
integrity sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==
@@ -4699,12 +5815,29 @@ react-native-keyboard-aware-scroll-view@^0.9.5:
prop-types "^15.6.2"
react-native-iphone-x-helper "^1.0.3"
-react-native-logs@^5.1.0:
+react-native-keyboard-controller@^1.18.5:
+ version "1.18.6"
+ resolved "https://registry.yarnpkg.com/react-native-keyboard-controller/-/react-native-keyboard-controller-1.18.6.tgz#ee7449d669bb599c29399d7f5f8cfc72c8528e45"
+ integrity sha512-K/RMw3MdtuykkACFN5d9RTapAcO0v4T34gmSyHkEraU5UsX+fxEHd6j4MvL7KUihvmLLod0NV/mQC0nL4cOurw==
+ dependencies:
+ react-native-is-edge-to-edge "^1.2.1"
+
+react-native-logs@^5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/react-native-logs/-/react-native-logs-5.3.0.tgz#49ad1ec1fd37a5ef90280cc3e27e7233727fc921"
integrity sha512-tq4S0JFy06ggu1D/udYeV80qPy5koURNNcKrVJmv0Hf3x44akysctaE4ARybD5Pv7MnFD8fP1VFhycSLjqXHQw==
-react-native-qrcode-svg@^6.3.1:
+react-native-mask-input@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/react-native-mask-input/-/react-native-mask-input-1.2.3.tgz#c588b145bb48098be54ac6b40ebe7363a302428b"
+ integrity sha512-RWx+gc1EaBslJWR6dsvGdILJ5XvnvZuyEsgJaH9uAMukB3Z9eOlxra1E7Ovck8NSMVcYWpBB/lzojO4LwqqXgA==
+
+react-native-mmkv@^3.3.0:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/react-native-mmkv/-/react-native-mmkv-3.3.1.tgz#854ec786d3951e4bbbaa6161d812c3345d071d85"
+ integrity sha512-LYamDWQirPTUJZ9Re+BkCD+zLRGNr+EVJDeIeblvoJXGatWy9PXnChtajDSLqwjX3EXVeUyjgrembs7wlBw9ug==
+
+react-native-qrcode-svg@^6.3.15:
version "6.3.15"
resolved "https://registry.yarnpkg.com/react-native-qrcode-svg/-/react-native-qrcode-svg-6.3.15.tgz#20d7a189dff5b7ee8a75222a1268a805497cac75"
integrity sha512-vLuNImGfstE8u+rlF4JfFpq65nPhmByuDG6XUPWh8yp8MgLQX11rN5eQ8nb/bf4OB+V8XoLTJB/AZF2g7jQSSQ==
@@ -4745,6 +5878,16 @@ react-native-screens@~4.11.1:
react-native-is-edge-to-edge "^1.1.7"
warn-once "^0.1.0"
+react-native-svg-transformer@^1.5.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/react-native-svg-transformer/-/react-native-svg-transformer-1.5.1.tgz#04467563becbea65b8e576df7e33c9a9a86961e8"
+ integrity sha512-dFvBNR8A9VPum9KCfh+LE49YiJEF8zUSnEFciKQroR/bEOhlPoZA0SuQ0qNk7m2iZl2w59FYjdRe0pMHWMDl0Q==
+ dependencies:
+ "@svgr/core" "^8.1.0"
+ "@svgr/plugin-jsx" "^8.1.0"
+ "@svgr/plugin-svgo" "^8.1.0"
+ path-dirname "^1.0.2"
+
react-native-svg@15.11.2:
version "15.11.2"
resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-15.11.2.tgz#7540e8e1eabc4dcd3b1e35ada5a1d9f1b96d37c4"
@@ -4804,6 +5947,14 @@ react-native@0.79.5:
ws "^6.2.3"
yargs "^17.6.2"
+react-redux@^9.2.0:
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.2.0.tgz#96c3ab23fb9a3af2cb4654be4b51c989e32366f5"
+ integrity sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==
+ dependencies:
+ "@types/use-sync-external-store" "^0.0.6"
+ use-sync-external-store "^1.4.0"
+
react-refresh@^0.14.0, react-refresh@^0.14.2:
version "0.14.2"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9"
@@ -4814,6 +5965,34 @@ react@19.0.0:
resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd"
integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==
+readable-stream@^3.4.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+recyclerlistview@4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/recyclerlistview/-/recyclerlistview-4.2.3.tgz#14032e7ad2f24396e24d5b3060c6ba76b567f000"
+ integrity sha512-STR/wj/FyT8EMsBzzhZ1l2goYirMkIgfV3gYEPxI3Kf3lOnu6f7Dryhyw7/IkQrgX5xtTcDrZMqytvteH9rL3g==
+ dependencies:
+ lodash.debounce "4.0.8"
+ prop-types "15.8.1"
+ ts-object-utils "0.0.5"
+
+redux-thunk@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3"
+ integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==
+
+redux@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b"
+ integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==
+
regenerate-unicode-properties@^10.2.0:
version "10.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0"
@@ -4891,11 +6070,21 @@ requireg@^0.2.2:
rc "~1.2.7"
resolve "~1.7.1"
+reselect@^5.1.0:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e"
+ integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==
+
resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
resolve-from@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
@@ -4935,6 +6124,14 @@ restore-cursor@^2.0.0:
onetime "^2.0.0"
signal-exit "^3.0.2"
+restore-cursor@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+ integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+ dependencies:
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+
restore-cursor@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7"
@@ -4943,6 +6140,11 @@ restore-cursor@^5.0.0:
onetime "^7.0.0"
signal-exit "^4.1.0"
+reusify@^1.0.4:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
+ integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
+
rfdc@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
@@ -4955,7 +6157,14 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-safe-buffer@5.2.1:
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+safe-buffer@5.2.1, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
@@ -4980,6 +6189,11 @@ semver@^7.1.3, semver@^7.3.5, semver@^7.5.4, semver@^7.6.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
+semver@^7.5.2:
+ version "7.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
+ integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
+
send@0.19.0:
version "0.19.0"
resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8"
@@ -5023,7 +6237,7 @@ serialize-error@^2.1.0:
resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
integrity sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==
-serve-static@^1.16.2:
+serve-static@^1.13.1, serve-static@^1.16.2:
version "1.16.2"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296"
integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==
@@ -5060,7 +6274,12 @@ shell-quote@^1.6.1:
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a"
integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==
-signal-exit@^3.0.2, signal-exit@^3.0.7:
+shell-quote@^1.7.3:
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.3.tgz#55e40ef33cf5c689902353a3d8cd1a6725f08b4b"
+ integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==
+
+signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
@@ -5096,6 +6315,15 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+slice-ansi@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
+ integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
+ dependencies:
+ ansi-styles "^3.2.0"
+ astral-regex "^1.0.0"
+ is-fullwidth-code-point "^2.0.0"
+
slice-ansi@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a"
@@ -5117,7 +6345,15 @@ slugify@^1.3.4, slugify@^1.6.6:
resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b"
integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==
-source-map-js@^1.2.1:
+snake-case@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
+ integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
+ dependencies:
+ dot-case "^3.0.4"
+ tslib "^2.0.3"
+
+source-map-js@^1.0.1, source-map-js@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
@@ -5140,6 +6376,32 @@ source-map@^0.6.0, source-map@^0.6.1:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+spdx-correct@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
+ integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
+ dependencies:
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-exceptions@^2.1.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66"
+ integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==
+
+spdx-expression-parse@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.22"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef"
+ integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==
+
split-on-first@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
@@ -5230,6 +6492,13 @@ string-width@^7.0.0:
get-east-asian-width "^1.0.0"
strip-ansi "^7.1.0"
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@@ -5237,7 +6506,7 @@ string-width@^7.0.0:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^5.2.0:
+strip-ansi@^5.0.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
@@ -5258,6 +6527,11 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.0:
dependencies:
ansi-regex "^6.0.1"
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
strip-final-newline@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
@@ -5268,6 +6542,11 @@ strip-json-comments@~2.0.1:
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+strnum@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4"
+ integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==
+
structured-headers@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/structured-headers/-/structured-headers-0.4.1.tgz#77abd9410622c6926261c09b9d16cf10592694d1"
@@ -5299,6 +6578,11 @@ sudo-prompt@^8.2.0:
resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e"
integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==
+sudo-prompt@^9.0.0:
+ version "9.2.1"
+ resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd"
+ integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==
+
supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
@@ -5333,6 +6617,24 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+svg-parser@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5"
+ integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==
+
+svgo@^3.0.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.2.tgz#ad58002652dffbb5986fc9716afe52d869ecbda8"
+ integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==
+ dependencies:
+ "@trysound/sax" "0.2.0"
+ commander "^7.2.0"
+ css-select "^5.1.0"
+ css-tree "^2.3.1"
+ css-what "^6.1.0"
+ csso "^5.0.5"
+ picocolors "^1.0.0"
+
tar@^7.4.3:
version "7.4.3"
resolved "https://registry.yarnpkg.com/tar/-/tar-7.4.3.tgz#88bbe9286a3fcd900e94592cda7a22b192e80571"
@@ -5430,7 +6732,12 @@ ts-interface-checker@^0.1.9:
resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699"
integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==
-tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0:
+ts-object-utils@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/ts-object-utils/-/ts-object-utils-0.0.5.tgz#95361cdecd7e52167cfc5e634c76345e90a26077"
+ integrity sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==
+
+tslib@2.8.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0:
version "2.8.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
@@ -5455,11 +6762,21 @@ typescript@~5.8.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e"
integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==
+uglify-js@^3.1.4:
+ version "3.19.3"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f"
+ integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==
+
undici-types@~6.20.0:
version "6.20.0"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
+undici-types@~6.21.0:
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb"
+ integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==
+
undici@^6.18.2:
version "6.21.1"
resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05"
@@ -5495,6 +6812,11 @@ unique-string@~2.0.0:
dependencies:
crypto-random-string "^2.0.0"
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
@@ -5515,15 +6837,20 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
-use-latest-callback@^0.2.1:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.2.3.tgz#2d644d3063040b9bc2d4c55bb525a13ae3de9e16"
- integrity sha512-7vI3fBuyRcP91pazVboc4qu+6ZqM8izPWX9k7cRnT8hbD5svslcknsh3S9BUhaK11OmgTV4oWZZVSeQAiV53SQ==
+use-latest-callback@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.2.4.tgz#35c0f028f85a3f4cf025b06011110e87cc18f57e"
+ integrity sha512-LS2s2n1usUUnDq4oVh1ca6JFX9uSqUncTfAm44WMg0v6TxL7POUTk1B044NH8TeLkFbNajIsgDHcgNpNzZucdg==
-use-sync-external-store@^1.2.2:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc"
- integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==
+use-sync-external-store@^1.4.0, use-sync-external-store@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0"
+ integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==
+
+util-deprecate@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
utils-merge@1.0.1:
version "1.0.1"
@@ -5535,6 +6862,14 @@ uuid@^7.0.3:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.3.tgz#c5c9f2c8cf25dc0a372c4df1441c41f5bd0c680b"
integrity sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==
+validate-npm-package-license@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
+ dependencies:
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
+
validate-npm-package-name@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8"
@@ -5550,6 +6885,11 @@ vlq@^1.0.0:
resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468"
integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==
+walk-up-path@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-4.0.0.tgz#590666dcf8146e2d72318164f1f2ac6ef51d4198"
+ integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==
+
walker@^1.0.7, walker@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f"
@@ -5605,6 +6945,11 @@ wonka@^6.3.2:
resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594"
integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==
+wordwrap@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==
+
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
@@ -5726,6 +7071,11 @@ yallist@^5.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
+yaml@^2.2.1:
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79"
+ integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==
+
yaml@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98"
@@ -5749,7 +7099,7 @@ yargs-parser@^21.1.1:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
-yargs@^15.3.1:
+yargs@^15.1.0, yargs@^15.3.1:
version "15.4.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==