diff --git a/.eslintrc.json b/.eslintrc.json
index b79c18c..30f5a54 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -80,6 +80,7 @@
"react/style-prop-object": "off",
"@typescript-eslint/no-empty-function": "off",
"no-use-before-define": "off",
+ "@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/no-use-before-define": [
"error"
],
diff --git a/README.md b/README.md
index be70c78..852dbb3 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@
![size](https://img.shields.io/github/repo-size/victorbalssa/abacus?style=for-the-badge)
![licence](https://img.shields.io/github/license/victorbalssa/abacus?style=for-the-badge)
![stars](https://img.shields.io/github/stars/victorbalssa/abacus?style=for-the-badge)
-[![sdk](https://img.shields.io/badge/SDK-50.0.7-purple?style=for-the-badge&label=EXPO%20SDK)](https://www.npmjs.com/package/expo)
+[![sdk](https://img.shields.io/badge/EXPO-SDK-purple?style=for-the-badge&label=EXPO%20SDK)](https://www.npmjs.com/package/expo)
[![pr](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge)](http://makeapullrequest.com)
[![sponsor](https://img.shields.io/github/sponsors/victorbalssa?style=for-the-badge&color=ff69b4)](https://github.com/sponsors/victorbalssa)
@@ -64,7 +64,7 @@ No external API calls nor Analytics API, not even sentry / crashlytics.
### 📡 Technologies
-- __Expo SDK 50__ Framework and a Platform for universal React applications. [docs.expo.io](https://docs.expo.io/)
+- __Expo SDK__ Framework and a Platform for universal React applications. [docs.expo.io](https://docs.expo.io/)
- __Routing and navigation__ React Navigation
V6. [https://reactnavigation.org/docs](https://reactnavigation.org/docs/getting-started)
- __Tests__ on simulator/emulator before each EAS build with [@wix/Detox](https://github.com/wix/Detox)
diff --git a/app.config.js b/app.config.js
new file mode 100644
index 0000000..22ce8ac
--- /dev/null
+++ b/app.config.js
@@ -0,0 +1,87 @@
+const IS_DEV = process.env.APP_VARIANT === 'development';
+
+export default {
+ name: IS_DEV ? 'Abacus.dev' : 'Abacus',
+ description: 'Abacus: Firefly III mobile application.',
+ slug: 'abacus',
+ privacy: 'public',
+ platforms: [
+ 'ios',
+ 'android',
+ ],
+ version: '0.13.2',
+ orientation: 'portrait',
+ updates: {
+ enabled: true,
+ checkAutomatically: 'ON_ERROR_RECOVERY',
+ url: 'https://u.expo.dev/292ed6dc-804c-4444-95f5-fa5d76d9913b',
+ },
+ ios: {
+ icon: './src/images/icon-abacus.png',
+ splash: {
+ image: './src/images/splash.png',
+ resizeMode: 'contain',
+ backgroundColor: '#ffffff',
+ dark: {
+ backgroundColor: '#121215',
+ },
+ },
+ supportsTablet: true,
+ infoPlist: {
+ NSFaceIDUsageDescription: 'Abacus use Authentication with TouchId or FaceID',
+ NSLocalNetworkUsageDescription: 'Abacus use Local Network to access Firefly III on your local network',
+ NSAppTransportSecurity: {
+ NSAllowsArbitraryLoads: true,
+ },
+ },
+ config: {
+ usesNonExemptEncryption: false,
+ },
+ bundleIdentifier: IS_DEV ? 'abacus.fireflyiii.ios.app.dev' : 'abacus.ios.app',
+ buildNumber: '0.13.2',
+ },
+ android: {
+ icon: './src/images/icon-abacus.png',
+ adaptiveIcon: {
+ foregroundImage: './src/images/icon-abacus-foreground.png',
+ backgroundImage: './src/images/icon-abacus-background.png',
+ },
+ splash: {
+ image: './src/images/splash.png',
+ resizeMode: 'contain',
+ backgroundColor: '#ffffff',
+ dark: {
+ backgroundColor: '#121215',
+ },
+ },
+ playStoreUrl: 'https://play.google.com/store/apps/details?id=abacus.fireflyiii.android.app',
+ package: IS_DEV ? 'abacus.fireflyiii.android.app.dev' : 'abacus.fireflyiii.android.app',
+ versionCode: 21,
+ },
+ scheme: 'abacusfiiiapp',
+ githubUrl: 'https://github.com/victorbalssa/abacus',
+ runtimeVersion: {
+ policy: 'sdkVersion',
+ },
+ extra: {
+ eas: {
+ projectId: '292ed6dc-804c-4444-95f5-fa5d76d9913b',
+ },
+ },
+ plugins: [
+ 'expo-localization',
+ './plugins/withAndroidStyles',
+ './plugins/withAndroidManifest',
+ [
+ 'expo-font',
+ {
+ fonts: [
+ './src/fonts/Montserrat-Bold.ttf',
+ './src/fonts/Montserrat-Regular.ttf',
+ './src/fonts/Montserrat-Light.ttf',
+ ],
+ },
+ ],
+ ],
+ userInterfaceStyle: 'automatic',
+};
diff --git a/app.json b/app.json
deleted file mode 100644
index a7d141c..0000000
--- a/app.json
+++ /dev/null
@@ -1,77 +0,0 @@
-{
- "expo": {
- "name": "Abacus",
- "description": "Abacus: Firefly III mobile application.",
- "slug": "abacus",
- "privacy": "public",
- "platforms": [
- "ios",
- "android"
- ],
- "version": "0.12.4",
- "orientation": "portrait",
- "updates": {
- "enabled": true,
- "checkAutomatically": "ON_ERROR_RECOVERY",
- "url": "https://u.expo.dev/292ed6dc-804c-4444-95f5-fa5d76d9913b"
- },
- "ios": {
- "icon": "./src/images/icon-abacus.png",
- "splash": {
- "image": "./src/images/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff",
- "dark": {
- "backgroundColor": "#121215"
- }
- },
- "supportsTablet": true,
- "infoPlist": {
- "NSFaceIDUsageDescription": "Abacus use Authentication with TouchId or FaceID",
- "NSLocalNetworkUsageDescription": "Abacus use Local Network to connect to your local instance of Firefly III"
- },
- "config": {
- "usesNonExemptEncryption": false
- },
- "bundleIdentifier": "abacus.ios.app",
- "buildNumber": "0.12.4"
- },
- "android": {
- "icon": "./src/images/icon-abacus.png",
- "adaptiveIcon": {
- "foregroundImage": "./src/images/icon-abacus-foreground.png",
- "backgroundImage": "./src/images/icon-abacus-background.png"
- },
- "splash": {
- "image": "./src/images/splash.png",
- "resizeMode": "contain",
- "backgroundColor": "#ffffff",
- "dark": {
- "backgroundColor": "#121215"
- }
- },
- "playStoreUrl": "https://play.google.com/store/apps/details?id=abacus.fireflyiii.android.app",
- "package": "abacus.fireflyiii.android.app",
- "versionCode": 18
- },
- "web": {
- "bundler": "metro"
- },
- "scheme": "abacusfiiiapp",
- "githubUrl": "https://github.com/victorbalssa/abacus",
- "runtimeVersion": {
- "policy": "sdkVersion"
- },
- "extra": {
- "eas": {
- "projectId": "292ed6dc-804c-4444-95f5-fa5d76d9913b"
- }
- },
- "plugins": [
- "expo-localization",
- "./plugins/withAndroidManifest",
- "expo-build-properties"
- ],
- "userInterfaceStyle": "automatic"
- }
-}
diff --git a/package-lock.json b/package-lock.json
index e2c44f4..b2d8e90 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,36 +1,37 @@
{
"name": "abacus",
- "version": "0.12.4",
+ "version": "0.13.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "abacus",
- "version": "0.12.4",
+ "version": "0.13.2",
"dependencies": {
"@expo/config-plugins": "~7.8.0",
"@expo/metro-runtime": "~3.1.3",
"@expo/vector-icons": "^14.0.0",
"@react-native-async-storage/async-storage": "1.21.0",
"@react-native-community/datetimepicker": "7.6.1",
- "@react-navigation/bottom-tabs": "^6.2.0",
- "@react-navigation/native": "^6.0.8",
- "@react-navigation/native-stack": "^6.9.13",
+ "@react-navigation/bottom-tabs": "6.5.14",
+ "@react-navigation/native": "6.1.12",
+ "@react-navigation/native-stack": "6.9.20",
"@rematch/core": "^2.2.0",
"@rematch/loading": "^2.1.2",
"@rematch/persist": "^2.1.2",
- "axios": "^1.6.0",
+ "@shopify/react-native-skia": "0.1.221",
+ "axios": "1.6.7",
"babel-polyfill": "^6.26.0",
+ "base-64": "^1.0.0",
"bootstrap": "^4.4.1",
- "expo": "~50.0.7",
+ "expo": "~50.0.11",
"expo-application": "~5.8.3",
"expo-asset": "~9.0.2",
"expo-auth-session": "~5.4.0",
"expo-blur": "~12.9.2",
- "expo-build-properties": "~0.11.1",
"expo-clipboard": "~5.0.1",
"expo-crypto": "~12.8.1",
- "expo-dev-client": "~3.3.8",
+ "expo-dev-client": "~3.3.9",
"expo-device": "~5.9.3",
"expo-font": "~11.10.2",
"expo-haptics": "~12.8.1",
@@ -40,41 +41,32 @@
"expo-localization": "~14.8.3",
"expo-random": "~13.6.0",
"expo-secure-store": "~12.8.1",
- "expo-splash-screen": "~0.26.4",
"expo-status-bar": "~1.11.1",
"expo-store-review": "~6.8.3",
"expo-system-ui": "~2.9.3",
"expo-updates": "~0.24.11",
- "expo-web-browser": "~12.8.2",
"globally": "^0.0.0",
"i18n-js": "^4.1.1",
"lodash": "^4.17.21",
"moment": "^2.29.4",
- "native-base": "^3.4.25",
- "normalize-css-color": "^1.0.2",
- "prop-types": "^15.7.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-helmet": "^5.2.1",
"react-native": "0.73.4",
- "react-native-animated-splash-screen": "^2.0.5",
"react-native-gesture-handler": "~2.14.0",
- "react-native-gradle-plugin": "^0.71.19",
- "react-native-modal": "^11.5.6",
"react-native-pager-view": "6.2.3",
"react-native-reanimated": "~3.6.2",
"react-native-safe-area-context": "4.8.2",
"react-native-screens": "~3.29.0",
"react-native-svg": "14.1.0",
"react-native-swipe-list-view": "^3.2.9",
- "react-native-web": "~0.19.7",
- "react-redux": "^9.0.4",
- "redux": "5.0.0",
- "redux-persist": "^6.0.0",
+ "react-redux": "9.1.0",
+ "redux": "5.0.1",
+ "redux-persist": "6.0.0",
"semver": "^7.5.4",
"sharp-cli": "^4.2.0",
"slash": "^5.1.0",
- "victory-native": "^36.6.11"
+ "victory-native": "^36.9.1"
},
"devDependencies": {
"@babel/core": "^7.23.2",
@@ -85,7 +77,7 @@
"@typescript-eslint/eslint-plugin": "^5.30.0",
"@typescript-eslint/parser": "^5.62.0",
"babel-preset-expo": "^10.0.0",
- "detox": "20.13.5",
+ "detox": "20.18.1",
"dotenv": "^16.3.1",
"eslint": "^7.32.0",
"eslint-config-airbnb": "^19.0.4",
@@ -93,11 +85,11 @@
"eslint-plugin-jest": "^27.2.3",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.33.1",
- "jest-expo": "~50.0.2",
- "node-sass": "^9.0.0",
- "ts-jest": "^29.1.1",
- "ts-node": "^10.9.1",
- "typescript": "^5.3.0"
+ "jest-expo": "~50.0.3",
+ "node-sass": "9.0.0",
+ "ts-jest": "29.1.2",
+ "ts-node": "10.9.1",
+ "typescript": "5.3.3"
}
},
"node_modules/@ampproject/remapping": {
@@ -2374,16 +2366,16 @@
}
},
"node_modules/@expo/cli": {
- "version": "0.17.5",
- "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.5.tgz",
- "integrity": "sha512-9cMquL/5bBfV73CbZcWipk3KZSo8mBqdgvkoWCtEtnnlm/879ayxzMWjVIgT5yV4w+X7+N6KkBSUIIj4t9Xqew==",
+ "version": "0.17.7",
+ "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.17.7.tgz",
+ "integrity": "sha512-sOssVCFCVXSdZr2/KdqPeT2Qwxmty3rZeO9g5RbzZexHz93VUyONuqGwO1VlYKibn7FLYEGUovqU9Xi8zVB6JQ==",
"dependencies": {
"@babel/runtime": "^7.20.0",
"@expo/code-signing-certificates": "0.0.5",
"@expo/config": "~8.5.0",
"@expo/config-plugins": "~7.8.0",
"@expo/devcert": "^1.0.0",
- "@expo/env": "~0.2.0",
+ "@expo/env": "~0.2.2",
"@expo/image-utils": "^0.4.0",
"@expo/json-file": "^8.2.37",
"@expo/metro-config": "~0.17.0",
@@ -2811,9 +2803,9 @@
}
},
"node_modules/@expo/env": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.1.tgz",
- "integrity": "sha512-deZmRS7Dvp18VM8s559dq/ZjPlV1D9vtLoLXwHmCK/JYOvtNptdKsfxcWjI7ewmo6ln2PqgNI9HRI74q6Wk2eA==",
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.2.2.tgz",
+ "integrity": "sha512-m9nGuaSpzdvMzevQ1H60FWgf4PG5s4J0dfKUzdAGnDu7sMUerY/yUeDaA4+OBo3vBwGVQ+UHcQS9vPSMBNaPcg==",
"dependencies": {
"chalk": "^4.0.0",
"debug": "^4.3.4",
@@ -3156,16 +3148,16 @@
}
},
"node_modules/@expo/metro-config": {
- "version": "0.17.4",
- "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.4.tgz",
- "integrity": "sha512-PxqDMuVjXQeboa6Aj8kNj4iTxIpwpfoYlF803qOjf1LE1ePlREnWNwqy65ESCBnCmekYIO5hhm1Nksa+xCvuyg==",
+ "version": "0.17.6",
+ "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.17.6.tgz",
+ "integrity": "sha512-WaC1C+sLX/Wa7irwUigLhng3ckmXIEQefZczB8DfYmleV6uhfWWo2kz/HijFBpV7FKs2cW6u8J/aBQpFkxlcqg==",
"dependencies": {
"@babel/core": "^7.20.0",
"@babel/generator": "^7.20.5",
"@babel/parser": "^7.20.0",
"@babel/types": "^7.20.0",
"@expo/config": "~8.5.0",
- "@expo/env": "~0.2.0",
+ "@expo/env": "~0.2.2",
"@expo/json-file": "~8.3.0",
"@expo/spawn-async": "^1.7.2",
"babel-preset-fbjs": "^3.4.0",
@@ -3692,49 +3684,11 @@
"node": ">=8"
}
},
- "node_modules/@formatjs/ecma402-abstract": {
- "version": "1.16.0",
- "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.16.0.tgz",
- "integrity": "sha512-qIH2cmG/oHGrVdApbqDf6/YR+B2A4NdkBjKLeq369OMVkqMFsC5oPSP1xpiyL1cAn+PbNEZHxwOVMYD/C76c6g==",
- "dependencies": {
- "@formatjs/intl-localematcher": "0.3.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@formatjs/fast-memoize": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.1.0.tgz",
- "integrity": "sha512-w7IzF6Okx2tQXRVlT/cXI4dfS0bvKHhWE5Kn7ajqDVYH4nksUFOMU21Yd4zDENxZ8mFb7IBu7bOopnB2VxZQeA==",
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@formatjs/icu-messageformat-parser": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.5.0.tgz",
- "integrity": "sha512-8AwKRkVIZzVlvZwio1TcLVvUbJw0up1joa8//JIxKVeflqKiZwfzCGAelZt/4hHCEQf9NECose//nODnmBEkNQ==",
- "dependencies": {
- "@formatjs/ecma402-abstract": "1.16.0",
- "@formatjs/icu-skeleton-parser": "1.5.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@formatjs/icu-skeleton-parser": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.5.0.tgz",
- "integrity": "sha512-R/wOg/hxh3JWNB4LHYfNtIe8PC39mkzplh6gtrqCY33EqYeUFEGOYTWJrkXNcoRXlZWQtfrH6REch5r57tAyMQ==",
- "dependencies": {
- "@formatjs/ecma402-abstract": "1.16.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@formatjs/intl-localematcher": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.3.0.tgz",
- "integrity": "sha512-NFoxXX3dtZ6B53NlCErq181NxN/noMZOWKHfcEPQRNfV0a19THxyjxu2RTSNS3532wGm6fOdid5qsBQWg0Rhtw==",
- "dependencies": {
- "tslib": "^2.4.0"
- }
+ "node_modules/@flatten-js/interval-tree": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@flatten-js/interval-tree/-/interval-tree-1.1.2.tgz",
+ "integrity": "sha512-OwLoV9E/XM6b7bes2rSFnGNjyRy7vcoIHFTnmBR2WAaZTf0Fe4EX4GdA65vU1KgFAasti7iRSg2dZfYd1Zt00Q==",
+ "dev": true
},
"node_modules/@gar/promisify": {
"version": "1.1.3",
@@ -3782,39 +3736,6 @@
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
"dev": true
},
- "node_modules/@internationalized/date": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.2.0.tgz",
- "integrity": "sha512-VDMHN1m33L4eqPs5BaihzgQJXyaORbMoHOtrapFxx179J8ucY5CRIHYsq5RRLKPHZWgjNfa5v6amWWDkkMFywA==",
- "dependencies": {
- "@swc/helpers": "^0.4.14"
- }
- },
- "node_modules/@internationalized/message": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@internationalized/message/-/message-3.1.0.tgz",
- "integrity": "sha512-Oo5m70FcBdADf7G8NkUffVSfuCdeAYVfsvNjZDi9ELpjvkc4YNJVTHt/NyTI9K7FgAVoELxiP9YmN0sJ+HNHYQ==",
- "dependencies": {
- "@swc/helpers": "^0.4.14",
- "intl-messageformat": "^10.1.0"
- }
- },
- "node_modules/@internationalized/number": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.2.0.tgz",
- "integrity": "sha512-GUXkhXSX1Ee2RURnzl+47uvbOxnlMnvP9Er+QePTjDjOPWuunmLKlEkYkEcLiiJp7y4l9QxGDLOlVr8m69LS5w==",
- "dependencies": {
- "@swc/helpers": "^0.4.14"
- }
- },
- "node_modules/@internationalized/string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.1.0.tgz",
- "integrity": "sha512-TJQKiyUb+wyAfKF59UNeZ/kELMnkxyecnyPCnBI1ma4NaXReJW+7Cc2mObXAqraIBJUVv7rgI46RLKrLgi35ng==",
- "dependencies": {
- "@swc/helpers": "^0.4.14"
- }
- },
"node_modules/@isaacs/ttlcache": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz",
@@ -4759,570 +4680,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/@react-aria/checkbox": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-aria/checkbox/-/checkbox-3.9.1.tgz",
- "integrity": "sha512-1TmaqrQ419K6p9KU9v5cGHjStH4p9vOGZsfYYO8RXsQsXmZ7vcK7rjytMeCTdExovU74xK9oXNh64c15Yh9EEA==",
- "dependencies": {
- "@react-aria/label": "^3.5.2",
- "@react-aria/toggle": "^3.6.1",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/checkbox": "^3.4.2",
- "@react-stately/toggle": "^3.5.2",
- "@react-types/checkbox": "^3.4.4",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/combobox": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-aria/combobox/-/combobox-3.6.1.tgz",
- "integrity": "sha512-FdIFAV9appfN5DfoZoJ1D+ZJS3Xp5Kro1oPUPnz9XgthwYV98JinQ5aMBKI4+df0mLmU5z1T3DWbqUuDheUCwg==",
- "dependencies": {
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/listbox": "^3.9.1",
- "@react-aria/live-announcer": "^3.3.0",
- "@react-aria/menu": "^3.9.1",
- "@react-aria/overlays": "^3.14.1",
- "@react-aria/selection": "^3.15.0",
- "@react-aria/textfield": "^3.9.2",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/collections": "^3.8.0",
- "@react-stately/combobox": "^3.5.1",
- "@react-stately/layout": "^3.12.1",
- "@react-types/button": "^3.7.3",
- "@react-types/combobox": "^3.6.2",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/focus": {
- "version": "3.12.1",
- "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.12.1.tgz",
- "integrity": "sha512-i1bRz27mRFnrDpYpRvm/6Zm+FbGo0WygNQiLVgTce7WY+39oLERIGRrE8Ovy6rY9Hr4MGBAXz2Q+o9oTOgeBgA==",
- "dependencies": {
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/utils": "^3.17.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14",
- "clsx": "^1.1.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/i18n": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.7.2.tgz",
- "integrity": "sha512-GsVioW8RGOmwebTruEBAmGYJunY0WS7Ljfn5n7Mec3eoMKdQjH2M70fHwCOWqJo8Ufq7A7p0ypBVCv4d4sbSdw==",
- "dependencies": {
- "@internationalized/date": "^3.2.0",
- "@internationalized/message": "^3.1.0",
- "@internationalized/number": "^3.2.0",
- "@internationalized/string": "^3.1.0",
- "@react-aria/ssr": "^3.6.0",
- "@react-aria/utils": "^3.17.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/interactions": {
- "version": "3.15.1",
- "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.15.1.tgz",
- "integrity": "sha512-khtpxSvos885rxMep6DRe8RGZjtD16ZuLxhFBtL1dXqSv5XZxaXKOmI8Yx1F8AkVIPdB72MmjG8dz3PpM3PPYg==",
- "dependencies": {
- "@react-aria/ssr": "^3.6.0",
- "@react-aria/utils": "^3.17.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/label": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-aria/label/-/label-3.5.2.tgz",
- "integrity": "sha512-YtLJl3l11TKzGhSMuUqp1DdQ6s3hbT1buiC+jPPKv81PcjjoUDpj+hAVnc1cigtvrEFSMpi2Z+KYREmYYj4GDQ==",
- "dependencies": {
- "@react-aria/utils": "^3.17.0",
- "@react-types/label": "^3.7.4",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/listbox": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.9.1.tgz",
- "integrity": "sha512-tRcqNHGx9Vtspth9zdOLEfbGGaLrTN/rDXg0xN2FT++qxwALuYV7R4qFUX7eTPCT+NDOqeQNOCsHyQF4gQN+JQ==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/label": "^3.5.2",
- "@react-aria/selection": "^3.15.0",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/collections": "^3.8.0",
- "@react-stately/list": "^3.8.1",
- "@react-types/listbox": "^3.4.2",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/live-announcer": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@react-aria/live-announcer/-/live-announcer-3.3.0.tgz",
- "integrity": "sha512-6diTS6mIf70KdxfGqiDxHV+9Qv8a9A88EqBllzXGF6HWPdcwde/GIEmfpTwj8g1ImNGZYUwDkv4Hd9lFj0MXEg==",
- "dependencies": {
- "@swc/helpers": "^0.4.14"
- }
- },
- "node_modules/@react-aria/menu": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-aria/menu/-/menu-3.9.1.tgz",
- "integrity": "sha512-LRSo7KyVxoFxrjj55VtxMKJ6/c3LhfZThytWFvA9r02Ukf1B0xn/Or8rgyVyHcyekvcmT4IDrjFl1tDG2wsq4g==",
- "dependencies": {
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/overlays": "^3.14.1",
- "@react-aria/selection": "^3.15.0",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/collections": "^3.8.0",
- "@react-stately/menu": "^3.5.2",
- "@react-stately/tree": "^3.6.1",
- "@react-types/button": "^3.7.3",
- "@react-types/menu": "^3.9.1",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/overlays": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.14.1.tgz",
- "integrity": "sha512-xJCw0oSDtwBCCqf0EMMeeLYOEFSCdd1cWFS0O3980SObFQPHwP5KOX5SAs7lVvIlZUvEdpo6sOytcQTjv5U9QA==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/ssr": "^3.6.0",
- "@react-aria/utils": "^3.17.0",
- "@react-aria/visually-hidden": "^3.8.1",
- "@react-stately/overlays": "^3.5.2",
- "@react-types/button": "^3.7.3",
- "@react-types/overlays": "^3.7.2",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/radio": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-aria/radio/-/radio-3.6.1.tgz",
- "integrity": "sha512-paO2sCxvH8I0Iomzgmvw1TCvzd+0AcUylPSr34dhPmJIsRew7UVtmON9YU8tM/KELDv346n2v8KqzlgHJlLLvg==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/label": "^3.5.2",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/radio": "^3.8.1",
- "@react-types/radio": "^3.4.2",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/selection": {
- "version": "3.15.0",
- "resolved": "https://registry.npmjs.org/@react-aria/selection/-/selection-3.15.0.tgz",
- "integrity": "sha512-v3AXsau6BobbM5Fu7X+HhX5K/Ey3drVBaoevGDiYX8kGS9jlFNDXENKYPtnMpcTCvSX0yuxTITukOEBokzkb6Q==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/collections": "^3.8.0",
- "@react-stately/selection": "^3.13.1",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/slider": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/@react-aria/slider/-/slider-3.4.1.tgz",
- "integrity": "sha512-gJTfwZGGGv0dPUO3rC8HCyOXnAgMagJZnV3gIILfzNWZHZLYbLze+IbTSNtNKGIvt4pAKTV0njLDLlxFZlAadw==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/label": "^3.5.2",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/radio": "^3.8.1",
- "@react-stately/slider": "^3.3.2",
- "@react-types/radio": "^3.4.2",
- "@react-types/shared": "^3.18.1",
- "@react-types/slider": "^3.5.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/ssr": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.6.0.tgz",
- "integrity": "sha512-OFiYQdv+Yk7AO7IsQu/fAEPijbeTwrrEYvdNoJ3sblBBedD5j5fBTNWrUPNVlwC4XWWnWTCMaRIVsJujsFiWXg==",
- "dependencies": {
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/textfield": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@react-aria/textfield/-/textfield-3.9.2.tgz",
- "integrity": "sha512-wT68tErfMcBvJHyb+5skfs1OHZ8lESzIbrwCTuipM85BeleYIu25qGbKfOX9wMbC+4X775gg/JfmUQESJ6nD1A==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/label": "^3.5.2",
- "@react-aria/utils": "^3.17.0",
- "@react-types/shared": "^3.18.1",
- "@react-types/textfield": "^3.7.2",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/toggle": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-aria/toggle/-/toggle-3.6.1.tgz",
- "integrity": "sha512-4ml3HMjaZPUtRVb6MuuxuV8P/ydzrpldfP0R1hv3f56lo5gBVMh7ME72z49Z8Jf9hnxPkDBvnNi0AnfITtvfVw==",
- "dependencies": {
- "@react-aria/focus": "^3.12.1",
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/toggle": "^3.5.2",
- "@react-types/checkbox": "^3.4.4",
- "@react-types/shared": "^3.18.1",
- "@react-types/switch": "^3.3.2",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/utils": {
- "version": "3.17.0",
- "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.17.0.tgz",
- "integrity": "sha512-NEul0cQ6tQPdNSHYzNYD+EfFabeYNvDwEiHB82kK/Tsfhfm84SM+baben/at2N51K7iRrJPr5hC5fi4+P88lNg==",
- "dependencies": {
- "@react-aria/ssr": "^3.6.0",
- "@react-stately/utils": "^3.6.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14",
- "clsx": "^1.1.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-aria/visually-hidden": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.8.1.tgz",
- "integrity": "sha512-aojoZXw5iaFDOgqmGuCyaTG9PFqfav5ABXX/W/0Q2YNj6Tb3i6++m2+8RMHlz2b6Dj+rXLiTxa00t7BSgJbUvA==",
- "dependencies": {
- "@react-aria/interactions": "^3.15.1",
- "@react-aria/utils": "^3.17.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14",
- "clsx": "^1.1.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-native-aria/button": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/@react-native-aria/button/-/button-0.2.4.tgz",
- "integrity": "sha512-wlu6SXI20U+N4fbPX8oh9pkL9hx8W41+cra3fa3s2xfQ6czT4KAkyvSsr1ALUBH4dRkoxxSPOcGJMGnq2K3djw==",
- "dependencies": {
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/interactions": "^0.2.3",
- "@react-stately/toggle": "^3.2.1",
- "@react-types/checkbox": "^3.2.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/checkbox": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@react-native-aria/checkbox/-/checkbox-0.2.3.tgz",
- "integrity": "sha512-YtWtXGg5tvOaV6v1CmbusXoOZvGRAVYygms9qNeUF7/B8/iDNGSKjlxHE5LVOLRtJO/B9ndZnr6RkL326ceyng==",
- "dependencies": {
- "@react-aria/checkbox": "^3.2.1",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/toggle": "^0.2.3",
- "@react-native-aria/utils": "^0.2.6",
- "@react-stately/toggle": "^3.2.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/combobox": {
- "version": "0.2.4-alpha.1",
- "resolved": "https://registry.npmjs.org/@react-native-aria/combobox/-/combobox-0.2.4-alpha.1.tgz",
- "integrity": "sha512-MOxKMKVus9MsOL3l+mNRDYHeVr5kj5fYnretLofWh/dHBO2W5H7H70ZfOPDEr9s+vgaBBjHCtbbfOiimKRk6Kg==",
- "dependencies": {
- "@react-aria/combobox": "^3.0.0-alpha.1",
- "@react-aria/live-announcer": "^3.0.0-alpha.0",
- "@react-aria/overlays": "^3.6.1",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/utils": "^0.2.6",
- "@react-types/button": "^3.3.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/focus": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/@react-native-aria/focus/-/focus-0.2.7.tgz",
- "integrity": "sha512-7Ol8AoTzEN7qC4t4AzclPzjQZ0oRkNBePmVBm2lAQwOnmkKwa+TdiVGtU7MgvsQxUV3aTTMY2Nu1Z5YwCwhUkA==",
- "dependencies": {
- "@react-aria/focus": "^3.2.3"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/interactions": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@react-native-aria/interactions/-/interactions-0.2.8.tgz",
- "integrity": "sha512-+LsLghBnp1fEVdLdIZGfE2izbZS0GPwc7eyiLHndnAXwXdLmyDRw71UCEjsUuNh7SO7BBR5QjHlk0cTHmyynQg==",
- "dependencies": {
- "@react-aria/interactions": "^3.3.2",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/utils": "^0.2.6"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/listbox": {
- "version": "0.2.4-alpha.3",
- "resolved": "https://registry.npmjs.org/@react-native-aria/listbox/-/listbox-0.2.4-alpha.3.tgz",
- "integrity": "sha512-e/y+Wdoyy/PbpFj4DVYDYMsKI+uUqnZ/0yLByqHQvzs8Ys8o69CQkyEYzHhxvFT5lCLegkLbuQN2cJd8bYNQsA==",
- "dependencies": {
- "@react-aria/interactions": "^3.3.2",
- "@react-aria/label": "^3.1.1",
- "@react-aria/listbox": "^3.2.4",
- "@react-aria/selection": "^3.3.2",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/interactions": "^0.2.2",
- "@react-native-aria/utils": "^0.2.6",
- "@react-types/listbox": "^3.1.1",
- "@react-types/shared": "^3.4.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/overlays": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/@react-native-aria/overlays/-/overlays-0.3.6.tgz",
- "integrity": "sha512-+mgmScrVezZrOzeEfmxykIy+lHrmbiLou+mv04BtFzM0rfFhOYoQlmxHC7vdLKgsVKw+i6bd5EM9X0rUynLNTA==",
- "dependencies": {
- "@react-aria/interactions": "^3.3.2",
- "@react-aria/overlays": "^3.7.0",
- "@react-native-aria/utils": "^0.2.8",
- "@react-stately/overlays": "^3.1.1",
- "@react-types/overlays": "^3.4.0",
- "dom-helpers": "^5.0.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-dom": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/radio": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/@react-native-aria/radio/-/radio-0.2.5.tgz",
- "integrity": "sha512-kTfCjRMZH+Z2C70VxjomPO8eXBcHPa5zcuOUotyhR10WsrKZJlwwnA75t2xDq8zsxKnABJRfThv7rSlAjkFSeg==",
- "dependencies": {
- "@react-aria/radio": "^3.1.2",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/interactions": "^0.2.3",
- "@react-native-aria/utils": "^0.2.6",
- "@react-stately/radio": "^3.2.1",
- "@react-types/radio": "^3.1.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/slider": {
- "version": "0.2.5-alpha.2",
- "resolved": "https://registry.npmjs.org/@react-native-aria/slider/-/slider-0.2.5-alpha.2.tgz",
- "integrity": "sha512-eYCAGEgcmgs2x5yC1q3edq/VpZWd8P9x1ZoB6uhiyIpDViTDFTz82IWTK0jrbHC70WxWfoY+876VjiKzbjyNxw==",
- "dependencies": {
- "@react-aria/focus": "^3.2.3",
- "@react-aria/interactions": "^3.3.2",
- "@react-aria/label": "^3.1.1",
- "@react-aria/slider": "^3.0.1",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/utils": "^0.2.6",
- "@react-stately/slider": "^3.0.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/tabs": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@react-native-aria/tabs/-/tabs-0.2.8.tgz",
- "integrity": "sha512-coAiaj9NFFh8vYr/kiugqLwip8IhB6m2dL/GXPcmbK0WH531pIPXKSwgePjniETJtEP84L4PYCTZ705pRlVN8A==",
- "dependencies": {
- "@react-aria/selection": "^3.3.1",
- "@react-aria/tabs": "3.0.0-alpha.2",
- "@react-native-aria/interactions": "^0.2.7",
- "@react-native-aria/utils": "^0.2.7",
- "@react-stately/tabs": "3.0.0-alpha.1",
- "@react-types/tabs": "3.0.0-alpha.2"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/tabs/node_modules/@react-aria/tabs": {
- "version": "3.0.0-alpha.2",
- "resolved": "https://registry.npmjs.org/@react-aria/tabs/-/tabs-3.0.0-alpha.2.tgz",
- "integrity": "sha512-yHpz1HujxBcMq8e4jrHkkowzrJwuVyssCB+DuA91kt6LC0eIMZsDZY9tEhhOq+TyOhI3nbyXaDKJG6y1qB0A5A==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-aria/i18n": "^3.2.0",
- "@react-aria/interactions": "^3.3.2",
- "@react-aria/selection": "^3.3.1",
- "@react-aria/utils": "^3.4.1",
- "@react-stately/list": "^3.2.2",
- "@react-stately/tabs": "3.0.0-alpha.0",
- "@react-types/shared": "^3.2.1",
- "@react-types/tabs": "3.0.0-alpha.2"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/@react-native-aria/tabs/node_modules/@react-aria/tabs/node_modules/@react-stately/tabs": {
- "version": "3.0.0-alpha.0",
- "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.0.0-alpha.0.tgz",
- "integrity": "sha512-QJZ9N7DT89RkP18btvQhJvxWuv/JkSwtm14ftfk+5LBbzyxyLsD2KP6jDrNhXgmkRMmIyEaMt2w2VmI6fQ6UAA==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/list": "^3.2.2",
- "@react-stately/utils": "^3.0.0-alpha.1",
- "@react-types/tabs": "3.0.0-alpha.2"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/@react-native-aria/tabs/node_modules/@react-stately/tabs": {
- "version": "3.0.0-alpha.1",
- "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.0.0-alpha.1.tgz",
- "integrity": "sha512-aEG5lVLqmfx7A/dS5gkPXmD2ERAo69RtC0aHPo/Dw1XjzalYyo6QbQ5WtiuQxsCVx/naWGEJCcMEAD5/vt+cUQ==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/list": "^3.2.2",
- "@react-stately/utils": "^3.2.0",
- "@react-types/tabs": "3.0.0-alpha.2"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/@react-native-aria/tabs/node_modules/@react-types/tabs": {
- "version": "3.0.0-alpha.2",
- "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.0.0-alpha.2.tgz",
- "integrity": "sha512-HQNS2plzuNhKPo88OGEW2Ja9aLeiWqgNqEemSxh0KAjkA8IsvDGaoQEpr9ZQIyBZ3PQIljvOpEJ/IwHU5LztrQ==",
- "dependencies": {
- "@react-types/shared": "^3.2.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/@react-native-aria/toggle": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@react-native-aria/toggle/-/toggle-0.2.3.tgz",
- "integrity": "sha512-3aOlchMxpR0b2h3Z7V0aYZaQMVJD6uKOWKWJm82VsLrni4iDnDX/mLv30ujuuK3+LclUhVlJd2kRuCl+xnf3XQ==",
- "dependencies": {
- "@react-aria/focus": "^3.2.3",
- "@react-aria/utils": "^3.6.0",
- "@react-native-aria/interactions": "^0.2.3",
- "@react-native-aria/utils": "^0.2.6",
- "@react-stately/toggle": "^3.2.1",
- "@react-types/checkbox": "^3.2.1"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
- "node_modules/@react-native-aria/utils": {
- "version": "0.2.8",
- "resolved": "https://registry.npmjs.org/@react-native-aria/utils/-/utils-0.2.8.tgz",
- "integrity": "sha512-x375tG1itv3irLFRnURLsdK2djuvhFJHizSDUtLCo8skQwfjslED5t4sUkQ49di4G850gaVJz0fCcCx/pHX7CA==",
- "dependencies": {
- "@react-aria/ssr": "^3.0.1",
- "@react-aria/utils": "^3.3.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/@react-native-async-storage/async-storage": {
"version": "1.21.0",
"resolved": "https://registry.npmjs.org/@react-native-async-storage/async-storage/-/async-storage-1.21.0.tgz",
@@ -6751,11 +6108,11 @@
}
},
"node_modules/@react-navigation/bottom-tabs": {
- "version": "6.5.7",
- "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.7.tgz",
- "integrity": "sha512-9oZYyRu2z7+1pr2dX5V54rHFPmlj4ztwQxFe85zwpnGcPtGIsXj7VCIdlHnjRHJBBFCszvJGQpYY6/G2+DfD+A==",
+ "version": "6.5.14",
+ "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.14.tgz",
+ "integrity": "sha512-3gDVwuaPQIxkJm3PI5vATDr9Un3Z0tplfkzM/TWL2igE0Kd/hymWz0jZppBJbuKi+Q25i/74b+3VOVKuiE43AQ==",
"dependencies": {
- "@react-navigation/elements": "^1.3.17",
+ "@react-navigation/elements": "^1.3.24",
"color": "^4.2.3",
"warn-once": "^0.1.0"
},
@@ -6768,25 +6125,25 @@
}
},
"node_modules/@react-navigation/core": {
- "version": "6.4.8",
- "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.8.tgz",
- "integrity": "sha512-klZ9Mcf/P2j+5cHMoGyIeurEzyBM2Uq9+NoSFrF6sdV5iCWHLFhrCXuhbBiQ5wVLCKf4lavlkd/DDs47PXs9RQ==",
+ "version": "6.4.11",
+ "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.11.tgz",
+ "integrity": "sha512-kOCyOc1L0lAl53DbyNl3OkUJwSFKSaVCsV8leJawUXMXJ1FTT3nbS3xMOqbZuchxIbl8T62sZ7YnlWG/21rcMw==",
"dependencies": {
- "@react-navigation/routers": "^6.1.8",
+ "@react-navigation/routers": "^6.1.9",
"escape-string-regexp": "^4.0.0",
"nanoid": "^3.1.23",
"query-string": "^7.1.3",
"react-is": "^16.13.0",
- "use-latest-callback": "^0.1.5"
+ "use-latest-callback": "^0.1.7"
},
"peerDependencies": {
"react": "*"
}
},
"node_modules/@react-navigation/elements": {
- "version": "1.3.18",
- "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.18.tgz",
- "integrity": "sha512-/0hwnJkrr415yP0Hf4PjUKgGyfshrvNUKFXN85Mrt1gY49hy9IwxZgrrxlh0THXkPeq8q4VWw44eHDfAcQf20Q==",
+ "version": "1.3.24",
+ "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.24.tgz",
+ "integrity": "sha512-zgZV50qjlv3/N+MzNV0DIRmtg30IZcR0+LaTQRP/OxLtveQkgUG6wIEKl6SXO2ykC9yF9V82msdCzKl9uPSQCA==",
"peerDependencies": {
"@react-navigation/native": "^6.0.0",
"react": "*",
@@ -6795,11 +6152,11 @@
}
},
"node_modules/@react-navigation/native": {
- "version": "6.1.6",
- "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.6.tgz",
- "integrity": "sha512-14PmSy4JR8HHEk04QkxQ0ZLuqtiQfb4BV9kkMXD2/jI4TZ+yc43OnO6fQ2o9wm+Bq8pY3DxyerC2AjNUz+oH7Q==",
+ "version": "6.1.12",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.12.tgz",
+ "integrity": "sha512-t6y7sDCr0HlMf+5TuVjLjyi0ySs0eNGfreDKcWOMEi5wooNFM4LhcUCdEVylpwCPfjQMW/lNVomNromqZFM6HQ==",
"dependencies": {
- "@react-navigation/core": "^6.4.8",
+ "@react-navigation/core": "^6.4.11",
"escape-string-regexp": "^4.0.0",
"fast-deep-equal": "^3.1.3",
"nanoid": "^3.1.23"
@@ -6810,11 +6167,11 @@
}
},
"node_modules/@react-navigation/native-stack": {
- "version": "6.9.13",
- "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.13.tgz",
- "integrity": "sha512-ejlepMrvFneewL+XlXHHhn+6y3lwvavM4/R7XwBV0XJxCymujexK+7Vkg7UcvJ1lx4CRhOcyBSNfGmdNIHREyQ==",
+ "version": "6.9.20",
+ "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.20.tgz",
+ "integrity": "sha512-/QXOVJGLPNGv0RXisyI5ld9oaKAdVzwcF88Q1pOA1Icp8Yce036bcixJXBsVuUhqYCJ5cBtojWt5mW6za3cRBw==",
"dependencies": {
- "@react-navigation/elements": "^1.3.18",
+ "@react-navigation/elements": "^1.3.24",
"warn-once": "^0.1.0"
},
"peerDependencies": {
@@ -6826,430 +6183,13 @@
}
},
"node_modules/@react-navigation/routers": {
- "version": "6.1.8",
- "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.8.tgz",
- "integrity": "sha512-CEge+ZLhb1HBrSvv4RwOol7EKLW1QoqVIQlE9TN5MpxS/+VoQvP+cLbuz0Op53/iJfYhtXRFd1ZAd3RTRqto9w==",
+ "version": "6.1.9",
+ "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.9.tgz",
+ "integrity": "sha512-lTM8gSFHSfkJvQkxacGM6VJtBt61ip2XO54aNfswD+KMw6eeZ4oehl7m0me3CR9hnDE4+60iAZR8sAhvCiI3NA==",
"dependencies": {
"nanoid": "^3.1.23"
}
},
- "node_modules/@react-stately/checkbox": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.4.2.tgz",
- "integrity": "sha512-UG94lilDJEIFeRKnKw31nI1Vb1UOSroLAFHv4rB2tCvzLl3/9ULfHyii1hqFVS41juzFc7ONInNBT4yu5RAm5Q==",
- "dependencies": {
- "@react-stately/toggle": "^3.5.2",
- "@react-stately/utils": "^3.6.0",
- "@react-types/checkbox": "^3.4.4",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/collections": {
- "version": "3.8.0",
- "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.8.0.tgz",
- "integrity": "sha512-NIRE8Gha0XZTnbvh9JRZM7oI/6uLf6ozjB7myja29IX7hDvsZxITe0RFXBapcujlpXLU2uufssJPKpiwJm3vZQ==",
- "dependencies": {
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/combobox": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.5.1.tgz",
- "integrity": "sha512-E7eEggbVaueLEeSAOXzB2wUsjxgA3vpfTsghWdxYU6hWPB2ek6cSWfjAp7NPtf0b56n07kZRqa1lFx6kPJSCYw==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/list": "^3.8.1",
- "@react-stately/menu": "^3.5.2",
- "@react-stately/select": "^3.5.1",
- "@react-stately/utils": "^3.6.0",
- "@react-types/combobox": "^3.6.2",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/grid": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-stately/grid/-/grid-3.6.1.tgz",
- "integrity": "sha512-54B3OztU99ixMhcZsDdfeMemEcqibK9KgaOZVuPmewee35nXAOGTqNjjeN64Vz6ui8q3j86eIyjGChAxqU0KpA==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/selection": "^3.13.1",
- "@react-types/grid": "^3.1.8",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/layout": {
- "version": "3.12.1",
- "resolved": "https://registry.npmjs.org/@react-stately/layout/-/layout-3.12.1.tgz",
- "integrity": "sha512-WVAo9bb8+QWOkGC0HUkYOGjkXvUuZyOOtftc0blRnuGD30SAx1bLkGEFoa2Qm6K7Rhm7s9jNSSXdd6Tgm4Aqew==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/table": "^3.9.1",
- "@react-stately/virtualizer": "^3.5.2",
- "@react-types/grid": "^3.1.8",
- "@react-types/shared": "^3.18.1",
- "@react-types/table": "^3.6.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/list": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@react-stately/list/-/list-3.8.1.tgz",
- "integrity": "sha512-QO2hKRnXaz2L1v/KYPmDKeD+PfEScp4KiJMFzU/T9vvjxIratSTg314B25Xj4LJq+JhyxlguylxBF9r/R6qUjQ==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/selection": "^3.13.1",
- "@react-stately/utils": "^3.6.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/menu": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-stately/menu/-/menu-3.5.2.tgz",
- "integrity": "sha512-BgGK3NleNGcByadG990ccdwr4oQiAN6meGf0gbIwrisikNdnL1XxgzCj+RMEooBtV+qakR+3KtVAnc97E5WiOQ==",
- "dependencies": {
- "@react-stately/overlays": "^3.5.2",
- "@react-stately/utils": "^3.6.0",
- "@react-types/menu": "^3.9.1",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/overlays": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.5.2.tgz",
- "integrity": "sha512-NEwkF/ukXzI/Ku+6j6MhhqdMc5xMgDnuR6RwFPsoPq6UoHw9/ojifxg/sDj5e1gPoegNZ2nM8G6VmnPUGabg/g==",
- "dependencies": {
- "@react-stately/utils": "^3.6.0",
- "@react-types/overlays": "^3.7.2",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/radio": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.8.1.tgz",
- "integrity": "sha512-yhz6/2y/hkDW7dzjhNsxrVZ8T7n2/Y9LyVRKDCL7ZYOkpoVQGe0ELbU04ATJPHNx6Icg/jAfN0Z/uMov/q4VBQ==",
- "dependencies": {
- "@react-stately/utils": "^3.6.0",
- "@react-types/radio": "^3.4.2",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/select": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@react-stately/select/-/select-3.5.1.tgz",
- "integrity": "sha512-a6/Y3yRwinYR08Pq7Vj2HjOLtRgn5Ctmorx+UR7hBekvV/7scu9RqNI3i/yxyF+8y7KeymuwuMe1iohn4uAP+g==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/list": "^3.8.1",
- "@react-stately/menu": "^3.5.2",
- "@react-stately/selection": "^3.13.1",
- "@react-stately/utils": "^3.6.0",
- "@react-types/select": "^3.8.1",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/selection": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/@react-stately/selection/-/selection-3.13.1.tgz",
- "integrity": "sha512-0B+gT6hyei/pzUSmrNliphoztOPZJ7v/xVT9b4HViRTwuOUQlmwi5BQai84EbVtgQaQghc07sJ/Y/Ec8WXCRHA==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/utils": "^3.6.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/slider": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.3.2.tgz",
- "integrity": "sha512-UHyBdFR/3Wl1UZmwxWwJ1rb/OCYhY62zZaN7GZrVsnjQ0ng7mFqkb6O0/SXWjsfXnmRAMqCg4ARk82d1PRUfsg==",
- "dependencies": {
- "@react-aria/i18n": "^3.7.2",
- "@react-aria/utils": "^3.17.0",
- "@react-stately/utils": "^3.6.0",
- "@react-types/shared": "^3.18.1",
- "@react-types/slider": "^3.5.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/table": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-stately/table/-/table-3.9.1.tgz",
- "integrity": "sha512-/YWpV88RH4ElCiwNm/Ys+A5nyWhy+BwEsGTVatbjwZFmHwHxv1FeMrTiYZ9vXR7V7SMCvA8Pd9OJ9NmRkd2klg==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/grid": "^3.6.1",
- "@react-stately/selection": "^3.13.1",
- "@react-types/grid": "^3.1.8",
- "@react-types/shared": "^3.18.1",
- "@react-types/table": "^3.6.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/toggle": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.5.2.tgz",
- "integrity": "sha512-2fDecu06job9NKdSIryU4AE+BoTGZqfinUsAvYTaaQN95Apq8IShEDFkY+gSnU09wRX26Ux+JJi5pYwg+HX1tw==",
- "dependencies": {
- "@react-stately/utils": "^3.6.0",
- "@react-types/checkbox": "^3.4.4",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/tree": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-stately/tree/-/tree-3.6.1.tgz",
- "integrity": "sha512-KfaUoc0/PeT9W25e/7jG1VGeTO54KDKULveuUqLFJEJeP8M8vCgT5Og4YdJkPfu//dlL8OZu1y6ZpdyA9+LBsg==",
- "dependencies": {
- "@react-stately/collections": "^3.8.0",
- "@react-stately/selection": "^3.13.1",
- "@react-stately/utils": "^3.6.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/utils": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.6.0.tgz",
- "integrity": "sha512-rptF7iUWDrquaYvBAS4QQhOBQyLBncDeHF03WnHXAxnuPJXNcr9cXJtjJPGCs036ZB8Q2hc9BGG5wNyMkF5v+Q==",
- "dependencies": {
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-stately/virtualizer": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-stately/virtualizer/-/virtualizer-3.5.2.tgz",
- "integrity": "sha512-OmG9lPcbfnyuPhbSDVcDXDfPU0rc2E/V8VLGGd/yMOxSy4S90nWDSEoR8qAN6g9rY6xoLjPJ671nyxOu41EtyA==",
- "dependencies": {
- "@react-aria/utils": "^3.17.0",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/button": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.7.3.tgz",
- "integrity": "sha512-Fz1t/kYinHDunmct3tADD2h3UDBPZUfRE+zCzYiymz0g+v/zYHTAqnkWToTF9ptf8HIB5L2Z2VFYpeUHFfpWzg==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/checkbox": {
- "version": "3.4.4",
- "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.4.4.tgz",
- "integrity": "sha512-rJNhbW4R9HTvdbF2oTZmqGiZ/WVP3/XsU4gae7tfdhSYjG+5T5h9zau1vRhz++zwKn57wfcyNn6a83GDhhgkVw==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/combobox": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.6.2.tgz",
- "integrity": "sha512-qitu/W3Z3/ihyqocy+8n4HZKRXF5JTMHl1ug3rKps5yCNnVdkWwjPFPM6w180c9QjquThNY3o947LZ1v59qJ4A==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/grid": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/@react-types/grid/-/grid-3.1.8.tgz",
- "integrity": "sha512-NKk4pDbW2QXJOYnDSAYhta81CGwXOc/9tVw2WFs+1wacvxeKmh1Q+n36uAFcIdQOvVRqeGTJaYiqLFmF3fC3tA==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/label": {
- "version": "3.7.4",
- "resolved": "https://registry.npmjs.org/@react-types/label/-/label-3.7.4.tgz",
- "integrity": "sha512-SfTqPRI39GE3GFD5ZGYEeX9jXQrNqDeaaI36PJhnbgGVFz96oVVkhy9t9c2bMHcbhLLENYIHMzxrvVqXS07e7A==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/listbox": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.4.2.tgz",
- "integrity": "sha512-qg980T+tl15pqgfuK8V6z+vsvsIrJEEPxcupQXP3T1O0LxWxJDakZHF0lV9qwfyB9XlnVSMZfkjDiZp9Wgf8QQ==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/menu": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/@react-types/menu/-/menu-3.9.1.tgz",
- "integrity": "sha512-VOhp/gDrFqbVV5kiqFoJCba9mxyQH2eCdR26nK3Fn92K8AAGqKt1C0naKCgdAmGp2+qTveR94Iw0iyDfMt60og==",
- "dependencies": {
- "@react-types/overlays": "^3.7.2",
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/overlays": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.7.2.tgz",
- "integrity": "sha512-I/mm/xjJVJX2VC4UwNwzhsgVKh8eTHjE2NT6Ek70t/AMR/AT8i3m+eLYb4LEoRFFuZ0ctoJDLKkSCAP7nTkT0A==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/radio": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@react-types/radio/-/radio-3.4.2.tgz",
- "integrity": "sha512-SE6sjZjZbyuJMJNNdlhoutVr+QFRt1Vz7DZj4UaOswW5SD/Xb+xFdW8i6ETKdRN17am/5SC89ltWe0R3q0pVkA==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/select": {
- "version": "3.8.1",
- "resolved": "https://registry.npmjs.org/@react-types/select/-/select-3.8.1.tgz",
- "integrity": "sha512-ByVKKwgpE3d08jI+Ibuom/qphlBiDKpVMwXgFgVZRAN2YvVrsix8arSo7kmXtzekz91qqDBqtt7DBCfT0E1WKw==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/shared": {
- "version": "3.18.1",
- "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.18.1.tgz",
- "integrity": "sha512-OpTYRFS607Ctfd6Tmhyk6t6cbFyDhO5K+etU35X50pMzpypo1b7vF0mkngEeTc0Xwl0e749ONZNPZskMyu5k8w==",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/slider": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@react-types/slider/-/slider-3.5.1.tgz",
- "integrity": "sha512-8+AMNexx7q7DqfAtQKC5tgnZdG/tIwG2tcEbFCfAQA09Djrt/xiMNz+mc7SsV1PWoWwVuSDFH9QqKPodOrJHDg==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/switch": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@react-types/switch/-/switch-3.3.2.tgz",
- "integrity": "sha512-L0XF4J43Q7HCAJXqseAk6RMteK6k1jQ0zrG05r6lSCkxaS9fGUlgLTCiFUsf07x0ADH1Xyc7PwpfJjyEr5A4tA==",
- "dependencies": {
- "@react-types/checkbox": "^3.4.4",
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/table": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/@react-types/table/-/table-3.6.1.tgz",
- "integrity": "sha512-DeiiBZPZUO2kH40P10Bn9Y4SvDobUlH7Flgx2afL3tJirKMkS1SNDU/B+X9B5Duyd1D0okf1+PLVmi0NBqM4vg==",
- "dependencies": {
- "@react-types/grid": "^3.1.8",
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/@react-types/textfield": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/@react-types/textfield/-/textfield-3.7.2.tgz",
- "integrity": "sha512-TsZTf1+4Ve9QHm6mbXr26uLOA4QtZPgyjYgYclL2nHoOl67algeQIFxIVfdlNIKFFMOw5BtC6Mer0I3KUWtbOQ==",
- "dependencies": {
- "@react-types/shared": "^3.18.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
"node_modules/@rematch/core": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/@rematch/core/-/core-2.2.0.tgz",
@@ -7290,6 +6230,31 @@
"join-component": "^1.1.0"
}
},
+ "node_modules/@shopify/react-native-skia": {
+ "version": "0.1.221",
+ "resolved": "https://registry.npmjs.org/@shopify/react-native-skia/-/react-native-skia-0.1.221.tgz",
+ "integrity": "sha512-hbwl6NJzVRBKVP39JrjVUg6r3sGNlDt17WUluPoF3h1Pv3A4qzwc9VrWNqvWr3H/0XZPuZPCop7EEz2ereYDfA==",
+ "dependencies": {
+ "canvaskit-wasm": "0.39.1",
+ "react-reconciler": "^0.27.0"
+ },
+ "bin": {
+ "setup-skia-web": "scripts/setup-canvaskit.js"
+ },
+ "peerDependencies": {
+ "react": ">=18.0",
+ "react-native": ">=0.64",
+ "react-native-reanimated": ">=2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "react-native": {
+ "optional": true
+ },
+ "react-native-reanimated": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@sideway/address": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -7329,14 +6294,6 @@
"@sinonjs/commons": "^3.0.0"
}
},
- "node_modules/@swc/helpers": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
- "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
"node_modules/@tootallnate/once": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
@@ -7412,58 +6369,58 @@
}
},
"node_modules/@types/d3-array": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz",
- "integrity": "sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A=="
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
},
"node_modules/@types/d3-color": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz",
- "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
},
"node_modules/@types/d3-ease": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz",
- "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA=="
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
},
"node_modules/@types/d3-interpolate": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
- "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
"dependencies": {
"@types/d3-color": "*"
}
},
"node_modules/@types/d3-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz",
- "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ=="
},
"node_modules/@types/d3-scale": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz",
- "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
"dependencies": {
"@types/d3-time": "*"
}
},
"node_modules/@types/d3-shape": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz",
- "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
"dependencies": {
"@types/d3-path": "*"
}
},
"node_modules/@types/d3-time": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz",
- "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg=="
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
+ "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw=="
},
"node_modules/@types/d3-timer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz",
- "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g=="
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
},
"node_modules/@types/graceful-fs": {
"version": "4.1.6",
@@ -7569,31 +6526,25 @@
"node_modules/@types/prop-types": {
"version": "15.7.5",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
- "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
+ "devOptional": true
},
"node_modules/@types/react": {
"version": "18.2.48",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz",
"integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==",
+ "devOptional": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
"csstype": "^3.0.2"
}
},
- "node_modules/@types/react-native": {
- "version": "0.70.14",
- "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.14.tgz",
- "integrity": "sha512-Kwc+BYBrnDqvacNxKp1UtcZJnJJnTih2NYmi/ieAKlHdxEPN6sYMwmIwgHdoLHggvml6bf3DYRaH2jt+gzaLjw==",
- "peer": true,
- "dependencies": {
- "@types/react": "*"
- }
- },
"node_modules/@types/scheduler": {
"version": "0.16.3",
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
- "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ=="
+ "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==",
+ "devOptional": true
},
"node_modules/@types/semver": {
"version": "7.5.0",
@@ -7916,6 +6867,11 @@
"graphql": "^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0"
}
},
+ "node_modules/@webgpu/types": {
+ "version": "0.1.21",
+ "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.21.tgz",
+ "integrity": "sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow=="
+ },
"node_modules/@xmldom/xmldom": {
"version": "0.7.11",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.11.tgz",
@@ -8052,6 +7008,7 @@
"version": "8.12.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
"integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -8420,11 +7377,11 @@
}
},
"node_modules/axios": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz",
- "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==",
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
+ "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
"dependencies": {
- "follow-redirects": "^1.15.0",
+ "follow-redirects": "^1.15.4",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -8778,6 +7735,11 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
+ "node_modules/base-64": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
+ "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
+ },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -9042,6 +8004,33 @@
"resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
"integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ=="
},
+ "node_modules/bunyamin": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/bunyamin/-/bunyamin-1.5.2.tgz",
+ "integrity": "sha512-Xp2nfqk33zt3nX90OSTkLVOc5N+1zdR3MWvfLHoIrm3cGRkdxPTPYB9CCgrDV8oum5rbghJjAbmXFXOrRXvMtg==",
+ "dev": true,
+ "dependencies": {
+ "@flatten-js/interval-tree": "^1.1.2",
+ "multi-sort-stream": "^1.0.4",
+ "stream-json": "^1.7.5",
+ "trace-event-lib": "^1.3.1"
+ },
+ "engines": {
+ "node": ">=14.18.2"
+ },
+ "peerDependencies": {
+ "@types/bunyan": "^1.8.8",
+ "bunyan": "^1.8.15 || ^2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/bunyan": {
+ "optional": true
+ },
+ "bunyan": {
+ "optional": true
+ }
+ }
+ },
"node_modules/bunyan": {
"version": "1.8.15",
"resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz",
@@ -9324,6 +8313,14 @@
}
]
},
+ "node_modules/canvaskit-wasm": {
+ "version": "0.39.1",
+ "resolved": "https://registry.npmjs.org/canvaskit-wasm/-/canvaskit-wasm-0.39.1.tgz",
+ "integrity": "sha512-Gy3lCmhUdKq+8bvDrs9t8+qf7RvcjuQn+we7vTVVyqgOVO1UVfHpsnBxkTZw+R4ApEJ3D5fKySl9TU11hmjl/A==",
+ "dependencies": {
+ "@webgpu/types": "0.1.21"
+ }
+ },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -9521,14 +8518,6 @@
"node": ">=6"
}
},
- "node_modules/clsx": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
- "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
@@ -9876,14 +8865,6 @@
"node": ">=8"
}
},
- "node_modules/css-in-js-utils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz",
- "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==",
- "dependencies": {
- "hyphenate-style-name": "^1.0.3"
- }
- },
"node_modules/css-select": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
@@ -9949,7 +8930,8 @@
"node_modules/csstype": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "devOptional": true
},
"node_modules/d3-array": {
"version": "3.2.4",
@@ -10482,9 +9464,9 @@
}
},
"node_modules/detox": {
- "version": "20.13.5",
- "resolved": "https://registry.npmjs.org/detox/-/detox-20.13.5.tgz",
- "integrity": "sha512-V0t1QuRI5rsiXEPBakjjjGGo8Y5kLi4KXhLrcvnpO8id6m7UtObj91wj+4cCnMRX2eSohXu9wR+HbD6IKcO9sA==",
+ "version": "20.18.1",
+ "resolved": "https://registry.npmjs.org/detox/-/detox-20.18.1.tgz",
+ "integrity": "sha512-GMwtoNr5E//ReIGUNtvqye+sHUj4qf9xar/I91HZeP2DAwCTogZ/rysyWH/Y/F3lvVcRxZYh7/qXaxsHNFsduQ==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
@@ -10500,6 +9482,7 @@
"funpermaproxy": "^1.1.0",
"glob": "^8.0.3",
"ini": "^1.3.4",
+ "jest-environment-emit": "^1.0.5",
"json-cycle": "^1.3.0",
"lodash": "^4.17.11",
"multi-sort-stream": "^1.0.3",
@@ -10527,7 +9510,7 @@
"detox": "local-cli/cli.js"
},
"engines": {
- "node": ">=14.5.0"
+ "node": ">=18"
},
"peerDependencies": {
"jest": "29.x.x || 28.x.x || ^27.2.5"
@@ -10686,16 +9669,7 @@
"esutils": "^2.0.2"
},
"engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dom-helpers": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
- "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
- "dependencies": {
- "@babel/runtime": "^7.8.7",
- "csstype": "^3.0.2"
+ "node": ">=6.0.0"
}
},
"node_modules/dom-serializer": {
@@ -11956,6 +10930,15 @@
"node": ">= 8"
}
},
+ "node_modules/exeunt": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/exeunt/-/exeunt-1.1.0.tgz",
+ "integrity": "sha512-dd++Yn/0Fp+gtJ04YHov7MeAii+LFivJc6KqnJNfplzLVUkUDrfKoQDTLlCgzcW15vY5hKlHasWeIsQJ8agHsw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
"node_modules/exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
@@ -11991,23 +10974,23 @@
}
},
"node_modules/expo": {
- "version": "50.0.7",
- "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.7.tgz",
- "integrity": "sha512-lTqIrKOUTKHLdTuAaJzZihi1v7F8Ix1dOXVWMpToDy9zPC/s+fet0fbyXdFUxYsCUyuEDIB9tvejrTYZk8Hm0Q==",
+ "version": "50.0.11",
+ "resolved": "https://registry.npmjs.org/expo/-/expo-50.0.11.tgz",
+ "integrity": "sha512-XEq8By1l8FQo2SEzhXfQEoKBd0nZ9j6HKsDzj1dUrRVYd02SMH/xUCERxuRaWUL2u1bWdfaFlg/Dmc/2JlVkKQ==",
"dependencies": {
"@babel/runtime": "^7.20.0",
- "@expo/cli": "0.17.5",
+ "@expo/cli": "0.17.7",
"@expo/config": "8.5.4",
"@expo/config-plugins": "7.8.4",
- "@expo/metro-config": "0.17.4",
+ "@expo/metro-config": "0.17.6",
"@expo/vector-icons": "^14.0.0",
"babel-preset-expo": "~10.0.1",
"expo-asset": "~9.0.2",
- "expo-file-system": "~16.0.6",
+ "expo-file-system": "~16.0.8",
"expo-font": "~11.10.3",
"expo-keep-awake": "~12.8.2",
"expo-modules-autolinking": "1.10.3",
- "expo-modules-core": "1.11.9",
+ "expo-modules-core": "1.11.10",
"fbemitter": "^3.0.0",
"whatwg-url-without-unicode": "8.0.0-3"
},
@@ -12057,18 +11040,6 @@
"expo": "*"
}
},
- "node_modules/expo-build-properties": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/expo-build-properties/-/expo-build-properties-0.11.1.tgz",
- "integrity": "sha512-m4j4aEjFaDuBE6KWYMxDhWgLzzSmpE7uHKAwtvXyNmRK+6JKF0gjiXi0sXgI5ngNppDQpsyPFMvqG7uQpRuCuw==",
- "dependencies": {
- "ajv": "^8.11.0",
- "semver": "^7.5.3"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
"node_modules/expo-clipboard": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/expo-clipboard/-/expo-clipboard-5.0.1.tgz",
@@ -12100,12 +11071,12 @@
}
},
"node_modules/expo-dev-client": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-3.3.8.tgz",
- "integrity": "sha512-6JpcxncWiWwq1w6SPrePpTa20z3D1qmAMMHd8f05lSCUPVBn4jTwpzrKEpGaA3EubLE5SEdxPVmvmyWw/oFFMQ==",
+ "version": "3.3.9",
+ "resolved": "https://registry.npmjs.org/expo-dev-client/-/expo-dev-client-3.3.9.tgz",
+ "integrity": "sha512-qODvuyXe8FgVJhBbwDEk/snZa5wSTNHx+poNXwA/PS4gGvOxCuG+qpeQF6K4Yf6r2+sV0OtigxPJiAyhu9I4ug==",
"dependencies": {
- "expo-dev-launcher": "3.6.6",
- "expo-dev-menu": "4.5.5",
+ "expo-dev-launcher": "3.6.7",
+ "expo-dev-menu": "4.5.6",
"expo-dev-menu-interface": "1.7.2",
"expo-manifests": "~0.13.0",
"expo-updates-interface": "~0.15.1"
@@ -12115,12 +11086,12 @@
}
},
"node_modules/expo-dev-launcher": {
- "version": "3.6.6",
- "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-3.6.6.tgz",
- "integrity": "sha512-jVI1YZS1YJTrniIL53BOxSZUMyJCeDLuS9SlRx1vC3tnTTN3srg5pU/zCK/DifwbF7i6NtA1iLPSBVu2K4040A==",
+ "version": "3.6.7",
+ "resolved": "https://registry.npmjs.org/expo-dev-launcher/-/expo-dev-launcher-3.6.7.tgz",
+ "integrity": "sha512-xn0cq2LMXv5t3n4jiAPFd9rwP22GM3zsQqAOJuWXH4b7fRzO8bayxOAt1n4RrDgkVsRzgRnxHm7kkO+Eta3Kzg==",
"dependencies": {
"ajv": "8.11.0",
- "expo-dev-menu": "4.5.5",
+ "expo-dev-menu": "4.5.6",
"expo-manifests": "~0.13.0",
"resolve-from": "^5.0.0",
"semver": "^7.5.3"
@@ -12145,9 +11116,9 @@
}
},
"node_modules/expo-dev-menu": {
- "version": "4.5.5",
- "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-4.5.5.tgz",
- "integrity": "sha512-PcbI/SqAvueOIEtR1O0s+WvVD7yizQSqXisDSkBrTym3u8XZSN+K730kz2Z64ukY9YIPG4qWR4sd+9rcjsbMWw==",
+ "version": "4.5.6",
+ "resolved": "https://registry.npmjs.org/expo-dev-menu/-/expo-dev-menu-4.5.6.tgz",
+ "integrity": "sha512-V8gOFrv8JBTy50n9mTWVPKVHMcjvrpI/w5ooZGFzjoerBlPXSauIfRmHsqmgmOr3r5oWptnC2PS3LxuSo4QZ5g==",
"dependencies": {
"expo-dev-menu-interface": "1.7.2",
"semver": "^7.5.3"
@@ -12199,9 +11170,9 @@
"integrity": "sha512-SY7rVFxb4ut/OMTgR7A39Jg+8+hXwQNRpZd+RBpB+B5XV2STj/pWXHnGFhBayEF4umI4SxrOvisY90rlPWVO9Q=="
},
"node_modules/expo-file-system": {
- "version": "16.0.6",
- "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.6.tgz",
- "integrity": "sha512-ATCHL7nEg2WwKeamW/SDTR9jBEqM5wncFq594ftKS5QFmhKIrX48d9jyPFGnNq+6h8AGPg4QKh2KCA4OY49L4g==",
+ "version": "16.0.8",
+ "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-16.0.8.tgz",
+ "integrity": "sha512-yDbVT0TUKd7ewQjaY5THum2VRFx2n/biskGhkUmLh3ai21xjIVtaeIzHXyv9ir537eVgt4ReqDNWi7jcXjdUcA==",
"peerDependencies": {
"expo": "*"
}
@@ -12384,9 +11355,9 @@
}
},
"node_modules/expo-modules-core": {
- "version": "1.11.9",
- "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.9.tgz",
- "integrity": "sha512-GTUb81vcPaF+5MtlBI1u9IjrZbGdF1ZUwz3u8Gc+rOLBblkZ7pYsj2mU/tu+k0khTckI9vcH4ZBksXWvE1ncjQ==",
+ "version": "1.11.10",
+ "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-1.11.10.tgz",
+ "integrity": "sha512-L1DSxV3AUnEvR8+G1JHbMPjpwqALv0AF71oREhDJ/ehI2TDX6LkE+up5BUK1/++UjmVu1lviefbUfLut2F5wNQ==",
"dependencies": {
"invariant": "^2.2.4"
}
@@ -12410,17 +11381,6 @@
"expo": "*"
}
},
- "node_modules/expo-splash-screen": {
- "version": "0.26.4",
- "resolved": "https://registry.npmjs.org/expo-splash-screen/-/expo-splash-screen-0.26.4.tgz",
- "integrity": "sha512-2DwofTQ0FFQCsvDysm/msENsbyNsJiAJwK3qK/oXeizECAPqD7bK19J4z9kuEbr7ORPX9MLnTQYKl6kmX3keUg==",
- "dependencies": {
- "@expo/prebuild-config": "6.7.4"
- },
- "peerDependencies": {
- "expo": "*"
- }
- },
"node_modules/expo-status-bar": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-1.11.1.tgz",
@@ -12596,11 +11556,6 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
- "node_modules/fast-loops": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz",
- "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g=="
- },
"node_modules/fast-xml-parser": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz",
@@ -12922,9 +11877,9 @@
}
},
"node_modules/follow-redirects": {
- "version": "1.15.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
- "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+ "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"funding": [
{
"type": "individual",
@@ -13608,11 +12563,6 @@
"ms": "^2.0.0"
}
},
- "node_modules/hyphenate-style-name": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
- "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
- },
"node_modules/i18n-js": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/i18n-js/-/i18n-js-4.2.3.tgz",
@@ -13749,15 +12699,6 @@
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
- "node_modules/inline-style-prefixer": {
- "version": "6.0.4",
- "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-6.0.4.tgz",
- "integrity": "sha512-FwXmZC2zbeeS7NzGjJ6pAiqRhXR0ugUShSNb6GApMl6da0/XGc4MOJsoWAywia52EEWbXNSy0pzkwz/+Y+swSg==",
- "dependencies": {
- "css-in-js-utils": "^3.1.0",
- "fast-loops": "^1.1.3"
- }
- },
"node_modules/internal-ip": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
@@ -13792,17 +12733,6 @@
"node": ">=12"
}
},
- "node_modules/intl-messageformat": {
- "version": "10.4.0",
- "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.4.0.tgz",
- "integrity": "sha512-WKmvL2ATvsTJ0CMkO1Hs6f87QlOYZ10opvOJtj0+I3RAQCBxrY8xA3QvVJPJHTS2ru0B7q/kCDyJE1oiiElgyA==",
- "dependencies": {
- "@formatjs/ecma402-abstract": "1.16.0",
- "@formatjs/fast-memoize": "2.1.0",
- "@formatjs/icu-messageformat-parser": "2.5.0",
- "tslib": "^2.4.0"
- }
- },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -15038,6 +13968,70 @@
"node": ">=8"
}
},
+ "node_modules/jest-environment-emit": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/jest-environment-emit/-/jest-environment-emit-1.0.7.tgz",
+ "integrity": "sha512-/0AYqbL3zrfRTtGyzTZwgRxQZiDXEM8ZUfY7Uscla/XGs9vszx4f0XTSZqAk3CQaiwYAoKvFZkB2vSKm1Q08fQ==",
+ "dev": true,
+ "dependencies": {
+ "bunyamin": "^1.5.2",
+ "bunyan": "^2.0.5",
+ "bunyan-debug-stream": "^3.1.0",
+ "funpermaproxy": "^1.1.0",
+ "lodash.merge": "^4.6.2",
+ "node-ipc": "9.2.1",
+ "strip-ansi": "^6.0.0",
+ "tslib": "^2.5.3"
+ },
+ "engines": {
+ "node": ">=16.14.0"
+ },
+ "peerDependencies": {
+ "@jest/environment": ">=27.2.5",
+ "@jest/types": ">=27.2.5",
+ "jest": ">=27.2.5",
+ "jest-environment-jsdom": ">=27.2.5",
+ "jest-environment-node": ">=27.2.5"
+ },
+ "peerDependenciesMeta": {
+ "@jest/environment": {
+ "optional": true
+ },
+ "@jest/types": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ },
+ "jest-environment-jsdom": {
+ "optional": true
+ },
+ "jest-environment-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-environment-emit/node_modules/bunyan": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-2.0.5.tgz",
+ "integrity": "sha512-Jvl74TdxCN6rSP9W1I6+UOUtwslTDqsSFkDqZlFb/ilaSvQ+bZAnXT/GT97IZ5L+Vph0joPZPhxUyn6FLNmFAA==",
+ "dev": true,
+ "engines": [
+ "node >=0.10.0"
+ ],
+ "dependencies": {
+ "exeunt": "1.1.0"
+ },
+ "bin": {
+ "bunyan": "bin/bunyan"
+ },
+ "optionalDependencies": {
+ "dtrace-provider": "~0.8",
+ "moment": "^2.19.3",
+ "mv": "~2",
+ "safe-json-stringify": "~1"
+ }
+ },
"node_modules/jest-environment-jsdom": {
"version": "29.5.0",
"resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz",
@@ -15082,9 +14076,9 @@
}
},
"node_modules/jest-expo": {
- "version": "50.0.2",
- "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-50.0.2.tgz",
- "integrity": "sha512-g9Vq4Cpndp6M+bWGNJfyxw+iiZm7o1XpaOEHgtyC1evdy4B9IsEWql1Y2xBH7uD79FwSKhaIz+xCQHZNhnSlAg==",
+ "version": "50.0.3",
+ "resolved": "https://registry.npmjs.org/jest-expo/-/jest-expo-50.0.3.tgz",
+ "integrity": "sha512-n0czPKvs9n+B9I1oL8w3lYMH5bH4GzhLIXXPSx2MQkkVvxsk+28ROXt2GZRTudJhsIB6LCXxIMh9vcR3zotZsA==",
"dev": true,
"dependencies": {
"@expo/config": "~8.5.0",
@@ -17043,41 +16037,11 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
- },
"node_modules/lodash.debounce": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
},
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
- },
- "node_modules/lodash.has": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz",
- "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g=="
- },
- "node_modules/lodash.isempty": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
- "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg=="
- },
- "node_modules/lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
- },
- "node_modules/lodash.isnil": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz",
- "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng=="
- },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -17087,22 +16051,8 @@
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
- },
- "node_modules/lodash.mergewith": {
- "version": "4.6.2",
- "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
- "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="
- },
- "node_modules/lodash.omit": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz",
- "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg=="
- },
- "node_modules/lodash.omitby": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/lodash.omitby/-/lodash.omitby-4.6.0.tgz",
- "integrity": "sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ=="
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
},
"node_modules/lodash.pick": {
"version": "4.4.0",
@@ -17120,11 +16070,6 @@
"integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
"dev": true
},
- "node_modules/lodash.uniqueid": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz",
- "integrity": "sha512-GQQWaIeGlL6DIIr06kj1j6sSmBxyNMwI8kaX9aKpHR/XsMTiaXDVPNPAkiboOTK9OJpTJF/dXT3xYoFQnj386Q=="
- },
"node_modules/log-symbols": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
@@ -18318,192 +17263,6 @@
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg=="
},
- "node_modules/native-base": {
- "version": "3.4.28",
- "resolved": "https://registry.npmjs.org/native-base/-/native-base-3.4.28.tgz",
- "integrity": "sha512-EDg9UFDNmfYXPInpRbxce+4oWFEIGaM7aG6ey4hVllcvMC3PkgCvkiXEB+7EemgC7Qr8CuFjgMTx7P0vvnwZeQ==",
- "dependencies": {
- "@react-aria/visually-hidden": "^3.2.1",
- "@react-native-aria/button": "^0.2.4",
- "@react-native-aria/checkbox": "^0.2.3",
- "@react-native-aria/combobox": "^0.2.4-alpha.0",
- "@react-native-aria/focus": "^0.2.6",
- "@react-native-aria/interactions": "^0.2.2",
- "@react-native-aria/listbox": "^0.2.4-alpha.3",
- "@react-native-aria/overlays": "^0.3.3",
- "@react-native-aria/radio": "^0.2.4",
- "@react-native-aria/slider": "^0.2.5-alpha.1",
- "@react-native-aria/tabs": "^0.2.7",
- "@react-native-aria/utils": "^0.2.8",
- "@react-stately/checkbox": "3.0.3",
- "@react-stately/collections": "3.3.0",
- "@react-stately/combobox": "3.0.0-alpha.1",
- "@react-stately/radio": "3.2.1",
- "@react-stately/slider": "3.0.1",
- "@react-stately/tabs": "3.0.0-alpha.1",
- "@react-stately/toggle": "3.2.1",
- "inline-style-prefixer": "^6.0.1",
- "lodash.clonedeep": "^4.5.0",
- "lodash.get": "^4.4.2",
- "lodash.has": "^4.5.2",
- "lodash.isempty": "^4.4.0",
- "lodash.isequal": "^4.5.0",
- "lodash.isnil": "^4.0.0",
- "lodash.merge": "^4.6.2",
- "lodash.mergewith": "^4.6.2",
- "lodash.omit": "^4.5.0",
- "lodash.omitby": "^4.6.0",
- "lodash.pick": "^4.4.0",
- "lodash.uniqueid": "^4.0.1",
- "stable-hash": "^0.0.2",
- "tinycolor2": "^1.4.2",
- "use-sync-external-store": "^1.2.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-native": "*",
- "react": "*",
- "react-dom": "*",
- "react-native": "*",
- "react-native-safe-area-context": "*",
- "react-native-svg": "*"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/checkbox": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.0.3.tgz",
- "integrity": "sha512-amT889DTLdbjAVjZ9j9TytN73PszynGIspKi1QSUCvXeA2OVyCwShxhV0Pn7yYX8cMinvGXrjhWdhn0nhYeMdg==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/toggle": "^3.2.3",
- "@react-stately/utils": "^3.2.2",
- "@react-types/checkbox": "^3.2.3"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/checkbox/node_modules/@react-stately/toggle": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.5.2.tgz",
- "integrity": "sha512-2fDecu06job9NKdSIryU4AE+BoTGZqfinUsAvYTaaQN95Apq8IShEDFkY+gSnU09wRX26Ux+JJi5pYwg+HX1tw==",
- "dependencies": {
- "@react-stately/utils": "^3.6.0",
- "@react-types/checkbox": "^3.4.4",
- "@react-types/shared": "^3.18.1",
- "@swc/helpers": "^0.4.14"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/collections": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@react-stately/collections/-/collections-3.3.0.tgz",
- "integrity": "sha512-Y8Pfugw/tYbcR9F6GTiTkd9O4FiXErxi5aDLSZ/knS6v0pvr3EHsC3T7jLW+48dSNrwl+HkMe5ECMhWSUA1jRQ==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-types/shared": "^3.2.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/combobox": {
- "version": "3.0.0-alpha.1",
- "resolved": "https://registry.npmjs.org/@react-stately/combobox/-/combobox-3.0.0-alpha.1.tgz",
- "integrity": "sha512-v0DNGLx0KGvNgBbXoSKzfHGcy65eP0Wx4uY3dqj+u9k3ru2BEvIqB8fo6CWhQqu8VHBX4AlhoxcyrloIKvjD/g==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/list": "^3.2.2",
- "@react-stately/menu": "^3.1.0",
- "@react-stately/select": "^3.1.0",
- "@react-stately/utils": "^3.2.0",
- "@react-types/combobox": "3.0.0-alpha.1",
- "@react-types/shared": "^3.4.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/combobox/node_modules/@react-types/combobox": {
- "version": "3.0.0-alpha.1",
- "resolved": "https://registry.npmjs.org/@react-types/combobox/-/combobox-3.0.0-alpha.1.tgz",
- "integrity": "sha512-td8pZmzZx5L32DuJ5iQk0Y4DNPerHWc2NXjx88jiQGxtorzvfrIQRKh3sy13PH7AMplGSEdAxG0llfCKrIy0Ow==",
- "dependencies": {
- "@react-types/shared": "^3.4.0"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/radio": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@react-stately/radio/-/radio-3.2.1.tgz",
- "integrity": "sha512-WGYMWCDJQOicFLf+bW2CbAnlRWaqsUd028WpsS41GWyIx/w7DVpUeGFwTSvyCXC5SCQZuambsWHgXNz8Ng5WIA==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/utils": "^3.1.1",
- "@react-types/radio": "^3.1.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/slider": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@react-stately/slider/-/slider-3.0.1.tgz",
- "integrity": "sha512-gGpfdVbTmdsOvrmZvFx4hJ5b7nczvAWdHR/tFFJKfxH0/V8NudZ5hGnawY84R3x+OvgV+tKUfifEUKA+oJyG5w==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-aria/i18n": "^3.3.0",
- "@react-aria/utils": "^3.6.0",
- "@react-stately/utils": "^3.2.0",
- "@react-types/slider": "^3.0.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/tabs": {
- "version": "3.0.0-alpha.1",
- "resolved": "https://registry.npmjs.org/@react-stately/tabs/-/tabs-3.0.0-alpha.1.tgz",
- "integrity": "sha512-aEG5lVLqmfx7A/dS5gkPXmD2ERAo69RtC0aHPo/Dw1XjzalYyo6QbQ5WtiuQxsCVx/naWGEJCcMEAD5/vt+cUQ==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/list": "^3.2.2",
- "@react-stately/utils": "^3.2.0",
- "@react-types/tabs": "3.0.0-alpha.2"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/tabs/node_modules/@react-types/tabs": {
- "version": "3.0.0-alpha.2",
- "resolved": "https://registry.npmjs.org/@react-types/tabs/-/tabs-3.0.0-alpha.2.tgz",
- "integrity": "sha512-HQNS2plzuNhKPo88OGEW2Ja9aLeiWqgNqEemSxh0KAjkA8IsvDGaoQEpr9ZQIyBZ3PQIljvOpEJ/IwHU5LztrQ==",
- "dependencies": {
- "@react-types/shared": "^3.2.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
- "node_modules/native-base/node_modules/@react-stately/toggle": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.2.1.tgz",
- "integrity": "sha512-gZVuJ8OYoATUoXzdprsyx6O1w3wCrN+J0KnjhrjjKTrBG68n3pZH0p6dM0XpsaCzlSv0UgNa4fhHS3dYfr/ovw==",
- "dependencies": {
- "@babel/runtime": "^7.6.2",
- "@react-stately/utils": "^3.1.1",
- "@react-types/checkbox": "^3.2.1",
- "@react-types/shared": "^3.2.1"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0-rc.1"
- }
- },
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -19184,11 +17943,6 @@
"node": ">=6"
}
},
- "node_modules/normalize-css-color": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/normalize-css-color/-/normalize-css-color-1.0.2.tgz",
- "integrity": "sha512-jPJ/V7Cp1UytdidsPqviKEElFQJs22hUUgK5BOPHTwOonNCk7/2qOxhhqzEajmFrWJowADFfOFh1V+aWkRfy+w=="
- },
"node_modules/normalize-package-data": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz",
@@ -19682,14 +18436,6 @@
"node": ">=10"
}
},
- "node_modules/parse-png/node_modules/pngjs": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
- "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/parse5": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
@@ -19933,6 +18679,14 @@
"node": ">=8.0"
}
},
+ "node_modules/pngjs": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz",
+ "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
@@ -19971,11 +18725,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
- },
"node_modules/prebuild-install": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -20479,22 +19228,6 @@
"react": "18.2.0"
}
},
- "node_modules/react-native-animatable": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/react-native-animatable/-/react-native-animatable-1.3.3.tgz",
- "integrity": "sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w==",
- "dependencies": {
- "prop-types": "^15.7.2"
- }
- },
- "node_modules/react-native-animated-splash-screen": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/react-native-animated-splash-screen/-/react-native-animated-splash-screen-2.0.5.tgz",
- "integrity": "sha512-VTZmcYHQq8lxtVtiXQFJKGSSftewI+F3hgLY0ONBA2g3GP/jIgLJHoShup4HBLeA0Q2mjvyNT39JpfTDcLKtHQ==",
- "dependencies": {
- "prop-types": "^15.7.2"
- }
- },
"node_modules/react-native-gesture-handler": {
"version": "2.14.1",
"resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.14.1.tgz",
@@ -20511,24 +19244,6 @@
"react-native": "*"
}
},
- "node_modules/react-native-gradle-plugin": {
- "version": "0.71.19",
- "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.19.tgz",
- "integrity": "sha512-1dVk9NwhoyKHCSxcrM6vY6cxmojeATsBobDicX0ZKr7DgUF2cBQRTKsimQFvzH8XhOVXyH8p4HyDSZNIFI8OlQ=="
- },
- "node_modules/react-native-modal": {
- "version": "11.10.0",
- "resolved": "https://registry.npmjs.org/react-native-modal/-/react-native-modal-11.10.0.tgz",
- "integrity": "sha512-syRYDJYSh16bR37R5EKU9T/wC+5bEOfF17IUqf5URdhbEDd+hxyMInC++l45E8oI+MtdOaEp9yAws5xDqk8dnA==",
- "dependencies": {
- "prop-types": "^15.6.2",
- "react-native-animatable": "1.3.3"
- },
- "peerDependencies": {
- "react": "*",
- "react-native": "*"
- }
- },
"node_modules/react-native-pager-view": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.2.3.tgz",
@@ -20609,30 +19324,6 @@
"react-native": ">=0.23.1"
}
},
- "node_modules/react-native-web": {
- "version": "0.19.7",
- "resolved": "https://registry.npmjs.org/react-native-web/-/react-native-web-0.19.7.tgz",
- "integrity": "sha512-AaU4EKCrhdXaKJT3oVm3DH1LJxbA7VEe4TWKBSabGA6+b+CVH2SrCSEKc1pJjqK9iq3gxPcRWnPgrTQ6eHLRmQ==",
- "dependencies": {
- "@babel/runtime": "^7.18.6",
- "@react-native/normalize-color": "^2.1.0",
- "fbjs": "^3.0.4",
- "inline-style-prefixer": "^6.0.1",
- "memoize-one": "^6.0.0",
- "nullthrows": "^1.1.1",
- "postcss-value-parser": "^4.2.0",
- "styleq": "^0.1.3"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/react-native-web/node_modules/memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
- },
"node_modules/react-native/node_modules/@jest/types": {
"version": "26.6.2",
"resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
@@ -20768,10 +19459,33 @@
"async-limiter": "~1.0.0"
}
},
+ "node_modules/react-reconciler": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.27.0.tgz",
+ "integrity": "sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.21.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "peerDependencies": {
+ "react": "^18.0.0"
+ }
+ },
+ "node_modules/react-reconciler/node_modules/scheduler": {
+ "version": "0.21.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.21.0.tgz",
+ "integrity": "sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
"node_modules/react-redux": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.0.4.tgz",
- "integrity": "sha512-9J1xh8sWO0vYq2sCxK2My/QO7MzUMRi3rpiILP/+tDr8krBHixC6JMM17fMK88+Oh3e4Ae6/sHIhNBgkUivwFA==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.0.tgz",
+ "integrity": "sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==",
"dependencies": {
"@types/use-sync-external-store": "^0.0.3",
"use-sync-external-store": "^1.0.0"
@@ -21024,9 +19738,9 @@
}
},
"node_modules/redux": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.0.tgz",
- "integrity": "sha512-blLIYmYetpZMET6Q6uCY7Jtl/Im5OBldy+vNPauA8vvsdqyt66oep4EUpAMWNHauTC6xa9JuRPhRB72rY82QGA=="
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w=="
},
"node_modules/redux-persist": {
"version": "6.0.0",
@@ -22043,11 +20757,6 @@
"node": ">= 8"
}
},
- "node_modules/stable-hash": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.2.tgz",
- "integrity": "sha512-tPwQ3c1rLIwbJpq59duoznegEbmgfV630C2n4R4G96LKBFljgK8j+O9AxjqB6cAzu4gE7s4pByrLWtZel8E+Mg=="
- },
"node_modules/stack-generator": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz",
@@ -22369,11 +21078,6 @@
"resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz",
"integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg=="
},
- "node_modules/styleq": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/styleq/-/styleq-0.1.3.tgz",
- "integrity": "sha512-3ZUifmCDCQanjeej1f6kyl/BeP/Vae5EYkQ9iJfUm/QwZvlgnZzyflqAsAWYURdtea8Vkvswu2GrC57h3qffcA=="
- },
"node_modules/sucrase": {
"version": "3.34.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
@@ -22829,11 +21533,6 @@
"xtend": "~4.0.1"
}
},
- "node_modules/tinycolor2": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz",
- "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw=="
- },
"node_modules/tmp": {
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -22966,9 +21665,9 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
},
"node_modules/ts-jest": {
- "version": "29.1.1",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz",
- "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==",
+ "version": "29.1.2",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.2.tgz",
+ "integrity": "sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==",
"dev": true,
"dependencies": {
"bs-logger": "0.x",
@@ -22984,7 +21683,7 @@
"ts-jest": "cli.js"
},
"engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ "node": "^16.10.0 || ^18.0.0 || >=20.0.0"
},
"peerDependencies": {
"@babel/core": ">=7.0.0-beta.0 <8",
@@ -23426,9 +22125,9 @@
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
},
"node_modules/use-latest-callback": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.6.tgz",
- "integrity": "sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg==",
+ "version": "0.1.9",
+ "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.9.tgz",
+ "integrity": "sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw==",
"peerDependencies": {
"react": ">=16.8"
}
@@ -23527,106 +22226,101 @@
}
},
"node_modules/victory": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory/-/victory-36.6.11.tgz",
- "integrity": "sha512-pXtD0gEBw1wohctaeDDWAUwX+qR9OyKyUeI0bi/rmSPNf84TinIf1bWuAuUuEPb2v90ASLVkuz0nVAP//7FOdQ==",
- "dependencies": {
- "victory-area": "^36.6.11",
- "victory-axis": "^36.6.11",
- "victory-bar": "^36.6.11",
- "victory-box-plot": "^36.6.11",
- "victory-brush-container": "^36.6.11",
- "victory-brush-line": "^36.6.11",
- "victory-candlestick": "^36.6.11",
- "victory-canvas": "^36.6.11",
- "victory-chart": "^36.6.11",
- "victory-core": "^36.6.11",
- "victory-create-container": "^36.6.11",
- "victory-cursor-container": "^36.6.11",
- "victory-errorbar": "^36.6.11",
- "victory-group": "^36.6.11",
- "victory-histogram": "^36.6.11",
- "victory-legend": "^36.6.11",
- "victory-line": "^36.6.11",
- "victory-pie": "^36.6.11",
- "victory-polar-axis": "^36.6.11",
- "victory-scatter": "^36.6.11",
- "victory-selection-container": "^36.6.11",
- "victory-shared-events": "^36.6.11",
- "victory-stack": "^36.6.11",
- "victory-tooltip": "^36.6.11",
- "victory-voronoi": "^36.6.11",
- "victory-voronoi-container": "^36.6.11",
- "victory-zoom-container": "^36.6.11"
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory/-/victory-36.9.1.tgz",
+ "integrity": "sha512-unLRMqyXNU6oiLqIPFKc5LdbQpqd0y8icz/J6ma5jnKfcZvsrrPRffkSv0KNPJ/EZMdRsZAcfOF7nSTOYeru3w==",
+ "dependencies": {
+ "victory-area": "^36.9.1",
+ "victory-axis": "^36.9.1",
+ "victory-bar": "^36.9.1",
+ "victory-box-plot": "^36.9.1",
+ "victory-brush-container": "^36.9.1",
+ "victory-brush-line": "^36.9.1",
+ "victory-candlestick": "^36.9.1",
+ "victory-canvas": "^36.9.1",
+ "victory-chart": "^36.9.1",
+ "victory-core": "^36.9.1",
+ "victory-create-container": "^36.9.1",
+ "victory-cursor-container": "^36.9.1",
+ "victory-errorbar": "^36.9.1",
+ "victory-group": "^36.9.1",
+ "victory-histogram": "^36.9.1",
+ "victory-legend": "^36.9.1",
+ "victory-line": "^36.9.1",
+ "victory-pie": "^36.9.1",
+ "victory-polar-axis": "^36.9.1",
+ "victory-scatter": "^36.9.1",
+ "victory-selection-container": "^36.9.1",
+ "victory-shared-events": "^36.9.1",
+ "victory-stack": "^36.9.1",
+ "victory-tooltip": "^36.9.1",
+ "victory-voronoi": "^36.9.1",
+ "victory-voronoi-container": "^36.9.1",
+ "victory-zoom-container": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-area": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-area/-/victory-area-36.6.11.tgz",
- "integrity": "sha512-M/wQ0ryms6WpqGzpv+BMNfCLy0dlOtIxAuYgXJYwwDu55noAMbWlFahIzfllpjTmFOyCpCXF7EDraC3n2xRRFQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-area/-/victory-area-36.9.1.tgz",
+ "integrity": "sha512-rElzHXJBXZ6sFkYs10aFUoUikFI48XZLbFIfL1tzdA74T426fTRQZNlKvjb2s3XL4fcecqVpvlg1I2dkaAszIQ==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11",
- "victory-vendor": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-axis": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-axis/-/victory-axis-36.6.11.tgz",
- "integrity": "sha512-f2PUbEsE5wYXKRrgSYdoPRV6QXKNrZjTcd8YlymVGWsouJEFRZFOig8N3yU5lM7OuP98tOdurk4I91Py6NlXrA==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-axis/-/victory-axis-36.9.1.tgz",
+ "integrity": "sha512-s23wAFlE2KFSb6pRlmY4GXL7ZC2poL7jfUJbVWovBDkIUiz5G020ba2+RfMBL4tBTK006OPzQ3GeUPASG7qejA==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-bar": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-bar/-/victory-bar-36.6.11.tgz",
- "integrity": "sha512-ANXZIYiDcvC1k3fvGbE8qHOi0POGOsYbzTgP/SBHXh9VQYa/NaYGZT3RO1mxp8wgpwaF+NZYZNC8mMO1pvcB2w==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-bar/-/victory-bar-36.9.1.tgz",
+ "integrity": "sha512-XCPKgeSBFItux1dBFpTZD90uqMw0wgd4+xD+sRgagVthTdppS3JV4YPNo1MxC/Gdm6XQfBFckcFpNG1qm3Noqw==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11",
- "victory-vendor": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-box-plot": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-box-plot/-/victory-box-plot-36.6.11.tgz",
- "integrity": "sha512-+J7Hb0Vf6cQe+qZyRhm6sM7V7AMS43jSTXnrFtRP7Bn+HdAb7p2S7h8abtgUhg3uVeTQa9UUqJBmC/maP8V3Nw==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-box-plot/-/victory-box-plot-36.9.1.tgz",
+ "integrity": "sha512-+dSHrA1naP5xEuVeIEoRadE8VL0+QmobJ6qwTxhZyjSwR9CGOelFZEgK4oVzWb7pfSa3dYUlXQRc+UWG02zFVw==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11",
- "victory-vendor": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-brush-container": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-brush-container/-/victory-brush-container-36.6.11.tgz",
- "integrity": "sha512-o0pPKzfQhKRlYNYUx3tHjuv9iTXqvgRtmu59L/h6l11DPaRo+jcHDBKEDRuoZxTinR/a1yqfLEJ1i9QgSE8o6w==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-brush-container/-/victory-brush-container-36.9.1.tgz",
+ "integrity": "sha512-XyLqCQ1LV1QbnWJh1ZlNxzk5Yp8PHqzGH6HLcnnKodZE8FBWTSREgELMQCrcT9NczI2GAA7XNkhGkZcJ4SuBMw==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23638,14 +22332,13 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-brush-line": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-brush-line/-/victory-brush-line-36.6.11.tgz",
- "integrity": "sha512-AYZvqq25nc7wOP4w7ysWAkhZnkuG28zah+6M1gJqcdeZov6dkiblda66vpwDOR1sCAGiHtLGR1pkUm+p02ikJw==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-brush-line/-/victory-brush-line-36.9.1.tgz",
+ "integrity": "sha512-evk8KThXX425wUvbAXIKLxcbddIB81b1bVGaQW+fuRGQi9ZOB0pCQxC23Pb7wrBaHzn7iyxbPwWbv9jZhfA5RQ==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23657,44 +22350,41 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-candlestick": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-candlestick/-/victory-candlestick-36.6.11.tgz",
- "integrity": "sha512-4R2aYq4opG7ONv//OjJmSPXfVgPdb3xoNiBPfs832Kon0vlfcIltvge34YEn0qkanlcp1Vg/GvxvKa/kxR45JA==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-candlestick/-/victory-candlestick-36.9.1.tgz",
+ "integrity": "sha512-Ki2dM+xAKznP9YTqPr4wbUbs3qHwWUB/LGRSH753cn/VbvvLJGsw9AjTsDDCjPunlxljRUnISmBlABPQgUwxJg==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-canvas": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-canvas/-/victory-canvas-36.6.11.tgz",
- "integrity": "sha512-0lzX9JabP6xpkn5VlHPYduYmg2dyMzvXGEbD17ZQNljOhvczkKkbOlps+v94y8MGsiXRLvkpwBMYf4V8m60lFQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-canvas/-/victory-canvas-36.9.1.tgz",
+ "integrity": "sha512-MfFrNqmQYrj3IdDx3pqdc67YWDouGJVPq5B2Jd9f71pJhxfbXAAsCC0OB7kDgZjVwzPlH2FpaOfRBan8zUJaPg==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-bar": "^36.6.11",
- "victory-core": "^36.6.11"
+ "victory-bar": "^36.9.1",
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-chart": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-chart/-/victory-chart-36.6.11.tgz",
- "integrity": "sha512-t4RIeLT6PJxZaDqNeawtIPxuA48k98kBvYbEV9XEPrS3TPAYsrB6lgXjZKLoItYLh63Ry4nqZAnPti4RD0uTfQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-chart/-/victory-chart-36.9.1.tgz",
+ "integrity": "sha512-i87Ok1vAeY9LirQt6T7B8tSr7d1vAuZvVv7f1MTTlRLHEAvifBNiGrhZho5ETzvTOXOAM7UjwqzPZze0Gk66cA==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-axis": "^36.6.11",
- "victory-core": "^36.6.11",
- "victory-polar-axis": "^36.6.11",
- "victory-shared-events": "^36.6.11"
+ "victory-axis": "^36.9.1",
+ "victory-core": "^36.9.1",
+ "victory-polar-axis": "^36.9.1",
+ "victory-shared-events": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23706,14 +22396,13 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-core": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-core/-/victory-core-36.6.11.tgz",
- "integrity": "sha512-aYhFIRu8NQMwW/JbgqoAG7w0lUYbTB1Achx4mmBc6aL8RMkv6LhD/PFwjT3TLpH0AoEs3Rpty2g0UQ+7ulE7dA==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-core/-/victory-core-36.9.1.tgz",
+ "integrity": "sha512-voPTyOyyVipzJPjelxvszVixiI98ApMNb6X9qfaFYK7fHyavF/Hy4sf/Hwq1otatLI7zpr2hC4wF+af6HDELqA==",
"dependencies": {
"lodash": "^4.17.21",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-vendor": "^36.6.11"
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23725,58 +22414,55 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-create-container": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-create-container/-/victory-create-container-36.6.11.tgz",
- "integrity": "sha512-Ve96DE9XDifmT2Bh/6Ptz7cgIV5DC2GYsr0Rl6I0sF6S02IH3V02NLpkcTthTRJHAvC9MkHwjiBlvFEZsXHOtg==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-create-container/-/victory-create-container-36.9.1.tgz",
+ "integrity": "sha512-L1c66whZAFnChVQdU2E0aYiTy3Wc1cM58V2vZPo1ORea/W9h3ojOW2bpYkG/XLf67PgnFZ299i23UzuC16Z5uw==",
"dependencies": {
"lodash": "^4.17.19",
- "victory-brush-container": "^36.6.11",
- "victory-core": "^36.6.11",
- "victory-cursor-container": "^36.6.11",
- "victory-selection-container": "^36.6.11",
- "victory-voronoi-container": "^36.6.11",
- "victory-zoom-container": "^36.6.11"
+ "victory-brush-container": "^36.9.1",
+ "victory-core": "^36.9.1",
+ "victory-cursor-container": "^36.9.1",
+ "victory-selection-container": "^36.9.1",
+ "victory-voronoi-container": "^36.9.1",
+ "victory-zoom-container": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-cursor-container": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-cursor-container/-/victory-cursor-container-36.6.11.tgz",
- "integrity": "sha512-rdQAZb3RGYfijjqIQkuPGLNY5UOhuqyzlxQFaVtkpkDSZKiPMtbfLvR7F0Yfa9cs8OeQU0KAtAiK8R33o7su/Q==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-cursor-container/-/victory-cursor-container-36.9.1.tgz",
+ "integrity": "sha512-jAxlHbebVjIvmyUBf2AVbfk3rpQNyWPSVoozcBAzjDKhrUn5GIPvytg8QvFsShwdCtSob1eSyBEsGkb16F6xnw==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-errorbar": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-errorbar/-/victory-errorbar-36.6.11.tgz",
- "integrity": "sha512-Umu8MZ2XtMNCxr8rRcf421FLywJlvQY86sGNqePaBbar4rqk6sqWAU8HKzttNjCEQ0xh579LmskleiutEBFf4g==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-errorbar/-/victory-errorbar-36.9.1.tgz",
+ "integrity": "sha512-h19jbkd9LuINKCH8dhXSwSt/UuCiphH75+j3rbSQF9kibzOpUa+WT2IbvHcZEig7obuvj+p2734Ve2Lx4xDE6A==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-group": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-group/-/victory-group-36.6.11.tgz",
- "integrity": "sha512-PTRrH31gsGk3KFzeTzAkyvgjtilWYHWkx06oouh70KuAJ7f+9pRMrRMal8v+npH6a8Wp0KKW198AqpkPaZqHyQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-group/-/victory-group-36.9.1.tgz",
+ "integrity": "sha512-FJwZbrwMJSR/ucj4rYXKYJ+R6oDNsHPG2OvVs4KWkMSSp1Ld/0/V42qFqFNixcLAEcD5ACYtyigZOmS8VEnSnA==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-core": "^36.6.11",
- "victory-shared-events": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-shared-events": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23788,16 +22474,15 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-histogram": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-histogram/-/victory-histogram-36.6.11.tgz",
- "integrity": "sha512-WOMfvshfzAgGn1Zh+/fLVW0kxQrVKYACFCdsKDEYmuG8dGvqmPilI3oljAqiYrafNagwVv+Otc0NNgW8ydLHcA==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-histogram/-/victory-histogram-36.9.1.tgz",
+ "integrity": "sha512-GIsY8S7ouVvvO5xQpUEWOrS8lQfWpZQNINtvvPsYgDidQtBeOfHi4S1yg9Txrs2kHzZ7uy2LpMcOoyGXdG0V6Q==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-bar": "^36.6.11",
- "victory-core": "^36.6.11",
- "victory-vendor": "^36.6.11"
+ "victory-bar": "^36.9.1",
+ "victory-core": "^36.9.1",
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23809,67 +22494,64 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-legend": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-legend/-/victory-legend-36.6.11.tgz",
- "integrity": "sha512-eL310Qh3WcZyjFI18hABVodwHpgZtokHD3r5HKpgZVY8MWkMD9mXErphWbkNHTVi5ya+I3QbRQ7ToRbPUl/Jog==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-legend/-/victory-legend-36.9.1.tgz",
+ "integrity": "sha512-NVWJzEJgm2+LH94b6aUQ96M58TzAgKP9wXlQC/CuYLMqK45RiLwg7pkSNuXBdtQiJgpD3W6d6klHQmUP2JkNzA==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-line": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-line/-/victory-line-36.6.11.tgz",
- "integrity": "sha512-SDQCS6qDSixnYPB1kHEQsue06N6x2cxkIA6uqL45LRFMkKWG4OtwTBORVhtK6lfKzq1OvJs3msoZ+uoRIW1gaA==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-line/-/victory-line-36.9.1.tgz",
+ "integrity": "sha512-WfnDMI5mYN+7rC21yG3IXLIkGL+xNPAFDYikCwtKD9MnHUqk1k/HMGTH0BCVPgXagwIzd8aGpbJGlvcfRr1Kvg==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11",
- "victory-vendor": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-native": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-native/-/victory-native-36.6.11.tgz",
- "integrity": "sha512-LAUcDHVO7qR9L2rxP0nyBPAI+XQF5/7554zv6PEeBWU0sLszw4loFnbexlc/LCCD0u+VjEiJvsGLk6ihaJKKLQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-native/-/victory-native-36.9.1.tgz",
+ "integrity": "sha512-4eicD4rTkt8o/T9JLXPif/O6YsJzAKuI8o9ASAcCQcH1Ln9uNJwMfOtnSoJFUCry1A1g7Z5e0++7igyUaNe5qg==",
"dependencies": {
"lodash": "^4.17.21",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory": "^36.6.11",
- "victory-area": "^36.6.11",
- "victory-axis": "^36.6.11",
- "victory-bar": "^36.6.11",
- "victory-box-plot": "^36.6.11",
- "victory-brush-container": "^36.6.11",
- "victory-brush-line": "^36.6.11",
- "victory-candlestick": "^36.6.11",
- "victory-chart": "^36.6.11",
- "victory-core": "^36.6.11",
- "victory-create-container": "^36.6.11",
- "victory-cursor-container": "^36.6.11",
- "victory-errorbar": "^36.6.11",
- "victory-group": "^36.6.11",
- "victory-histogram": "^36.6.11",
- "victory-legend": "^36.6.11",
- "victory-line": "^36.6.11",
- "victory-pie": "^36.6.11",
- "victory-polar-axis": "^36.6.11",
- "victory-scatter": "^36.6.11",
- "victory-selection-container": "^36.6.11",
- "victory-shared-events": "^36.6.11",
- "victory-stack": "^36.6.11",
- "victory-tooltip": "^36.6.11",
- "victory-voronoi": "^36.6.11",
- "victory-voronoi-container": "^36.6.11",
- "victory-zoom-container": "^36.6.11"
+ "victory": "^36.9.1",
+ "victory-area": "^36.9.1",
+ "victory-axis": "^36.9.1",
+ "victory-bar": "^36.9.1",
+ "victory-box-plot": "^36.9.1",
+ "victory-brush-container": "^36.9.1",
+ "victory-brush-line": "^36.9.1",
+ "victory-candlestick": "^36.9.1",
+ "victory-chart": "^36.9.1",
+ "victory-core": "^36.9.1",
+ "victory-create-container": "^36.9.1",
+ "victory-cursor-container": "^36.9.1",
+ "victory-errorbar": "^36.9.1",
+ "victory-group": "^36.9.1",
+ "victory-histogram": "^36.9.1",
+ "victory-legend": "^36.9.1",
+ "victory-line": "^36.9.1",
+ "victory-pie": "^36.9.1",
+ "victory-polar-axis": "^36.9.1",
+ "victory-scatter": "^36.9.1",
+ "victory-selection-container": "^36.9.1",
+ "victory-shared-events": "^36.9.1",
+ "victory-stack": "^36.9.1",
+ "victory-tooltip": "^36.9.1",
+ "victory-voronoi": "^36.9.1",
+ "victory-voronoi-container": "^36.9.1",
+ "victory-zoom-container": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23881,68 +22563,63 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-pie": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-pie/-/victory-pie-36.6.11.tgz",
- "integrity": "sha512-vQPAzrubo3BX/1pujSlKKTBGNSj/8fxUJ0vSZPZ6EE1y6SRnPJoLYi2OkDQVT1s3rM9xvW00SflCD3GO/Z3xWA==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-pie/-/victory-pie-36.9.1.tgz",
+ "integrity": "sha512-TjfGe1Wd8cWaV7Ldd2AgPstAT0qbxY8EHYj2YyB93qfZCwdLQqxEmDobl+T+BmnRtCodXUWdghkLvVggf4N0bQ==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11",
- "victory-vendor": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-vendor": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-polar-axis": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-polar-axis/-/victory-polar-axis-36.6.11.tgz",
- "integrity": "sha512-wDkyY1rKQTRUVt4+e0QNQgSIJCqXazNhkjWXla8ZWj52GzPP/QSDuzr8SO1oHA3++1jOpdD0R2FTxm+pAea/Yw==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-polar-axis/-/victory-polar-axis-36.9.1.tgz",
+ "integrity": "sha512-C7oPeRzG0Mn+Veu8qI1lVgiBMyZwdrvnplUi6AnFvYf9wURoFjyC+DQ7Eh5IH4TeVQz9rr9ksiliFtXPOHCwvg==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-scatter": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-scatter/-/victory-scatter-36.6.11.tgz",
- "integrity": "sha512-x46AfmhiKijXe59kqm7xI0CCjbY8J0VB02HUN3TynMx7xzhW2yOP+QQqgyk+C4im/MS33HKU402Q7cUfF3pgtw==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-scatter/-/victory-scatter-36.9.1.tgz",
+ "integrity": "sha512-n5h/PUW2pHwiBJi0gLt5D5/jM3ZNXnFqZyjFkiKP6nztUtLRQfjcDMwmRWFOF/WZS/e2C7qMYizuXmxuU5ZVOw==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-selection-container": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-selection-container/-/victory-selection-container-36.6.11.tgz",
- "integrity": "sha512-pRQz++0ERZVuIgxpmqLkDgf6hiCAS2m8iGcox8tryWzE1NpADG/IJiHh3AeJgGeiLNMeoJ48hsOZP1C9CCxwrQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-selection-container/-/victory-selection-container-36.9.1.tgz",
+ "integrity": "sha512-yugHpsS+JHmhJdhduuDHIBVg0mJ60Nge52CCHdiqM7hitcK1+hJgeEPt9zyCDYivQrBimRCGjNYfXhjjCbxzrg==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-shared-events": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-shared-events/-/victory-shared-events-36.6.11.tgz",
- "integrity": "sha512-ia6ijfgfYMb+gGFPEq4F6rqzB9p5EkjKpjvmEv4Ww7VjrtdORu7PPfAgTxXw/9QgFSq4iOUnDtzjObABua09fQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-shared-events/-/victory-shared-events-36.9.1.tgz",
+ "integrity": "sha512-U+iDeuv17qYbigMivQcYmZPrvCMHQ8oHFprrlmF9K9cby3q9NFuZ6bbZUngm8kB61P0L6gR0BbYSWvdT9QUEbA==",
"dependencies": {
"json-stringify-safe": "^5.0.1",
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23954,15 +22631,14 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-stack": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-stack/-/victory-stack-36.6.11.tgz",
- "integrity": "sha512-kE/915RdcKes69WpxZ5j6MyCIJqdzIZnzIg6OArBeDlD+LuinNb2oNxYpMXzur1KFSyk5PCUckHgEbR2XLoXrw==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-stack/-/victory-stack-36.9.1.tgz",
+ "integrity": "sha512-yTSLyq3PShJIIsHFjRZcWJvJsZU0+kZ6OhYawqnE133XkaQFdA6C4nhMGCAs6VzFT9PofzFuU0OY4geZ70G1TQ==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-core": "^36.6.11",
- "victory-shared-events": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-shared-events": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -23974,22 +22650,21 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-tooltip": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-tooltip/-/victory-tooltip-36.6.11.tgz",
- "integrity": "sha512-YxAPkGAqTYOIW4aE5InGFABmYjiBfuQFjCe9hwFGvIC/Uqn202xgs5kYVEZXUX3vc9W8XOl7plaQJzmtr2ZZBQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-tooltip/-/victory-tooltip-36.9.1.tgz",
+ "integrity": "sha512-/ICZ4jaYFplSgK1HkFikEN9d4xlRm7dI7MouYTC1m74q869nMPycLJeVjUo9RsiPnUDeiJLAnKZnXb0oICyYsQ==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-vendor": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.11.tgz",
- "integrity": "sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.1.tgz",
+ "integrity": "sha512-+pZIP+U3pEJdDCeFmsXwHzV7vNHQC/eIbHklfe2ZCZqayYRH7lQbHcVgsJ0XOOv27hWs4jH4MONgXxHMObTMSA==",
"dependencies": {
"@types/d3-array": "^3.0.3",
"@types/d3-ease": "^3.0.0",
@@ -24008,30 +22683,28 @@
}
},
"node_modules/victory-voronoi": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-voronoi/-/victory-voronoi-36.6.11.tgz",
- "integrity": "sha512-Hu1S8HsM0YOUvzW0cp2LnEvgh6a+dXHkGfaI+Qyyz5P8uXFgBcBvvhzLbgawkrIOgbX/jU5Vpketvhm4ByuAqQ==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-voronoi/-/victory-voronoi-36.9.1.tgz",
+ "integrity": "sha512-LJyBRKYu2dyrBO8Mr6vvpyknjoag/k0uJ1ax4DAFGk1uAW+ktRu5QXmU5UMIiDNihScByUsiU76JnHhI2A5wYg==",
"dependencies": {
"d3-voronoi": "^1.1.4",
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
}
},
"node_modules/victory-voronoi-container": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-voronoi-container/-/victory-voronoi-container-36.6.11.tgz",
- "integrity": "sha512-KNB814e5uhs00oNFdkPucXMlpNILnWabHM7iKLBz26nlgqiu6dctZZoWU+HKjxbPkHdic6JQsg28Nk5bThaulw==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-voronoi-container/-/victory-voronoi-container-36.9.1.tgz",
+ "integrity": "sha512-F/ZWvhF/JkRxFT1UPGf4HgPnBAhUmbRIBssAvsIRer4cr3p7RieMNTMcTYHtVwR9kTKClfmJKgn1T7imBGt2BA==",
"dependencies": {
"delaunay-find": "0.0.6",
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
"react-fast-compare": "^3.2.0",
- "victory-core": "^36.6.11",
- "victory-tooltip": "^36.6.11"
+ "victory-core": "^36.9.1",
+ "victory-tooltip": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
@@ -24043,13 +22716,12 @@
"integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ=="
},
"node_modules/victory-zoom-container": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-zoom-container/-/victory-zoom-container-36.6.11.tgz",
- "integrity": "sha512-DRS12HZEmy5oJanlnSK9Wtp/6HQQbwvK0idVU+Lhf2lw3r9gauWp/ymWwWzaHd7Mn5cCODuNW1le2bqb71j3wg==",
+ "version": "36.9.1",
+ "resolved": "https://registry.npmjs.org/victory-zoom-container/-/victory-zoom-container-36.9.1.tgz",
+ "integrity": "sha512-2G+2iUsmTCpt1ItUWVOzK0CCRYCFf+/rH4uXuvXqipHjRnotz5bxOkuW68Fdx1MzGoexIc8DfQoKxKd/q0HkZA==",
"dependencies": {
"lodash": "^4.17.19",
- "prop-types": "^15.8.1",
- "victory-core": "^36.6.11"
+ "victory-core": "^36.9.1"
},
"peerDependencies": {
"react": ">=16.6.0"
diff --git a/package.json b/package.json
index a757646..a90d353 100644
--- a/package.json
+++ b/package.json
@@ -1,45 +1,47 @@
{
"name": "abacus",
- "homepage": "https://github.com/victorbalssa/abacus",
- "version": "0.12.4",
+ "version": "0.13.2",
"private": true,
+ "homepage": "https://github.com/victorbalssa/abacus",
+ "scripts": {
+ "android": "expo run:android",
+ "debug": "open 'rndebugger://set-debugger-loc?host=localhost&port=19001'",
+ "ios": "expo run:ios",
+ "lint": "eslint --config .eslintrc.json .",
+ "lint-with-results": "eslint --config .eslintrc.json --format @microsoft/eslint-formatter-sarif --output-file eslint-results.sarif .",
+ "start": "expo start --dev-client"
+ },
"jest": {
"preset": "jest-expo",
"transformIgnorePatterns": [
"node_modules/(?!((jest-)?react-native|victory|react-native-svg|react-clone-referenced-element|expo(nent)?|@expo(nent)?/.*|react-navigation|redux-persist|native-base(-shoutem-theme)|native-base))"
]
},
- "scripts": {
- "lint": "eslint --config .eslintrc.json .",
- "lint-with-results": "eslint --config .eslintrc.json --format @microsoft/eslint-formatter-sarif --output-file eslint-results.sarif .",
- "start": "expo start --dev-client",
- "android": "expo run:android",
- "ios": "expo run:ios",
- "debug": "open 'rndebugger://set-debugger-loc?host=localhost&port=19001'"
- },
"dependencies": {
"@expo/config-plugins": "~7.8.0",
"@expo/metro-runtime": "~3.1.3",
"@expo/vector-icons": "^14.0.0",
"@react-native-async-storage/async-storage": "1.21.0",
"@react-native-community/datetimepicker": "7.6.1",
- "@react-navigation/bottom-tabs": "^6.2.0",
- "@react-navigation/native": "^6.0.8",
- "@react-navigation/native-stack": "^6.9.13",
+ "@react-navigation/bottom-tabs": "6.5.14",
+ "@react-navigation/native": "6.1.12",
+ "@react-navigation/native-stack": "6.9.20",
"@rematch/core": "^2.2.0",
"@rematch/loading": "^2.1.2",
"@rematch/persist": "^2.1.2",
- "axios": "^1.6.0",
+ "@shopify/react-native-skia": "0.1.221",
+ "axios": "1.6.7",
"babel-polyfill": "^6.26.0",
+ "base-64": "^1.0.0",
"bootstrap": "^4.4.1",
- "expo": "~50.0.7",
+ "expo": "~50.0.11",
"expo-application": "~5.8.3",
"expo-asset": "~9.0.2",
"expo-auth-session": "~5.4.0",
"expo-blur": "~12.9.2",
- "expo-build-properties": "~0.11.1",
"expo-clipboard": "~5.0.1",
"expo-crypto": "~12.8.1",
+ "expo-dev-client": "~3.3.9",
"expo-device": "~5.9.3",
"expo-font": "~11.10.2",
"expo-haptics": "~12.8.1",
@@ -49,42 +51,32 @@
"expo-localization": "~14.8.3",
"expo-random": "~13.6.0",
"expo-secure-store": "~12.8.1",
- "expo-splash-screen": "~0.26.4",
"expo-status-bar": "~1.11.1",
"expo-store-review": "~6.8.3",
"expo-system-ui": "~2.9.3",
"expo-updates": "~0.24.11",
- "expo-web-browser": "~12.8.2",
"globally": "^0.0.0",
"i18n-js": "^4.1.1",
"lodash": "^4.17.21",
"moment": "^2.29.4",
- "native-base": "^3.4.25",
- "normalize-css-color": "^1.0.2",
- "prop-types": "^15.7.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-helmet": "^5.2.1",
"react-native": "0.73.4",
- "react-native-animated-splash-screen": "^2.0.5",
"react-native-gesture-handler": "~2.14.0",
- "react-native-gradle-plugin": "^0.71.19",
- "react-native-modal": "^11.5.6",
"react-native-pager-view": "6.2.3",
"react-native-reanimated": "~3.6.2",
"react-native-safe-area-context": "4.8.2",
"react-native-screens": "~3.29.0",
"react-native-svg": "14.1.0",
"react-native-swipe-list-view": "^3.2.9",
- "react-native-web": "~0.19.7",
- "react-redux": "^9.0.4",
- "redux": "5.0.0",
- "redux-persist": "^6.0.0",
+ "react-redux": "9.1.0",
+ "redux": "5.0.1",
+ "redux-persist": "6.0.0",
"semver": "^7.5.4",
"sharp-cli": "^4.2.0",
"slash": "^5.1.0",
- "victory-native": "^36.6.11",
- "expo-dev-client": "~3.3.8"
+ "victory-native": "^36.9.1"
},
"devDependencies": {
"@babel/core": "^7.23.2",
@@ -95,7 +87,7 @@
"@typescript-eslint/eslint-plugin": "^5.30.0",
"@typescript-eslint/parser": "^5.62.0",
"babel-preset-expo": "^10.0.0",
- "detox": "20.13.5",
+ "detox": "20.18.1",
"dotenv": "^16.3.1",
"eslint": "^7.32.0",
"eslint-config-airbnb": "^19.0.4",
@@ -103,10 +95,10 @@
"eslint-plugin-jest": "^27.2.3",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.33.1",
- "jest-expo": "~50.0.2",
- "node-sass": "^9.0.0",
- "ts-jest": "^29.1.1",
- "ts-node": "^10.9.1",
- "typescript": "^5.3.0"
+ "jest-expo": "~50.0.3",
+ "node-sass": "9.0.0",
+ "ts-jest": "29.1.2",
+ "ts-node": "10.9.1",
+ "typescript": "5.3.3"
}
}
diff --git a/plugins/withAndroidStyles.js b/plugins/withAndroidStyles.js
new file mode 100644
index 0000000..6dc613c
--- /dev/null
+++ b/plugins/withAndroidStyles.js
@@ -0,0 +1,108 @@
+// eslint-disable-next-line @typescript-eslint/no-var-requires
+const { AndroidConfig, withAndroidStyles } = require('@expo/config-plugins');
+
+const setStrings = (modResults) => {
+ let newStyles = { ...modResults };
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'colorAccent' }, _: '#ffffff' },
+ parent: {
+ parent: 'Theme.AppCompat.Dialog.Alert',
+ name: 'AlertDialogTheme',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:textColorPrimary' }, _: '#ffffff' },
+ parent: {
+ parent: 'Theme.AppCompat.Dialog.Alert',
+ name: 'AlertDialogTheme',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:background' }, _: '#212121' },
+ parent: {
+ parent: 'Theme.AppCompat.Dialog.Alert',
+ name: 'AlertDialogTheme',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:buttonBarNegativeButtonStyle' }, _: '@style/NegativeButtonStyle' },
+ parent: {
+ parent: 'Theme.AppCompat.Dialog.Alert',
+ name: 'AlertDialogTheme',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:buttonBarPositiveButtonStyle' }, _: '@style/PositiveButtonStyle' },
+ parent: {
+ parent: 'Theme.AppCompat.Dialog.Alert',
+ name: 'AlertDialogTheme',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:windowTitleStyle' }, _: '@style/MyTitleTextStyle' },
+ parent: {
+ parent: 'Theme.AppCompat.Dialog.Alert',
+ name: 'AlertDialogTheme',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:textColor' }, _: '#ffffff' },
+ parent: {
+ parent: 'Widget.AppCompat.Button.ButtonBar.AlertDialog',
+ name: 'MyTitleTextStyle',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:textColor' }, _: '#d50c3c' },
+ parent: {
+ parent: 'Widget.AppCompat.Button.ButtonBar.AlertDialog',
+ name: 'NegativeButtonStyle',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:textColor' }, _: '#549cea' },
+ parent: {
+ parent: 'Widget.AppCompat.Button.ButtonBar.AlertDialog',
+ name: 'PositiveButtonStyle',
+ },
+ xml: newStyles,
+ });
+
+ newStyles = AndroidConfig.Styles.setStylesItem({
+ item: { $: { name: 'android:alertDialogTheme' }, _: '@style/AlertDialogTheme' },
+ parent: {
+ parent: 'Theme.AppCompat.Light.NoActionBar',
+ name: 'AppTheme',
+ },
+ xml: newStyles,
+ });
+
+ return newStyles;
+};
+
+module.exports = function withAndroidStylesUpdates(configuration) {
+ return withAndroidStyles(configuration, (config) => {
+ const newConfig = { ...config };
+
+ newConfig.modResults = setStrings(newConfig.modResults);
+
+ return newConfig;
+ });
+};
diff --git a/src/components/Charts/AssetsHistoryChart.tsx b/src/components/Charts/AssetsHistoryChart.tsx
index 0e1299d..6f587c0 100644
--- a/src/components/Charts/AssetsHistoryChart.tsx
+++ b/src/components/Charts/AssetsHistoryChart.tsx
@@ -66,7 +66,7 @@ function Cursor({
paddingHorizontal: 10,
}}
>
-
+
{`${activePoints.length !== 0 ? new Date(activePoints[0]?.x).toLocaleString(Localization.locale, {
month: 'short',
day: 'numeric',
@@ -175,10 +175,7 @@ export default function AssetsHistoryChart() {
paddingVertical: 10,
}}
>
-
+
{translate('assets_history_chart')}
{' '}
{currentCode}
diff --git a/src/components/Charts/BalanceHistoryChart.tsx b/src/components/Charts/BalanceHistoryChart.tsx
index b77143a..a30a67e 100644
--- a/src/components/Charts/BalanceHistoryChart.tsx
+++ b/src/components/Charts/BalanceHistoryChart.tsx
@@ -64,10 +64,7 @@ export default function BalanceHistoryChart() {
paddingVertical: 10,
}}
>
-
+
{translate('balance_history_chart')}
{' '}
{currentCode}
diff --git a/src/components/Forms/Fields/AutocompleteField.tsx b/src/components/Forms/Fields/AutocompleteField.tsx
index b5b91ef..1df83d3 100644
--- a/src/components/Forms/Fields/AutocompleteField.tsx
+++ b/src/components/Forms/Fields/AutocompleteField.tsx
@@ -1,21 +1,19 @@
import React, { useCallback, useMemo, useState } from 'react';
-import { View } from 'react-native';
-import {
- FormControl,
- HStack,
- Input,
- Pressable,
- Text,
- Badge,
- IconButton,
- ScrollView,
-} from 'native-base';
import axios from 'axios';
import { useSelector } from 'react-redux';
-import { AntDesign } from '@expo/vector-icons';
+import { AntDesign, EvilIcons } from '@expo/vector-icons';
import { RootState } from '../../../store';
import { convertKeysToCamelCase, useThemeColors } from '../../../lib/common';
+import {
+ AInput,
+ APressable,
+ AStack,
+ AText,
+ AView,
+ ALabel,
+ AFormView, AIconButton,
+} from '../../UI/ALibrary';
type AutocompleteType = {
name: string,
@@ -25,16 +23,14 @@ type AutocompleteType = {
export default function AutocompleteField({
splitType = 'withdrawal',
designation = 'source',
- isInvalid = false,
isRequired = false,
label,
placeholder,
value,
onChangeText = null,
onSelectAutocomplete,
- InputRightElement,
+ InputRightElement = null,
routeApi,
- error = null,
onDeleteMultiple = null,
multiple = false,
small = false,
@@ -90,43 +86,39 @@ export default function AutocompleteField({
return useMemo(
() => (
-
+
{!small && (
-
+
{label}
-
+
)}
- {multiple && (
-
- {value.map((item, index) => (
- handleDeleteMultiple(item)}
- />
- )}
- >
- {item}
-
- ))}
-
- )}
- (
+
+
+
+ {item}
+ }
+ onPress={() => handleDeleteMultiple(item)}
+ />
+
+
+ )))}
+
+ ((multiple && text !== '') ? handleSelectAutocomplete({ name: text }) : null)}
placeholder={placeholder}
@@ -138,41 +130,34 @@ export default function AutocompleteField({
/>
{displayAutocomplete && (
-
+
{autocompletes.map((autocomplete: AutocompleteType) => (
- handleSelectAutocomplete(autocomplete)}
- _pressed={{
- borderRadius: 10,
- backgroundColor: colors.tileBackgroundColor,
- }}
>
-
-
+
{autocomplete.name || '-'}
-
-
-
+
+
+
))}
-
+
)}
- {error && {error}}
-
+
),
[
- isInvalid,
isRequired,
label,
placeholder,
multiple,
value,
- error,
designation,
small,
splitType,
diff --git a/src/components/Forms/Fields/ForeignCurrencyField.tsx b/src/components/Forms/Fields/ForeignCurrencyField.tsx
new file mode 100644
index 0000000..4483ead
--- /dev/null
+++ b/src/components/Forms/Fields/ForeignCurrencyField.tsx
@@ -0,0 +1,73 @@
+import React, { useCallback, useMemo, useState } from 'react';
+import { useSelector } from 'react-redux';
+
+import { RootState } from '../../../store';
+import {
+ APressable,
+ AStack,
+ AText,
+ AView,
+} from '../../UI/ALibrary';
+import { CurrencyType } from '../../../models/currencies';
+
+type ForeignCurrencyFieldProps = {
+ placeholder?: string,
+ value?: string,
+ onSelect: (currencyId: string) => void,
+}
+
+export default function ForeignCurrencyField({
+ placeholder,
+ value,
+ onSelect,
+}: ForeignCurrencyFieldProps) {
+ const currencies = useSelector((state: RootState) => state.currencies.currencies);
+ const [displayAutocomplete, setDisplayAutocomplete] = useState(false);
+
+ const handleSelectAutocomplete = useCallback((currencyId: string) => {
+ onSelect(currencyId);
+ setDisplayAutocomplete(false);
+ }, [onSelect]);
+
+ const handleFocus = () => {
+ setDisplayAutocomplete(true);
+ };
+
+ return useMemo(
+ () => (
+
+ {!displayAutocomplete && (
+
+ {currencies[currencies.findIndex((s) => s.id === value)]?.attributes.code || placeholder}
+
+ )}
+
+ {displayAutocomplete && (
+
+ {currencies.map((currency: CurrencyType) => (
+ handleSelectAutocomplete(currency.id)}
+ >
+
+
+ {currency.attributes.code || '-'}
+
+
+
+ ))}
+
+ )}
+
+ ),
+ [
+ value,
+ placeholder,
+ displayAutocomplete,
+ ],
+ );
+}
diff --git a/src/components/Forms/Fields/GroupTitle.tsx b/src/components/Forms/Fields/GroupTitle.tsx
index ffa90fa..49d378f 100644
--- a/src/components/Forms/Fields/GroupTitle.tsx
+++ b/src/components/Forms/Fields/GroupTitle.tsx
@@ -1,22 +1,28 @@
import React, { useMemo, useState } from 'react';
-import { FormControl, IconButton, Input } from 'native-base';
import { useDispatch } from 'react-redux';
import { AntDesign } from '@expo/vector-icons';
import translate from '../../../i18n/locale';
import { RootDispatch } from '../../../store';
+import {
+ AFormView, AIconButton,
+ AInput,
+ ALabel,
+ AText,
+} from '../../UI/ALibrary';
+import { useThemeColors } from '../../../lib/common';
export default function GroupTitle({ title }) {
+ const { colors } = useThemeColors();
const [groupTitle, setGroupTitle] = useState(title);
const dispatch = useDispatch();
return useMemo(
() => (
-
-
+
+
{translate('transaction_form_group_title_label')}
-
-
+ }
onPress={() => {
setGroupTitle('');
dispatch.transactions.setGroupTitle('');
}}
/>
-)}
+ )}
/>
- {translate('transaction_form_group_title_helper')}
-
+ {translate('transaction_form_group_title_helper')}
+
),
[
groupTitle,
diff --git a/src/components/Forms/OauthForm.tsx b/src/components/Forms/OauthForm.tsx
index 1004c93..7de6a49 100644
--- a/src/components/Forms/OauthForm.tsx
+++ b/src/components/Forms/OauthForm.tsx
@@ -1,15 +1,10 @@
import React, { useState } from 'react';
-import {
- Input,
- FormControl,
- Button,
- Switch,
-} from 'native-base';
import {
KeyboardAvoidingView,
Platform,
Alert,
ScrollView,
+ Switch,
} from 'react-native';
import * as Haptics from 'expo-haptics';
import * as Clipboard from 'expo-clipboard';
@@ -21,7 +16,15 @@ import { isValidHttpUrl, useThemeColors } from '../../lib/common';
import translate from '../../i18n/locale';
import { RootState } from '../../store';
import {
- APressable, AStackFlex, AText, AView,
+ AFormView,
+ AInput,
+ ALabel,
+ APressable,
+ AStack,
+ AStackFlex,
+ AText,
+ AView,
+ AButton,
} from '../UI/ALibrary';
const copyToClipboard = async () => {
@@ -34,8 +37,6 @@ export default function OauthForm({
setConfig,
oauthLogin,
tokenLogin,
- useBiometricAuth = false,
- biometricCheck = () => {},
}) {
const { colors } = useThemeColors();
const loading = useSelector((state: RootState) => state.loading.effects.firefly.getNewAccessToken?.loading);
@@ -54,6 +55,7 @@ export default function OauthForm({
};
const handleLogin = async () => {
+ Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch();
if (isOauth) {
oauthLogin();
} else {
@@ -68,13 +70,19 @@ export default function OauthForm({
>
-
-
- {translate('auth_form_url_label')}
-
+
+ {translate('auth_form_url_label')}
+
-
+
{translate('auth_form_url_help')}
-
-
+
+
- {translate('auth_external_heads_up')}
+ {translate('auth_external_heads_up')}
{translate('auth_use_personal_access_token')}
-
+ toggleIsOauth()} value={!isOauth} />
{isOauth && (
- ‣
+ 1.
{' '}
{translate('auth_create_new_oauth_client')}
{' '}
- Linking.openURL(`${config.backendURL}/profile`)} underline>
- {`${isValidHttpUrl(config.backendURL) ? config.backendURL : '[Firefly III URL]'}/profile`}
-
-
+ Linking.openURL(`${config.backendURL}/profile`)} underline>
+ {`${isValidHttpUrl(config.backendURL) ? config.backendURL : '[Firefly III URL]'}/profile`}
+
+
- ‣
+ 2.
{' '}
{translate('auth_form_set_redirect')}
@@ -121,19 +129,20 @@ export default function OauthForm({
justifyContent: 'center',
alignItems: 'center',
backgroundColor: colors.brandStyle,
- borderRadius: 5,
+ borderRadius: 10,
marginLeft: 10,
- paddingRight: 3,
+ paddingRight: 7,
+ padding: 1,
}}
onPress={copyToClipboard}
>
-
- abacusfiiiapp://redirect
+
+ abacusfiiiapp://redirect
-
- {translate('auth_form_oauth_clientId')}
-
+ {translate('auth_form_oauth_clientId')}
+
-
-
- {translate('auth_form_oauth_client_secret')}
-
+
+ {translate('auth_form_oauth_client_secret')}
+
-
+
{translate('auth_form_secrets_help_message')}
-
-
+
+
)}
{!isOauth && (
Linking.openURL(`${config.backendURL}/profile`)}>
- ‣
+ 1.
{' '}
{translate('auth_create_new_personal_access_token')}
{' '}
@@ -175,9 +184,11 @@ export default function OauthForm({
/profile
-
- {translate('auth_form_personal_access_token_label')}
-
+
+ {translate('auth_form_personal_access_token_label')}
+
+
-
+
{translate('auth_form_secrets_help_message')}
-
-
+
+
)}
@@ -207,72 +218,22 @@ export default function OauthForm({
- }
- mt="2"
- shadow={2}
- onPressOut={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)}
- _pressed={{
- style: {
- transform: [{
- scale: 0.99,
- }],
- },
- }}
- _loading={{
- bg: 'primary.50',
- _text: {
- color: 'white',
- },
- alignItems: 'flex-start',
- opacity: 1,
- }}
- _spinner={{
- color: 'white',
- size: 10,
- }}
- colorScheme="primary"
- isDisabled={!isValidHttpUrl(config.backendURL) || !isMinimumRequirement()}
- isLoading={loading}
- isLoadingText={translate('auth_form_submit_button_loading')}
+
- {translate('auth_form_submit_button_initial')}
-
- {useBiometricAuth && (
- }
- mt="2"
- shadow={2}
- onTouchStart={() => Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light)}
- _pressed={{
- style: {
- transform: [{
- scale: 0.99,
- }],
- },
- }}
- _loading={{
- _text: {
- color: 'white',
- },
- alignItems: 'flex-start',
- opacity: 1,
- }}
- _spinner={{
- color: 'white',
- size: 10,
- }}
- colorScheme="coolGray"
- isLoading={loading}
- onPress={() => biometricCheck()}
- >
- {translate('auth_form_biometrics_lock')}
-
- )}
+
+
+ {translate('auth_form_submit_button_initial')}
+
+
-
+
diff --git a/src/components/Forms/TransactionForm.tsx b/src/components/Forms/TransactionForm.tsx
index 404fef4..41bab3c 100644
--- a/src/components/Forms/TransactionForm.tsx
+++ b/src/components/Forms/TransactionForm.tsx
@@ -1,8 +1,17 @@
-import React, { useEffect, useMemo, useState } from 'react';
+import React, {
+ useEffect,
+ useLayoutEffect,
+ useMemo,
+ useState,
+} from 'react';
import {
- Keyboard, Platform, View, KeyboardAvoidingView, ScrollView,
+ Keyboard,
+ Platform,
+ KeyboardAvoidingView,
+ ScrollView,
+ Pressable,
+ Switch,
} from 'react-native';
-import { Button } from 'native-base';
import { useDispatch, useSelector } from 'react-redux';
import * as Haptics from 'expo-haptics';
import * as Crypto from 'expo-crypto';
@@ -11,14 +20,17 @@ import { Ionicons } from '@expo/vector-icons';
import TransactionSplitForm from '../Forms/TransactionSplitForm';
import { RootDispatch, RootState } from '../../store';
import translate from '../../i18n/locale';
-import ToastAlert from '../UI/ToastAlert';
import GroupTitle from './Fields/GroupTitle';
import Loading from '../UI/Loading';
import { initialSplit } from '../../models/transactions';
-import { AView } from '../UI/ALibrary';
+import { AStackFlex, AText, AView } from '../UI/ALibrary';
+import AButton from '../UI/ALibrary/AButton';
+import { useThemeColors } from '../../lib/common';
function MultipleTransactionSplitForm({ isNew, splits, title }) {
+ const { colors } = useThemeColors();
+ const displayForeignCurrency = useSelector((state: RootState) => state.configuration.displayForeignCurrency);
const [splitNumber, setSplitNumber] = useState([]);
const dispatch = useDispatch();
@@ -37,12 +49,17 @@ function MultipleTransactionSplitForm({ isNew, splits, title }) {
dispatch.transactions.deleteTransactionSplit(index);
};
+ const onSwitch = async (bool: boolean) => {
+ dispatch.configuration.setDisplayForeignCurrency(bool);
+ return Promise.resolve();
+ };
+
if (splitNumber.length === 0) {
return ;
}
return (
-
+
{splitNumber.map((e, i) => (
deleteTransactionSplit(i)}
/>
))}
- }
- shadow={2}
- _pressed={{
- style: {
- transform: [{
- scale: 0.99,
- }],
- },
+
- {translate('transaction_form_new_split_button')}
-
+
+
+ {translate('transaction_form_new_split_button')}
+
+
-
+
+ {translate('transaction_form_foreign_currency_label')}
+
+
+
);
}
-function TransactionFormButtons({ navigation, handleSubmit }) {
+function TransactionFormButtons({ handleSubmit }) {
const loading = useSelector((state: RootState) => state.loading.effects.transactions.upsertTransaction?.loading);
- const error = useSelector((state: RootState) => state.transactions.error);
- const success = useSelector((state: RootState) => state.transactions.success);
- const dispatch = useDispatch();
-
- const goToTransactions = async () => {
- navigation.navigate('Transactions', {
- screen: 'TransactionsScreen',
- merge: true,
- params: {
- forceRefresh: true,
- },
- });
- };
return (
-
- {success && !loading && (
-
- )}
- {error !== '' && !loading && (
-
- )}
- }
- _pressed={{
- style: {
- transform: [{
- scale: 0.99,
- }],
- },
- }}
- _loading={{
- bg: 'primary.50',
- _text: {
- color: 'white',
- },
- alignItems: 'flex-start',
- opacity: 1,
- }}
- _spinner={{
- color: 'white',
- size: 10,
- }}
- isLoading={loading}
- isLoadingText="Submitting..."
- onPress={handleSubmit}
- >
- {translate('transaction_form_submit_button')}
-
-
+
+
+
+ {translate('transaction_form_submit_button')}
+
+
);
}
@@ -153,10 +116,6 @@ export default function TransactionForm({
useEffect(() => {
dispatch.transactions.resetTransaction({ splits, title });
-
- return () => {
- dispatch.transactions.resetStatus();
- };
}, []);
const handleSubmit = async () => {
@@ -164,15 +123,21 @@ export default function TransactionForm({
try {
await dispatch.transactions.upsertTransaction({ id });
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success).catch();
- dispatch.transactions.setSuccessStatus();
} catch (e) {
Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error).catch();
- if (e.response) {
- dispatch.transactions.setErrorStatus(e.response.data.message);
- }
}
};
+ useLayoutEffect(() => {
+ navigation.setOptions({
+ headerRight: () => (
+
+ {translate('transaction_form_submit_button')}
+
+ ),
+ });
+ }, [navigation, dispatch, title, splits, id]);
+
return useMemo(
() => (
-
+
diff --git a/src/components/Forms/TransactionSplitForm.tsx b/src/components/Forms/TransactionSplitForm.tsx
index 08d71e6..2538be4 100644
--- a/src/components/Forms/TransactionSplitForm.tsx
+++ b/src/components/Forms/TransactionSplitForm.tsx
@@ -1,27 +1,27 @@
import React, { useState } from 'react';
import moment from 'moment/moment';
import { Platform } from 'react-native';
-import {
- Button,
- FormControl,
- HStack,
- IconButton,
- Input,
- Text,
- TextArea,
- VStack,
-} from 'native-base';
import * as Haptics from 'expo-haptics';
-import { AntDesign } from '@expo/vector-icons';
+import { AntDesign, Ionicons } from '@expo/vector-icons';
import DateTimePicker from '@react-native-community/datetimepicker';
-import { useDispatch } from 'react-redux';
+import { useDispatch, useSelector } from 'react-redux';
import { getLocales } from 'expo-localization';
import translate from '../../i18n/locale';
import { useThemeColors } from '../../lib/common';
import AutocompleteField from './Fields/AutocompleteField';
-import { RootDispatch } from '../../store';
+import { RootDispatch, RootState } from '../../store';
import { TransactionSplitType, types } from '../../models/transactions';
+import {
+ AText,
+ AInput,
+ AIconButton,
+ ALabel,
+ AStack,
+ AFormView,
+ AButton, AStackFlex, APressable,
+} from '../UI/ALibrary';
+import ForeignCurrencyField from './Fields/ForeignCurrencyField';
export default function TransactionSplitForm({
index,
@@ -31,6 +31,7 @@ export default function TransactionSplitForm({
transaction,
}) {
const [locale] = getLocales();
+ const displayForeignCurrency = useSelector((state: RootState) => state.configuration.displayForeignCurrency);
const dispatch = useDispatch();
const { colorScheme, colors } = useThemeColors();
const [formData, setData] = useState({
@@ -80,139 +81,118 @@ export default function TransactionSplitForm({
};
const deleteBtn = (fields: string[]) => (
- }
onPress={() => resetTransaction(fields)}
/>
);
return (
-
{index !== 0 && (
-
-
+
{index + 1}
/
{total}
-
-
+ }
onPress={handleDelete}
/>
-
+
)}
{isNew && (
-
-
-
- {types.map(({ type, name }) => (
-
- ))}
-
-
-
+
+
+ {types.map(({ type, name }, i) => (
+ {
+ if (type !== formData.type) {
+ setTransaction({
+ ...formData,
+ type,
+ });
+ Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light).catch();
+ }
+ }}
+ style={{
+ width: 115,
+ height: 40,
+ borderTopLeftRadius: (i === 0) ? 10 : 0,
+ borderBottomLeftRadius: (i === 0) ? 10 : 0,
+ borderTopRightRadius: (i === 2) ? 10 : 0,
+ borderBottomRightRadius: (i === 2) ? 10 : 0,
+ justifyContent: 'center',
+ backgroundColor: type !== formData.type ? colors.tileBackgroundColor : colorItemTypes[formData.type],
+ borderWidth: 1,
+ borderLeftWidth: (i === 1 || i === 2) ? 0 : 1,
+ borderColor: colors.listBorderColor,
+ }}
+ >
+ {name}
+
+ ))}
+
+
)}
-
-
+
+
{translate('transaction_form_amount_label')}
-
-
+ setTransaction({
...formData,
amount: value,
})}
InputRightElement={deleteBtn(['amount'])}
- InputLeftElement={({`${formData.currencyCode} ${formData.currencySymbol}`})}
+ InputLeftElement={({`${formData.currencySymbol}`})}
/>
-
+
-
-
+ {displayForeignCurrency && (
+
+
{translate('transaction_form_foreign_amount_label')}
-
- setTransaction({
- ...formData,
- foreignCurrencyId: autocomplete.id,
- foreignCurrencyCode: autocomplete.code,
- })}
- InputRightElement={null}
- routeApi="currencies-with-code"
- />
-
-
+ setTransaction({
+ ...formData,
+ foreignCurrencyId: currencyId,
+ })}
+ />
+ )}
/>
- {(formData.foreignCurrencyId && formData.foreignAmount === '') && {translate('transaction_form_foreign_amount_error')}}
-
+
+ )}
-
-
+
+
{translate('transaction_form_date_label')}
-
- {showDatePicker && (
+
+
+ {showDatePicker && (
{
setShowDatePicker(Platform.OS === 'ios');
@@ -248,13 +239,13 @@ export default function TransactionSplitForm({
});
}}
/>
- )}
- {showTimePicker && Platform.OS === 'android' && (
+ )}
+ {showTimePicker && Platform.OS === 'android' && (
{
setShowTimePicker(false);
@@ -264,26 +255,37 @@ export default function TransactionSplitForm({
});
}}
/>
- )}
- {Platform.OS === 'android' && (
-
-
-
+
+ setShowTimePicker(true)}
+ style={{
+ height: 40,
+ borderWidth: 0.5,
+ borderColor: colors.listBorderColor,
+ }}
>
- {moment(formData.date).format('hh:mm a')}
-
-
- )}
-
+ {moment(formData.date).format('hh:mm a')}
+
+
+ )}
+
+
setTransaction({
+ onChangeText={(value: string) => setTransaction({
...formData,
budgetName: value,
})}
@@ -379,7 +381,6 @@ export default function TransactionSplitForm({
-
-
+
+
{translate('transaction_form_notes_label')}
-
-
+
-
-
+
+
+ {translate('transaction_form_reset_button')}
+
+
+
);
}
diff --git a/src/components/Modals/ChartFilterScreen.tsx b/src/components/Modals/ChartFilterScreen.tsx
index 1d4be9c..6e8a7fd 100644
--- a/src/components/Modals/ChartFilterScreen.tsx
+++ b/src/components/Modals/ChartFilterScreen.tsx
@@ -41,7 +41,7 @@ export default function FilterScreen({ navigation, route }: ScreenType) {
marginHorizontal: 1,
}}
>
-
+
{`+${selectedAccountIds.length}`}
@@ -107,7 +107,7 @@ export default function FilterScreen({ navigation, route }: ScreenType) {
<>
) : (
-
+
{`${period}M`}
)}
diff --git a/src/components/Screens/ChartScreen.tsx b/src/components/Screens/ChartScreen.tsx
index 2b1e034..587f0e4 100644
--- a/src/components/Screens/ChartScreen.tsx
+++ b/src/components/Screens/ChartScreen.tsx
@@ -3,7 +3,6 @@ import { Animated, View } from 'react-native';
import { useFocusEffect } from '@react-navigation/native';
import { useDispatch, useSelector } from 'react-redux';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
-import { Box } from 'native-base';
import PagerView, { PagerViewOnPageScrollEventData } from 'react-native-pager-view';
import { Entypo, Feather } from '@expo/vector-icons';
@@ -12,6 +11,7 @@ import { useThemeColors } from '../../lib/common';
import AssetsHistoryChart from '../Charts/AssetsHistoryChart';
import BalanceHistoryChart from '../Charts/BalanceHistoryChart';
import Pagination from '../UI/Pagination';
+import { AStack } from '../UI/ALibrary';
const AnimatedPagerView = Animated.createAnimatedComponent(PagerView);
@@ -62,14 +62,14 @@ export default function ChartScreen() {
justifyContent: 'center',
}}
>
-
+
viewPagerRef?.current?.setPage(index)}
scrollOffsetAnimatedValue={scrollOffsetAnimatedValue}
positionAnimatedValue={positionAnimatedValue}
/>
-
+
state.configuration.backendURL);
const useBiometricAuth = useSelector((state: RootState) => state.configuration.useBiometricAuth);
const {
@@ -119,106 +118,222 @@ export default function ConfigurationScreen({ navigation }: ScreenType) {
);
return (
-
-
-
+ {translate('configuration_security')}
+
+
+
+ URL
+ Linking.openURL(backendURL)} underline>{backendURL}
+
+
- {translate('configuration_security')}
-
-
-
- URL
- Linking.openURL(backendURL)} underline>{backendURL}
-
-
- {translate('configuration_manage_credentials')}
-
-
-
- {translate('auth_form_biometrics_lock')}
- bioAuthCallback(setUseBiometricAuth)} colorScheme="primary" />
-
-
+ {translate('configuration_manage_credentials')}
+
+
+
+ {translate('auth_form_biometrics_lock')}
+ bioAuthCallback(setUseBiometricAuth)} value={useBiometricAuth} />
+
+
-
+ {translate('configuration_about')}
+
+
+
+ {translate('configuration_app_version')}
+ {Application.nativeApplicationVersion}
+
+ Linking.openURL('https://github.com/victorbalssa/abacus/discussions/')}
+ style={{
+ justifyContent: 'space-between',
+ height: 45,
+ paddingHorizontal: 10,
+ paddingVertical: 5,
+ marginLeft: 10,
+ borderBottomWidth: 0.5,
+ borderColor: colors.listBorderColor,
+ }}
+ >
+ {translate('configuration_share_feedback')}
+
+
+ Linking.openURL('https://github.com/victorbalssa/abacus/issues/new')}
+ style={{
+ justifyContent: 'space-between',
+ height: 45,
+ paddingHorizontal: 10,
+ paddingVertical: 5,
+ marginLeft: 10,
+ borderBottomWidth: 0.5,
+ borderColor: colors.listBorderColor,
+ }}
+ >
+ {translate('configuration_report_issue')}
+
+
+ Linking.openURL('https://github.com/victorbalssa/abacus')}
style={{
- fontFamily: 'Montserrat_Bold',
- marginVertical: 10,
+ justifyContent: 'space-between',
+ height: 45,
paddingHorizontal: 10,
- paddingTop: 5,
- color: colors.text,
- fontSize: 18,
+ paddingVertical: 5,
+ marginLeft: 10,
+ borderBottomWidth: 0.5,
+ borderColor: colors.listBorderColor,
}}
>
- {translate('configuration_about')}
-
-
-
- {translate('configuration_app_version')}
- {Application.nativeApplicationVersion}
-
- Linking.openURL('https://github.com/victorbalssa/abacus/discussions/')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_share_feedback')}
-
-
- Linking.openURL('https://github.com/victorbalssa/abacus/issues/new')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_report_issue')}
-
-
- Linking.openURL('https://github.com/victorbalssa/abacus')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_sources')}
-
-
-
- {translate(Platform.select({ ios: 'configuration_review_app_ios', android: 'configuration_review_app_android' }))}
-
-
-
+ {translate('configuration_sources')}
+
+
+
+ {translate(Platform.select({ ios: 'configuration_review_app_ios', android: 'configuration_review_app_android' }))}
+
+
+
-
+ {translate('configuration_debug')}
+
+
+ Linking.openURL('https://github.com/victorbalssa/abacus/blob/master/.github/HELP.md')}
+ style={{
+ justifyContent: 'space-between',
+ height: 45,
+ paddingHorizontal: 10,
+ paddingVertical: 5,
+ marginLeft: 10,
+ borderBottomWidth: 0.5,
+ borderColor: colors.listBorderColor,
+ }}
+ >
+ {translate('configuration_get_help')}
+
+
+
+ {translate('configuration_clear_option')}
+
+
+
- {translate('configuration_debug')}
-
-
- Linking.openURL('https://github.com/victorbalssa/abacus/blob/master/.github/HELP.md')} pr={4} ml={4} py={2} h={45} alignItems="center" justifyContent="space-between" flexDirection="row" borderBottomWidth={0.5} borderColor={colors.listBorderColor}>
- {translate('configuration_get_help')}
-
-
-
- {translate('configuration_clear_option')}
-
-
-
- {translate('go_to_credentials')}
-
-
-
+ {translate('go_to_credentials')}
+
+
+
-
-
-
+
+
);
}
diff --git a/src/components/Screens/CredentialCreateScreen.tsx b/src/components/Screens/CredentialCreateScreen.tsx
index 7d8102e..85241ba 100644
--- a/src/components/Screens/CredentialCreateScreen.tsx
+++ b/src/components/Screens/CredentialCreateScreen.tsx
@@ -62,7 +62,7 @@ export default function CredentialCreateScreen({ navigation }: ScreenType) {
} catch (e) {
Alert.alert(
translate('oauth_token_error_title'),
- `${translate('oauth_token_error_description')}, ${e.message}`,
+ `${translate('oauth_token_error_description')}. Error: ${e.message}`,
);
}
}
@@ -85,10 +85,10 @@ export default function CredentialCreateScreen({ navigation }: ScreenType) {
await addCredential(credential);
navigation.goBack();
- } catch (_) {
+ } catch (e) {
Alert.alert(
translate('oauth_token_error_title'),
- translate('oauth_wrong_token_error_description'),
+ `${translate('oauth_wrong_token_error_description')} Error: ${e.message}`,
);
}
};
diff --git a/src/components/Screens/CredentialsScreen.tsx b/src/components/Screens/CredentialsScreen.tsx
index fcfe135..9de123f 100644
--- a/src/components/Screens/CredentialsScreen.tsx
+++ b/src/components/Screens/CredentialsScreen.tsx
@@ -2,14 +2,12 @@ import React, { useCallback, useState } from 'react';
import { useRoute, CommonActions, useFocusEffect } from '@react-navigation/native';
import { AntDesign, Ionicons } from '@expo/vector-icons';
import * as LocalAuthentication from 'expo-local-authentication';
-import { Button } from 'native-base';
import { useDispatch, useSelector } from 'react-redux';
import axios from 'axios';
-import { Alert, Platform } from 'react-native';
+import { Alert, Platform, Pressable } from 'react-native';
import {
AView,
AText,
- APressable,
AScrollView,
AStackFlex,
} from '../UI/ALibrary';
@@ -33,32 +31,6 @@ export default function CredentialsScreen({ navigation }: ScreenType) {
const [authenticated, setAuthenticated] = useState(false);
const dispatch = useDispatch();
- const bioAuthCheck = async () => {
- if (useBiometricAuth && !authenticated) {
- const bioAuth = await LocalAuthentication.authenticateAsync();
- if (bioAuth.success) {
- setAuthenticated(true);
- }
- } else {
- setAuthenticated(true);
- }
- };
-
- useFocusEffect(
- useCallback(() => {
- bioAuthCheck().catch();
- // delete old secure store keys
- deleteOldSecureStore().catch();
- getCredentials().then((c) => setCredentials(c));
- }, [authenticated]),
- );
-
- const goToCredentialCreateScreen = () => navigation.dispatch(
- CommonActions.navigate({
- name: 'CredentialCreateScreen',
- }),
- );
-
const loginWithCredential = async (credential: TCredential) => {
const {
backendURL: currentBackendURL,
@@ -85,6 +57,41 @@ export default function CredentialsScreen({ navigation }: ScreenType) {
);
};
+ const bioAuthCheck = useCallback((c: TCredential[]) => {
+ (async () => {
+ if (useBiometricAuth && !authenticated) {
+ const bioAuth = await LocalAuthentication.authenticateAsync();
+ if (bioAuth.success !== true) {
+ return;
+ }
+ }
+
+ setAuthenticated(true);
+ if (c.length === 1 && routeName === 'credentials') {
+ await loginWithCredential(c[0]);
+ }
+ })();
+ }, [useBiometricAuth, authenticated]);
+
+ useFocusEffect(
+ useCallback(() => {
+ // delete old secure store keys
+ deleteOldSecureStore().catch();
+ getCredentials()
+ .then((c) => {
+ setCredentials(c);
+ return c;
+ })
+ .then((c) => bioAuthCheck(c));
+ }, []),
+ );
+
+ const goToCredentialCreateScreen = () => navigation.dispatch(
+ CommonActions.navigate({
+ name: 'CredentialCreateScreen',
+ }),
+ );
+
const handleDeleteCredential = async (index: number) => {
await dispatch.configuration.resetAllStates();
await deleteCredential(index);
@@ -120,7 +127,7 @@ export default function CredentialsScreen({ navigation }: ScreenType) {
bounces={false}
showsVerticalScrollIndicator={false}
>
-
+ bioAuthCheck(credentials)}>
{translate('auth_form_biometrics_lock')}
@@ -146,14 +153,11 @@ export default function CredentialsScreen({ navigation }: ScreenType) {
}}
>
-
+
{translate('configuration_credentials')}
{(credentials.length > 0 && routeName === 'credentials') ? (
- setEditMode(!editMode)}
>
- {editMode ? 'Done' : 'Edit'}
-
+ {editMode ? 'Done' : 'Edit'}
+
) : }
@@ -178,8 +182,8 @@ export default function CredentialsScreen({ navigation }: ScreenType) {
display: editMode ? 'flex' : 'none',
width: 17,
height: 17,
- marginLeft: 10,
- marginRight: 5,
+ marginLeft: 15,
+ marginRight: 10,
}}
>
- }
- onPress={goToCredentialCreateScreen}
- colorScheme="coolGray"
- >
- {translate('configuration_credentials_add_button')}
-
+
+
+
+ {translate('configuration_credentials_add_button')}
+
+
)}
diff --git a/src/components/Screens/FilterScreen.tsx b/src/components/Screens/FilterScreen.tsx
index a87b180..a109e80 100644
--- a/src/components/Screens/FilterScreen.tsx
+++ b/src/components/Screens/FilterScreen.tsx
@@ -92,7 +92,7 @@ export default function FilterScreen({ navigation, route }: ScreenType) {
<>
) : (
-
+
{`${period}M`}
)}
diff --git a/src/components/Screens/HomeScreen.tsx b/src/components/Screens/HomeScreen.tsx
index 275bf29..a89c238 100644
--- a/src/components/Screens/HomeScreen.tsx
+++ b/src/components/Screens/HomeScreen.tsx
@@ -4,25 +4,14 @@ import React, {
useRef,
useCallback,
} from 'react';
-import {
- Box,
- HStack,
- Progress,
- ScrollView,
- Skeleton,
- Stack,
- Text,
- View,
- VStack,
-} from 'native-base';
import { useSelector, useDispatch } from 'react-redux';
import { useFocusEffect, useScrollToTop } from '@react-navigation/native';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import {
RefreshControl,
- TouchableOpacity,
Animated,
Switch,
+ View, Pressable,
} from 'react-native';
import axios from 'axios';
import type { PagerViewOnPageScrollEventData } from 'react-native-pager-view';
@@ -35,7 +24,14 @@ import translate from '../../i18n/locale';
import { localNumberFormat, useThemeColors } from '../../lib/common';
import Pagination from '../UI/Pagination';
-import { AStackFlex } from '../UI/ALibrary';
+import {
+ AScrollView,
+ AStack,
+ AText,
+ AView,
+ AProgressBar,
+ ASkeleton, AStackFlex,
+} from '../UI/ALibrary';
const AnimatedPagerView = Animated.createAnimatedComponent(PagerView);
@@ -53,7 +49,7 @@ function AssetsAccounts() {
};
return (
-
)}
>
-
-
-
+
+
+
{displayAllAccounts ? translate('home_all_accounts') : translate('home_accounts')}
-
-
-
+
+
+
{accounts && accounts.filter((a) => a.display || displayAllAccounts).map((account, index) => (
-
-
{account.attributes.name}
-
+
{account.attributes.includeNetWorth ? '' : '*'}
-
-
+
+
- {!loading ? (
-
+
{localNumberFormat(account.attributes.currencyCode, parseFloat(account.attributes.currentBalance))}
-
- ) : (
-
- )}
-
+
+
+
))}
-
+
{translate('account_not_included_in_net_worth')}
-
-
-
-
+
+
+
+
);
}
@@ -127,11 +118,11 @@ function InsightCategories() {
const dispatch = useDispatch();
return (
- Promise.all([
dispatch.categories.getInsightCategories(),
dispatch.firefly.getNetWorth(),
@@ -139,50 +130,42 @@ function InsightCategories() {
/>
)}
>
-
-
+ {translate('home_categories')}
+
+ {insightCategories.map((category, index) => (
+
- {translate('home_categories')}
-
- {insightCategories.map((category, index) => (
-
-
+
+
+
- {category.name}
-
-
- {!loading ? (
-
- {localNumberFormat(category.currencyCode, (category.differenceFloat * -1))}
-
- ) : (
-
- )}
-
- ))}
-
-
-
+ {localNumberFormat(category.currencyCode, (category.differenceFloat * -1))}
+
+
+
+ ))}
+
+
);
}
@@ -193,11 +176,11 @@ function InsightBudgets() {
const dispatch = useDispatch();
return (
- Promise.all([
dispatch.budgets.getInsightBudgets(),
dispatch.firefly.getNetWorth(),
@@ -205,96 +188,59 @@ function InsightBudgets() {
/>
)}
>
-
-
+ {translate('home_budgets')}
+
+ {insightBudgets.filter((budget) => budget.attributes?.active).map((budget) => (
+
- {translate('home_budgets')}
-
- {insightBudgets.filter((budget) => budget.attributes?.active).map((budget, index) => (
-
-
+
-
-
+ {budget.attributes.name}
+
+
+ {localNumberFormat(budget.currencyCode, budget.differenceFloat < 0 ? (budget.differenceFloat * -1) : budget.differenceFloat)}
+ {' / '}
+ {localNumberFormat(budget.currencyCode, budget.limit)}
+
+
+
+
+
+ budget.limit ? colors.brandNeutralLight : colors.brandSuccessLight}
+ style={{ borderRadius: 5 }}
>
- budget.limit ? colors.brandNeutral : colors.brandSuccess}
+ style={{ textAlign: 'center' }}
+ bold
>
- {budget.attributes.name}
-
-
- {localNumberFormat(budget.currencyCode, budget.differenceFloat < 0 ? (budget.differenceFloat * -1) : budget.differenceFloat)}
- {' / '}
- {localNumberFormat(budget.currencyCode, budget.limit)}
-
-
-
- {!loading ? (
-
- budget.limit ? colors.brandNeutralLight : colors.brandSuccessLight,
- borderRadius: 5,
- paddingHorizontal: 5,
- }}
- >
- budget.limit ? colors.brandNeutral : colors.brandSuccess,
- }}
- >
- {`${(budget.limit > 0 ? (((budget.differenceFloat * -1) * 100) / budget.limit).toFixed(0) : 0)}%`}
-
-
-
- ) : (
-
-
-
- )}
-
-
- ))}
-
-
-
+ {`${(budget.limit > 0 ? (((budget.differenceFloat * -1) * 100) / budget.limit).toFixed(0) : 0)}%`}
+
+
+
+
+
+ budget.limit ? colors.red : colors.green}
+ value={((-budget.differenceFloat * 100) / budget.limit) || 0}
+ />
+
+ ))}
+
+
);
}
@@ -303,64 +249,61 @@ function NetWorth() {
const hideBalance = useSelector((state: RootState) => state.configuration.hideBalance);
const netWorth = useSelector((state: RootState) => state.firefly.netWorth);
const balance = useSelector((state: RootState) => state.firefly.balance);
+ const spent = useSelector((state: RootState) => state.firefly.earned);
+ const earned = useSelector((state: RootState) => state.firefly.spent);
const currentCode = useSelector((state: RootState) => state.currencies.currentCode);
const loading = useSelector((state: RootState) => state.loading.effects.firefly.getNetWorth?.loading);
const dispatch = useDispatch();
return useMemo(() => (
-
- dispatch.configuration.setHideBalance(!hideBalance)}>
- {netWorth && netWorth[0] && !hideBalance && (
-
-
+
+ dispatch.configuration.setHideBalance(!hideBalance)}>
+ {!hideBalance && (
+
+
{`${translate('home_net_worth')} • ${currentCode}`}
-
-
-
-
- {localNumberFormat(netWorth[0].currencyCode, parseFloat(netWorth[0].monetaryValue))}
-
-
-
-
- )}
+
+
+
+ {localNumberFormat(currentCode, parseFloat(netWorth[0]?.monetaryValue || '0'))}
+
+
- {balance && balance[0] && !hideBalance && (
-
-
-
+
+
-
- {`${parseFloat(balance[0].monetaryValue) > 0 ? '+' : ''}${localNumberFormat(balance[0].currencyCode, parseFloat(balance[0].monetaryValue))}`}
-
-
-
-
+ {`${parseFloat(balance[0].monetaryValue) > 0 ? '+' : ''}${localNumberFormat(balance[0].currencyCode, parseFloat(balance[0].monetaryValue))}`}
+
+
+
+ )}
+
)}
{hideBalance && (
-
-
+
)}
-
+
), [
loading,
@@ -378,6 +321,8 @@ function NetWorth() {
colors,
netWorth,
balance,
+ earned,
+ spent,
currentCode,
]);
}
@@ -438,23 +383,14 @@ export default function HomeScreen() {
const positionAnimatedValue = React.useRef(new Animated.Value(0)).current;
return (useMemo(() => (
-
+
-
+
-
+
-
-
+
-
+
), [colors]));
}
diff --git a/src/components/Screens/TransactionCreateScreen.tsx b/src/components/Screens/TransactionCreateScreen.tsx
index ed39b37..bae40de 100644
--- a/src/components/Screens/TransactionCreateScreen.tsx
+++ b/src/components/Screens/TransactionCreateScreen.tsx
@@ -2,6 +2,7 @@ import React from 'react';
import { ScreenType } from '../../types/screen';
import TransactionForm from '../Forms/TransactionForm';
+import ErrorWidget from '../UI/ErrorWidget';
export default function TransactionCreateScreen({ navigation, route }: ScreenType) {
const {
@@ -14,10 +15,13 @@ export default function TransactionCreateScreen({ navigation, route }: ScreenTyp
} = route;
return (
-
+ <>
+
+
+ >
);
}
diff --git a/src/components/Screens/TransactionsScreen.tsx b/src/components/Screens/TransactionsScreen.tsx
index 358aa1d..ee23040 100644
--- a/src/components/Screens/TransactionsScreen.tsx
+++ b/src/components/Screens/TransactionsScreen.tsx
@@ -6,17 +6,17 @@ import React, {
useState,
} from 'react';
import {
+ ActivityIndicator,
Alert,
RefreshControl,
} from 'react-native';
-import {
- Button,
- Skeleton,
-} from 'native-base';
import moment from 'moment';
import { SwipeListView } from 'react-native-swipe-list-view';
import {
- EvilIcons, Ionicons, MaterialCommunityIcons, MaterialIcons,
+ EvilIcons,
+ Ionicons,
+ MaterialCommunityIcons,
+ MaterialIcons,
} from '@expo/vector-icons';
import * as Haptics from 'expo-haptics';
import { useDispatch, useSelector } from 'react-redux';
@@ -35,6 +35,7 @@ import {
APressable, AStackFlex, AText, AView,
} from '../UI/ALibrary';
import AFilterButton from '../UI/ALibrary/AFilterButton';
+import AButton from '../UI/ALibrary/AButton';
const ITEM_HEIGHT = 90;
@@ -52,31 +53,20 @@ function ListFooterComponent({ onLoadMore, initLoading }) {
{(loading || initLoading) && (
-
-
-
-
-
-
+
+
)}
{(!initLoading && !loading && (page < totalPages)) && (
-
- }
- onPress={onLoadMore}
- >
- Load More
-
-
+
+
+
+ {translate('load_more')}
+
+
)}
), [
@@ -457,11 +447,8 @@ export default function TransactionsScreen({ navigation, route }: ScreenType) {
)}
- setType(selected)} navigation={navigation} />
+ setType(selected)} navigation={navigation} capitalize />
setCurrentCode(selected)} navigation={navigation} />
- {/*
- setCurrentCode(selected)} navigation={navigation} />
-*/}
)}
diff --git a/src/components/UI/ALibrary/AButton.tsx b/src/components/UI/ALibrary/AButton.tsx
index 546b996..4627ba6 100644
--- a/src/components/UI/ALibrary/AButton.tsx
+++ b/src/components/UI/ALibrary/AButton.tsx
@@ -1,44 +1,64 @@
import React from 'react';
-import { Pressable } from 'react-native';
+import { ActivityIndicator, Pressable } from 'react-native';
import { AStyle } from './types';
import { useThemeColors } from '../../../lib/common';
interface AButtonType {
+ type?: 'primary' | 'secondary' | 'danger' | 'success' | 'warning' | 'info' | 'light' | 'dark' | 'transparent'
style?: AStyle
disabled?: boolean
+ disabledTint?: boolean
children?: React.ReactNode
onPress: () => void
mx?: number
px?: number
+ loading?: boolean
+ testID?: string
}
export default function AButton({
+ type = 'info',
onPress,
mx = 0,
px = 0,
disabled = false,
+ disabledTint = false,
+ loading = false,
style = null,
children = null,
+ testID = null,
}: AButtonType) {
const { colors } = useThemeColors();
+ const backgroundColor = colors[type];
return (
({
- backgroundColor: pressed ? colors.filterBorderColor : colors.tileBackgroundColor,
+ opacity: disabled && disabledTint ? 0.3 : 1,
+ backgroundColor: pressed ? colors.filterBorderColor : backgroundColor,
borderRadius: 10,
marginBottom: 10,
flexDirection: 'row',
alignItems: 'center',
+ justifyContent: 'center',
height: 75,
marginHorizontal: mx,
paddingHorizontal: px,
+ shadowColor: '#000',
+ shadowOffset: {
+ width: 0,
+ height: 1,
+ },
+ shadowOpacity: 0.25,
+ shadowRadius: 2.84,
+ elevation: 2,
...style,
})}
>
- {children}
+ {loading ? : children}
);
}
diff --git a/src/components/UI/ALibrary/AFilterButton.tsx b/src/components/UI/ALibrary/AFilterButton.tsx
index 4d5f27c..6ddfd65 100644
--- a/src/components/UI/ALibrary/AFilterButton.tsx
+++ b/src/components/UI/ALibrary/AFilterButton.tsx
@@ -11,6 +11,7 @@ interface AFilterButtonType {
navigation: NavigationType;
selected: string;
selectFilter: (filter: string) => void;
+ capitalize?: boolean;
}
export default function AFilterButton({
@@ -18,6 +19,7 @@ export default function AFilterButton({
navigation,
filterType,
selectFilter,
+ capitalize = false,
}: AFilterButtonType) {
const { colors } = useThemeColors();
@@ -42,7 +44,7 @@ export default function AFilterButton({
marginHorizontal: 2,
}}
>
-
+
{selected || filterType}
diff --git a/src/components/UI/ALibrary/AFormView.tsx b/src/components/UI/ALibrary/AFormView.tsx
new file mode 100644
index 0000000..44293b4
--- /dev/null
+++ b/src/components/UI/ALibrary/AFormView.tsx
@@ -0,0 +1,27 @@
+import React from 'react';
+import { View } from 'react-native';
+import { AStyle } from './types';
+
+type AFormViewType = {
+ mx?: number
+ style?: AStyle
+ children?: React.ReactNode
+}
+
+export default function AFormView({
+ mx = 10,
+ style = null,
+ children = null,
+}: AFormViewType) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/src/components/UI/ALibrary/AIconButton.tsx b/src/components/UI/ALibrary/AIconButton.tsx
index 7aebff4..46cf08c 100644
--- a/src/components/UI/ALibrary/AIconButton.tsx
+++ b/src/components/UI/ALibrary/AIconButton.tsx
@@ -7,9 +7,11 @@ type AIconButtonType = {
px?: number
py?: number
borderWidth?: number
+ borderColor?: string
backgroundColor?: string
onPress: () => void,
style?: AStyle
+ testID?: string
}
export default function AIconButton({
@@ -18,8 +20,10 @@ export default function AIconButton({
px = 0,
py = 0,
borderWidth = 0,
+ borderColor = 'transparent',
backgroundColor = 'transparent',
style = null,
+ testID = null,
}: AIconButtonType) {
return (
({
width: 40,
height: 40,
borderWidth,
+ borderColor,
borderRadius: 10,
backgroundColor: pressed ? 'rgba(0,0,0,0.13)' : 'transparent',
paddingHorizontal: px,
diff --git a/src/components/UI/ALibrary/AInput.tsx b/src/components/UI/ALibrary/AInput.tsx
new file mode 100644
index 0000000..38ae4e2
--- /dev/null
+++ b/src/components/UI/ALibrary/AInput.tsx
@@ -0,0 +1,108 @@
+import React from 'react';
+import {
+ NativeSyntheticEvent,
+ TextInput,
+ TextInputFocusEventData,
+} from 'react-native';
+import { AStyle } from './types';
+import AStack from './AStack';
+import { useThemeColors } from '../../../lib/common';
+import AView from './AView';
+
+type AInputType = {
+ height?: number
+ bold?: boolean
+ type?: 'text' | 'password'
+ returnKeyType?: 'done' | 'go' | 'next' | 'search' | 'send' | 'default'
+ keyboardType?: 'default' | 'number-pad' | 'decimal-pad' | 'numeric' | 'email-address' | 'phone-pad' | 'url'
+ onSubmitEditing?: ({ nativeEvent: { text } }: { nativeEvent: { text: string; }; }) => void
+ placeholder?: string
+ value?: string
+ onChangeText?: (text: string) => void
+ onFocus?: (e: NativeSyntheticEvent) => void
+ onBlur?: (e: NativeSyntheticEvent) => void
+ InputLeftElement?: React.ReactNode
+ InputRightElement?: React.ReactNode
+ textAlign?: 'left' | 'center' | 'right'
+ fontSize?: number
+ numberOfLines?: number
+ style?: AStyle
+ testID?: string
+}
+
+export default function AInput({
+ testID = null,
+ height = 35,
+ bold = false,
+ type = 'text',
+ returnKeyType = 'default',
+ keyboardType = 'default',
+ onSubmitEditing,
+ placeholder = '',
+ value,
+ onChangeText,
+ onFocus,
+ onBlur,
+ InputLeftElement = null,
+ InputRightElement = null,
+ textAlign = 'left',
+ fontSize = 14,
+ numberOfLines = 1,
+ style = null,
+}: AInputType) {
+ const { colors } = useThemeColors();
+ const [isFocused, setIsFocused] = React.useState(false);
+ const handleFocus = (focusState: boolean, callback: () => void) => {
+ setIsFocused(focusState);
+ callback();
+ };
+
+ return (
+
+ {InputLeftElement || }
+ 1}
+ accessible
+ secureTextEntry={type === 'password'}
+ style={{
+ flex: 1,
+ height,
+ fontSize,
+ textAlign,
+ fontFamily: bold ? 'Montserrat-Bold' : 'Montserrat-Regular',
+ color: colors.text,
+ paddingVertical: 5,
+ ...style,
+ }}
+ cursorColor={colors.listBorderColor}
+ returnKeyType={returnKeyType}
+ keyboardType={keyboardType}
+ placeholderTextColor={colors.listBorderColor}
+ onChangeText={onChangeText}
+ numberOfLines={numberOfLines}
+ value={value}
+ placeholder={placeholder}
+ onSubmitEditing={onSubmitEditing}
+ onFocus={(e) => {
+ handleFocus(true, onFocus ? () => onFocus(e) : () => null);
+ }}
+ onBlur={(e) => {
+ handleFocus(false, onBlur ? () => onBlur(e) : () => null);
+ }}
+ />
+ {InputRightElement}
+
+ );
+}
diff --git a/src/components/UI/ALibrary/ALabel.tsx b/src/components/UI/ALibrary/ALabel.tsx
new file mode 100644
index 0000000..4725997
--- /dev/null
+++ b/src/components/UI/ALibrary/ALabel.tsx
@@ -0,0 +1,62 @@
+import React from 'react';
+import { Text } from 'react-native';
+import { useThemeColors } from '../../../lib/common';
+import { AStyle } from './types';
+
+type ALabelType = {
+ fontSize?: number
+ lineHeight?: number
+ maxWidth?: number | '100%' | '90%' | '80%' | '70%' | '60%' | '50%' | '40%' | '30%'
+ numberOfLines?: number
+ isRequired?: boolean
+ textAlign?: 'center' | 'left' | 'right'
+ underline?: boolean
+ onPress?: () => void
+ style?: AStyle
+ children: React.ReactNode
+ testID?: string
+}
+
+export default function ALabel({
+ children,
+ lineHeight,
+ maxWidth,
+ fontSize = 14,
+ numberOfLines,
+ isRequired = false,
+ textAlign = 'left',
+ underline = false,
+ onPress = null,
+ style = null,
+ testID = null,
+}: ALabelType) {
+ const { colors } = useThemeColors();
+
+ return (
+
+ {children}
+ {isRequired && (
+
+ {' '}
+ *
+
+ )}
+
+ );
+}
diff --git a/src/components/UI/ALibrary/APressable.tsx b/src/components/UI/ALibrary/APressable.tsx
index fbbdaf5..131033d 100644
--- a/src/components/UI/ALibrary/APressable.tsx
+++ b/src/components/UI/ALibrary/APressable.tsx
@@ -9,12 +9,14 @@ type APressableType = {
children?: React.ReactNode
onPress: () => void
onLongPress?: () => void
+ flexDirection?: 'row' | 'column'
}
export default function APressable({
onPress,
onLongPress,
disabled = false,
+ flexDirection = 'row',
style = null,
children = null,
}: APressableType) {
@@ -28,7 +30,7 @@ export default function APressable({
style={({ pressed }) => ({
backgroundColor: pressed ? colors.listPressed : 'transparent',
alignItems: 'center',
- flexDirection: 'row',
+ flexDirection,
...style,
})}
>
diff --git a/src/components/UI/ALibrary/AProgressBar.tsx b/src/components/UI/ALibrary/AProgressBar.tsx
new file mode 100644
index 0000000..fbdfbfb
--- /dev/null
+++ b/src/components/UI/ALibrary/AProgressBar.tsx
@@ -0,0 +1,42 @@
+import React from 'react';
+import { View } from 'react-native';
+
+import { AStyle } from './types';
+import { useThemeColors } from '../../../lib/common';
+
+type AProgressBarType = {
+ value: number
+ color?: string
+ style?: AStyle
+}
+
+export default function AProgressBar({
+ value,
+ color = 'black',
+ style = null,
+}: AProgressBarType) {
+ const { colors } = useThemeColors();
+
+ return (
+
+ 100 ? 100 : value}%`,
+ borderRadius: 5,
+ backgroundColor: color,
+ }}
+ />
+
+ );
+}
diff --git a/src/components/UI/ALibrary/AScrollView.tsx b/src/components/UI/ALibrary/AScrollView.tsx
index 72a96b4..1d641c3 100644
--- a/src/components/UI/ALibrary/AScrollView.tsx
+++ b/src/components/UI/ALibrary/AScrollView.tsx
@@ -1,25 +1,31 @@
-import React from 'react';
-import { ScrollView } from 'react-native';
+import React, { ReactElement } from 'react';
+import { RefreshControlProps, ScrollView } from 'react-native';
import { AStyle } from './types';
type AScrollViewType = {
bounces?: boolean
showsVerticalScrollIndicator?: boolean
+ horizontal?: boolean
style?: AStyle
+ refreshControl?: ReactElement
children?: React.ReactNode
}
export default function AScrollView({
bounces = true,
showsVerticalScrollIndicator = true,
+ horizontal = false,
style = null,
+ refreshControl = null,
children = null,
}: AScrollViewType) {
return (
{children}
diff --git a/src/components/UI/ALibrary/ASkeleton.tsx b/src/components/UI/ALibrary/ASkeleton.tsx
new file mode 100644
index 0000000..ae93252
--- /dev/null
+++ b/src/components/UI/ALibrary/ASkeleton.tsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import { View } from 'react-native';
+
+type ASkeletonType = {
+ loading?: boolean
+ children?: React.ReactNode
+}
+
+export default function ASkeleton({
+ loading = false,
+ children = null,
+}: ASkeletonType) {
+ return (
+
+ {children}
+
+
+ );
+}
diff --git a/src/components/UI/ALibrary/AText.tsx b/src/components/UI/ALibrary/AText.tsx
index 5324ba5..8557f8a 100644
--- a/src/components/UI/ALibrary/AText.tsx
+++ b/src/components/UI/ALibrary/AText.tsx
@@ -9,11 +9,13 @@ type ATextType = {
color?: string,
fontSize?: number
lineHeight?: number
- maxWidth?: number
+ maxWidth?: number | '100%' | '90%' | '80%' | '70%' | '60%' | '50%' | '40%' | '30%'
bold?: boolean
- fontFamily?: 'Montserrat_Bold' | 'Montserrat'
+ fontFamily?: 'Montserrat-Bold' | 'Montserrat-Regular'
numberOfLines?: number
+ textAlign?: 'center' | 'left' | 'right'
underline?: boolean
+ capitalize?: boolean
onPress?: () => void
style?: AStyle
children: React.ReactNode
@@ -27,9 +29,11 @@ export default function AText({
lineHeight,
maxWidth,
bold = false,
- fontFamily = 'Montserrat',
+ fontFamily = 'Montserrat-Regular',
numberOfLines,
+ textAlign = 'left',
underline = false,
+ capitalize = false,
onPress = null,
style = null,
children,
@@ -45,10 +49,12 @@ export default function AText({
lineHeight,
fontSize,
maxWidth,
- fontFamily: bold ? `${fontFamily}_Bold` : fontFamily,
+ textAlign,
+ fontFamily: bold ? 'Montserrat-Bold' : fontFamily,
paddingHorizontal: px,
paddingVertical: py,
textDecorationLine: underline ? 'underline' : 'none',
+ textTransform: capitalize ? 'capitalize' : 'none',
...style,
}}
>
diff --git a/src/components/UI/ALibrary/index.ts b/src/components/UI/ALibrary/index.ts
index 2f2c4bc..16ba042 100644
--- a/src/components/UI/ALibrary/index.ts
+++ b/src/components/UI/ALibrary/index.ts
@@ -1,4 +1,5 @@
export { default as ABlurView } from './ABlurView';
+export { default as AButton } from './AButton';
export { default as AIconButton } from './AIconButton';
export { default as AStackFlex } from './AStackFlex';
export { default as AStack } from './AStack';
@@ -6,3 +7,8 @@ export { default as AText } from './AText';
export { default as AView } from './AView';
export { default as APressable } from './APressable';
export { default as AScrollView } from './AScrollView';
+export { default as ASkeleton } from './ASkeleton';
+export { default as AProgressBar } from './AProgressBar';
+export { default as AInput } from './AInput';
+export { default as ALabel } from './ALabel';
+export { default as AFormView } from './AFormView';
diff --git a/src/components/UI/ALibrary/types.ts b/src/components/UI/ALibrary/types.ts
index 05747be..bb2c05b 100644
--- a/src/components/UI/ALibrary/types.ts
+++ b/src/components/UI/ALibrary/types.ts
@@ -2,8 +2,9 @@ import { FlexAlignType } from 'react-native';
export interface AStyle {
flex?: number
+ flexWrap?: 'wrap' | 'nowrap'
display?: 'flex' | 'none'
- height?: number
+ height?: number | '100%' | '90%' | '80%' | '70%' | '60%' | '50%'
width?: number | '100%' | '90%' | '80%' | '70%' | '60%' | '50%'
margin?: number
padding?: number
@@ -33,4 +34,11 @@ export interface AStyle {
alignItems?: FlexAlignType
justifyContent?: 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly'
flexDirection?: 'row' | 'column'
+ textAlign?: 'center' | 'left' | 'right'
+ maxWidth?: number | '100%' | '90%' | '80%' | '70%' | '60%' | '50%'
+ borderTopLeftRadius?: number
+ borderTopRightRadius?: number
+ borderBottomRightRadius?: number
+ borderBottomLeftRadius?: number
+ borderLeftWidth?: number
}
diff --git a/src/components/UI/ErrorWidget.tsx b/src/components/UI/ErrorWidget.tsx
index e16aebc..32551ec 100644
--- a/src/components/UI/ErrorWidget.tsx
+++ b/src/components/UI/ErrorWidget.tsx
@@ -1,47 +1,59 @@
-import React, { useEffect } from 'react';
+import React, { useEffect, useRef } from 'react';
import { useSelector } from 'react-redux';
-import { useToast } from 'native-base';
import { AxiosError } from 'axios';
-import { useNavigation, CommonActions } from '@react-navigation/native';
-import { View } from 'react-native';
+import { CommonActions, useNavigation } from '@react-navigation/native';
import { RootState } from '../../store';
-import ToastAlert from './ToastAlert';
+import ToastMessage from './ToastMessage';
import translate from '../../i18n/locale';
+import useToasts from './useToasts';
export default function ErrorWidget() {
- const toast = useToast();
- const { error } = useSelector((state: RootState) => state.loading.global);
+ const { showToast, toasts, removeToast } = useToasts();
+ const error = useSelector((state: RootState) => state.loading.models.configuration.error);
+ const success = useSelector((state: RootState) => state.loading.effects.transactions.upsertTransaction.success);
const navigation = useNavigation();
- const goToOauth = () => navigation.dispatch(
- CommonActions.reset({
- index: 0,
- routes: [
- { name: 'credentials' },
- ],
- }),
- );
+ const goToCredentials = async () => {
+ navigation.dispatch(
+ CommonActions.reset({
+ index: 0,
+ routes: [
+ { name: 'credentials' },
+ ],
+ }),
+ );
+ };
+ const isFirstRun = useRef(true);
useEffect(() => {
- if (error && (error as Error).message) {
- toast.show({
- render: ({ id }) => (
- toast.close(id)}
- title={translate('error_widget_title')}
- status="error"
- variant="solid"
- description={(error as Error).message}
- />
- ),
- });
- }
-
- if (error && (error as AxiosError).response?.status && (error as AxiosError).response?.status === 401) {
- goToOauth();
- }
- }, [error]);
-
- return ;
+ (async () => {
+ if (error && (error as Error).message && !isFirstRun.current) {
+ showToast(translate('error_widget_title'), (error as Error).message, 'error');
+ }
+
+ if (success && !isFirstRun.current) {
+ showToast(translate('transaction_form_success_title'), translate('transaction_form_success_description'), 'success');
+ }
+
+ if (error && (error as AxiosError).response?.status && (error as AxiosError).response?.status === 404 && !isFirstRun.current) {
+ goToCredentials();
+ }
+
+ if (isFirstRun.current) {
+ isFirstRun.current = false;
+ }
+ })();
+ }, [error, success]);
+
+ return toasts.map((toast) => (
+
+ ));
}
diff --git a/src/components/UI/Filters.tsx b/src/components/UI/Filters.tsx
index 7914665..29bbd17 100644
--- a/src/components/UI/Filters.tsx
+++ b/src/components/UI/Filters.tsx
@@ -47,7 +47,7 @@ export default function Filters() {
>
{range === period ? (
) : (
-
+
{`${period}M`}
)}
@@ -131,7 +131,7 @@ export default function Filters() {
{account.attributes.name}
diff --git a/src/components/UI/PrivacyScreen.tsx b/src/components/UI/PrivacyScreen.tsx
new file mode 100644
index 0000000..caedb46
--- /dev/null
+++ b/src/components/UI/PrivacyScreen.tsx
@@ -0,0 +1,53 @@
+import React, { useEffect, useRef, useState } from 'react';
+import {
+ AppState,
+ AppStateStatus,
+ Image,
+} from 'react-native';
+import { ABlurView, AText } from './ALibrary';
+
+function PrivacyScreen() {
+ const appState = useRef(AppState.currentState);
+ const [appStateVisible, setAppStateVisible] = useState(appState.current);
+
+ const _handleAppStateChange = (nextAppState: AppStateStatus) => {
+ appState.current = nextAppState;
+ setAppStateVisible(appState.current);
+ };
+
+ useEffect(() => {
+ const subscription = AppState.addEventListener('change', _handleAppStateChange);
+ return () => {
+ subscription.remove();
+ };
+ }, []);
+
+ // eslint-disable-next-line global-require
+ const img = require('../../images/icon-abacus-splash.png');
+
+ return appStateVisible !== 'active' && (
+
+
+ Abacus
+
+ );
+}
+
+export default PrivacyScreen;
diff --git a/src/components/UI/ToastAlert.tsx b/src/components/UI/ToastAlert.tsx
deleted file mode 100644
index 8a0111b..0000000
--- a/src/components/UI/ToastAlert.tsx
+++ /dev/null
@@ -1,46 +0,0 @@
-import React from 'react';
-import {
- Text,
- IconButton,
- HStack,
- Alert,
- VStack,
- CloseIcon,
-} from 'native-base';
-
-export default function ToastAlert({
- status,
- variant,
- title,
- description,
- onClose,
- onPress = () => {},
-}) {
- return (
-
-
-
-
-
-
- {title}
-
-
-
- }
- _icon={{
- color: 'lightText',
- }}
- />
-
-
- {description}
-
-
-
- );
-}
diff --git a/src/components/UI/ToastMessage.tsx b/src/components/UI/ToastMessage.tsx
new file mode 100644
index 0000000..92444bf
--- /dev/null
+++ b/src/components/UI/ToastMessage.tsx
@@ -0,0 +1,98 @@
+import React, { useEffect } from 'react';
+import Animated, { FadeInDown, FadeOutDown } from 'react-native-reanimated';
+import { Ionicons } from '@expo/vector-icons';
+import { CommonActions, useNavigation } from '@react-navigation/native';
+import { AStack, AText } from './ALibrary';
+import { useThemeColors } from '../../lib/common';
+
+type ToastMessagePropType = {
+ id: string
+ type: 'success' | 'error' | 'info' | 'warning'
+ title: string
+ description: string
+ onUnmount: (id: string) => void
+}
+
+function ToastMessage({
+ id,
+ type,
+ title,
+ description,
+ onUnmount,
+}: ToastMessagePropType) {
+ const { colors } = useThemeColors();
+ const navigation = useNavigation();
+
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ onUnmount(id);
+ }, 4000); // Toast will automatically unmount after 4 seconds
+
+ return () => clearTimeout(timer);
+ }, [id, onUnmount]);
+
+ const TOAST_TYPE = {
+ success: {
+ backgroundColor: colors.green,
+ icon: 'checkmark-circle',
+ },
+ error: {
+ backgroundColor: colors.red,
+ icon: 'alert-circle',
+ },
+ };
+
+ const { backgroundColor } = TOAST_TYPE[type];
+ const { icon } = TOAST_TYPE[type];
+
+ const goToTransactions = async () => {
+ navigation.dispatch(
+ CommonActions.navigate('Transactions', {
+ screen: 'TransactionsScreen',
+ merge: true,
+ params: {
+ forceRefresh: true,
+ },
+ }),
+ );
+ };
+
+ return (
+
+
+
+ {title}
+ {description}
+
+ onUnmount(id)} />
+
+ );
+}
+
+export default ToastMessage;
diff --git a/src/components/UI/useToasts.ts b/src/components/UI/useToasts.ts
new file mode 100644
index 0000000..d5fdab4
--- /dev/null
+++ b/src/components/UI/useToasts.ts
@@ -0,0 +1,21 @@
+import { useState } from 'react';
+
+export default () => {
+ const [toasts, setToasts] = useState([]);
+
+ const showToast = (title: string, description: string, type: 'success' | 'error') => {
+ const newToast = {
+ id: Date.now(),
+ title,
+ type,
+ description,
+ };
+ setToasts((prevToasts) => [...prevToasts, newToast]);
+ };
+
+ const removeToast = (id: string) => {
+ setToasts((prevToasts) => prevToasts.filter((toast) => toast.id !== id));
+ };
+
+ return { showToast, toasts, removeToast };
+};
diff --git a/src/constants/colors.ts b/src/constants/colors.ts
index 1271125..e2042bf 100644
--- a/src/constants/colors.ts
+++ b/src/constants/colors.ts
@@ -22,6 +22,7 @@ export default {
warmGray100: '#3b3b3b',
blurAndroidHeader: 'rgba(40,40,40,0.16)',
brandNeutralFix: '#e3e3e3',
+ greyLight: '#6c6c6c',
dark: {
text: 'white',
textOpposite: 'black',
@@ -31,9 +32,8 @@ export default {
blurBackground: 'rgba(29,31,33,0.77)',
tabInactiveDarkLight: 'rgb(190,190,190)',
listBorderColor: 'rgb(56,56,56)',
- listPressed: 'muted.800',
+ listPressed: '#606060',
filterBorderColor: '#606060',
-
brandNeutral: '#e3e3e3',
brandNeutralLight: '#3d3d3d',
brandDanger: '#e3e3e3',
@@ -45,8 +45,9 @@ export default {
brandSuccessGlow: '#63d90f',
brandSuccess: '#e3e3e3',
brandLight: 'rgba(248,248,248,0)',
-
warmGray200: 'rgba(141,141,141,0.4)',
+ primary: '#FF5533',
+ info: 'rgb(29,31,33)',
},
light: {
text: 'black',
@@ -57,9 +58,8 @@ export default {
blurBackground: 'rgba(192,192,192,0.69)',
tabInactiveDarkLight: 'rgba(103,103,103,0.61)',
listBorderColor: '#dadada',
- listPressed: 'muted.300',
+ listPressed: '#606060',
filterBorderColor: '#606060',
-
brandNeutral: '#3d3d3d',
brandNeutralLight: '#e3e3e3',
brandDanger: '#ff2d2d',
@@ -71,7 +71,8 @@ export default {
brandSuccessGlow: '#31af07',
brandSuccess: '#15803d',
brandLight: '#f8f8f8',
-
warmGray200: 'rgba(238,238,238,0.61)',
+ primary: '#FF5533',
+ info: '#ececec',
},
};
diff --git a/src/constants/theme.ts b/src/constants/theme.ts
deleted file mode 100644
index 5c2b620..0000000
--- a/src/constants/theme.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-import colors from './colors';
-
-export default {
- config: {
- useSystemColorMode: true,
- },
- colors: {
- primary: {
- 50: colors.brandStyleSecond,
- 100: colors.brandStyleSecond,
- 200: colors.brandStyleSecond,
- 300: colors.brandStyleSecond,
- 400: colors.brandStyleSecond,
- 500: colors.brandStyle,
- 600: colors.brandStyle,
- 700: colors.brandStyle,
- 800: colors.brandStyle,
- 900: colors.brandStyle,
- },
- chart0: {
- 50: colors.brandStyle0,
- 100: colors.brandStyle0,
- 200: colors.brandStyle0,
- 300: colors.brandStyle0,
- 400: colors.brandStyle0,
- 500: colors.brandStyle0,
- 600: colors.brandStyle0,
- 700: colors.brandStyle0,
- 800: colors.brandStyle0,
- 900: colors.brandStyle0,
- },
- chart1: {
- 50: colors.brandStyle1,
- 100: colors.brandStyle1,
- 200: colors.brandStyle1,
- 300: colors.brandStyle1,
- 400: colors.brandStyle1,
- 500: colors.brandStyle1,
- 600: colors.brandStyle1,
- 700: colors.brandStyle1,
- 800: colors.brandStyle1,
- 900: colors.brandStyle1,
- },
- chart2: {
- 50: colors.brandStyle2,
- 100: colors.brandStyle2,
- 200: colors.brandStyle2,
- 300: colors.brandStyle2,
- 400: colors.brandStyle2,
- 500: colors.brandStyle2,
- 600: colors.brandStyle2,
- 700: colors.brandStyle2,
- 800: colors.brandStyle2,
- 900: colors.brandStyle2,
- },
- chart3: {
- 50: colors.brandStyle3,
- 100: colors.brandStyle3,
- 200: colors.brandStyle3,
- 300: colors.brandStyle3,
- 400: colors.brandStyle3,
- 500: colors.brandStyle3,
- 600: colors.brandStyle3,
- 700: colors.brandStyle3,
- 800: colors.brandStyle3,
- 900: colors.brandStyle3,
- },
- chart4: {
- 50: colors.brandStyle4,
- 100: colors.brandStyle4,
- 200: colors.brandStyle4,
- 300: colors.brandStyle4,
- 400: colors.brandStyle4,
- 500: colors.brandStyle4,
- 600: colors.brandStyle4,
- 700: colors.brandStyle4,
- 800: colors.brandStyle4,
- 900: colors.brandStyle4,
- },
- },
- fontConfig: {
- Montserrat: {
- 100: {
- normal: 'Montserrat_Light',
- },
- 200: {
- normal: 'Montserrat_Light',
- },
- 300: {
- normal: 'Montserrat',
- },
- 400: {
- normal: 'Montserrat',
- },
- 500: {
- normal: 'Montserrat_Bold',
- },
- 600: {
- normal: 'Montserrat_Bold',
- },
- },
- },
- fonts: {
- heading: 'Montserrat',
- body: 'Montserrat',
- mono: 'Montserrat',
- },
- components: {
- Alert: {
- baseStyle: {
- m: '3',
- shadow: 2,
- },
- },
- IconButton: {
- defaultProps: {
- size: 'lg',
- variant: 'solid',
- },
- baseStyle: {
- width: 10,
- height: 10,
- borderRadius: 10,
- _icon: {
- size: 'lg',
- },
- _pressed: {
- style: {
- textColor: 'white',
- transform: [{
- scale: 0.95,
- }],
- opacity: 0.95,
- },
- },
- },
- },
- Button: {
- baseStyle: {
- borderRadius: 10,
- },
- },
- Input: {
- baseStyle: {
- borderRadius: 10,
- height: 10,
- },
- },
- },
-};
diff --git a/src/i18n/locale/translations/en-US.ts b/src/i18n/locale/translations/en-US.ts
index a581b13..39632da 100644
--- a/src/i18n/locale/translations/en-US.ts
+++ b/src/i18n/locale/translations/en-US.ts
@@ -141,5 +141,6 @@ export default {
go_to_credentials: 'Go to Credentials',
configuration_logout_alert_title: 'Logout',
+ load_more: 'Load more',
};
diff --git a/src/index.tsx b/src/index.tsx
index 8a2f947..25d281a 100755
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -1,28 +1,11 @@
-import React, {
- useEffect,
- useState,
- useRef,
-} from 'react';
+import React, { useEffect } from 'react';
import { Provider } from 'react-redux';
import { PersistGate } from 'redux-persist/es/integration/react';
-import {
- AppState,
- LogBox,
- Image,
-} from 'react-native';
-import {
- AlertDialog,
- Button,
- extendTheme,
- NativeBaseProvider,
- Text,
-} from 'native-base';
+import { Alert, LogBox } from 'react-native';
import { StatusBar } from 'expo-status-bar';
import * as Device from 'expo-device';
-import AnimatedSplash from 'react-native-animated-splash-screen';
-import { LinearGradient } from 'expo-linear-gradient';
import * as Updates from 'expo-updates';
-import { useFonts, loadAsync } from 'expo-font';
+import { loadAsync } from 'expo-font';
import {
AntDesign,
@@ -32,41 +15,15 @@ import {
} from '@expo/vector-icons';
import { store, persistor } from './store';
-import themeConstants from './constants/theme';
import Routes from './routes';
import Loading from './components/UI/Loading';
import translate from './i18n/locale';
-import { useThemeColors } from './lib/common';
-import ABlurView from './components/UI/ALibrary/ABlurView';
-
-const config = {
- dependencies: {
- 'linear-gradient': LinearGradient,
- },
-};
-
-const theme = extendTheme(themeConstants);
-
-const cacheFonts = (fonts) => fonts.map((font) => loadAsync(font));
export default function App() {
LogBox.ignoreAllLogs(true);
- const { colors } = useThemeColors();
- const appState = useRef(AppState.currentState);
- const [appStateVisible, setAppStateVisible] = useState(appState.current);
-
- const OTARef = React.createRef();
- const [OTAOpen, setOTAOpen] = useState(false);
- const [fontsLoaded] = useFonts({
- /* eslint-disable global-require */
- Montserrat: require('./fonts/Montserrat-Regular.ttf'),
- Montserrat_Light: require('./fonts/Montserrat-Light.ttf'),
- Montserrat_Bold: require('./fonts/Montserrat-Bold.ttf'),
- /* eslint-enable global-require */
- });
-
const cache = async () => {
+ const cacheFonts = (fonts: { [p: string]: string }[]) => fonts.map((font) => loadAsync(font));
const fontAssets = cacheFonts([
AntDesign.font,
Ionicons.font,
@@ -86,13 +43,27 @@ export default function App() {
}
};
+ const showOTAAlert = () => Alert.alert(
+ translate('layout_new_update_header'),
+ translate('layout_new_update_body_text'),
+ [
+ {
+ text: translate('layout_new_update_update_button'),
+ onPress: () => onOTAUpdate(),
+ },
+ {
+ text: translate('cancel'),
+ },
+ ],
+ );
+
const onCheckOTA = async () => {
try {
if (Device.isDevice && !__DEV__) {
const update = await Updates.checkForUpdateAsync();
if (update.isAvailable) {
- setOTAOpen(true);
+ showOTAAlert();
}
}
} catch (e) {
@@ -100,91 +71,21 @@ export default function App() {
}
};
- const _handleAppStateChange = (nextAppState) => {
- appState.current = nextAppState;
- setAppStateVisible(appState.current);
- };
-
useEffect(() => {
(async () => {
await Promise.all([cache(), onCheckOTA()]);
})();
- const subscription = AppState.addEventListener('change', _handleAppStateChange);
- return () => {
- subscription.remove();
- };
}, []);
- /* eslint-disable-next-line @typescript-eslint/no-var-requires,global-require */
- const abacusIcon = require('./images/icon-abacus-splash.png');
-
return (
-
-
+
+ }
+ persistor={persistor}
+ >
-
- }
- persistor={persistor}
- >
- {fontsLoaded && (
- <>
-
- {appStateVisible !== 'active' && (
-
-
- Abacus
-
- )}
- >
- )}
-
-
-
- setOTAOpen(false)}>
-
-
- {translate('layout_new_update_header')}
-
- {translate('layout_new_update_body_text')}
-
-
-
-
-
-
-
-
-
-
-
+
+
+
);
}
diff --git a/src/models/configuration.ts b/src/models/configuration.ts
index c9fc44f..4ab4552 100644
--- a/src/models/configuration.ts
+++ b/src/models/configuration.ts
@@ -8,6 +8,7 @@ type ConfigurationStateType = {
backendURL: string
hideBalance: boolean
displayAllAccounts: boolean
+ displayForeignCurrency: boolean
useBiometricAuth: boolean
apiVersion: string
serverVersion: string
@@ -42,6 +43,7 @@ const INITIAL_STATE = {
backendURL: '',
hideBalance: false,
displayAllAccounts: false,
+ displayForeignCurrency: false,
useBiometricAuth: false,
apiVersion: '',
serverVersion: '',
@@ -88,6 +90,13 @@ export default createModel()({
};
},
+ setDisplayForeignCurrency(state, displayForeignCurrency: boolean): ConfigurationStateType {
+ return {
+ ...state,
+ displayForeignCurrency,
+ };
+ },
+
resetState() {
return INITIAL_STATE;
},
diff --git a/src/models/currencies.ts b/src/models/currencies.ts
index 7055b28..36a741c 100644
--- a/src/models/currencies.ts
+++ b/src/models/currencies.ts
@@ -1,7 +1,7 @@
import { createModel } from '@rematch/core';
import { RootModel } from './index';
-type CurrencyType = {
+export interface CurrencyType {
id: string
type: string
attributes: {
@@ -13,7 +13,7 @@ type CurrencyType = {
decimalPlaces: number
createdAt: string
updatedAt: string
- },
+ }
}
type CurrencyStateType = {
diff --git a/src/models/firefly.ts b/src/models/firefly.ts
index 2871ec7..00e2483 100644
--- a/src/models/firefly.ts
+++ b/src/models/firefly.ts
@@ -113,6 +113,8 @@ export default createModel()({
const {
netWorth = state.netWorth,
balance = state.balance,
+ spent = state.spent,
+ earned = state.earned,
accounts = state.accounts,
earnedChart = state.earnedChart,
spentChart = state.spentChart,
@@ -122,6 +124,8 @@ export default createModel()({
...state,
netWorth,
balance,
+ spent,
+ earned,
accounts,
earnedChart,
spentChart,
@@ -236,6 +240,8 @@ export default createModel()({
const { data: summary } = await dispatch.configuration.apiFetch({ url: `/api/v1/summary/basic?${params.toString()}` });
const netWorth = [];
const balance = [];
+ const earned = [];
+ const spent = [];
Object.keys(summary).forEach((key) => {
if (key.includes('net-worth-in')) {
netWorth.push(summary[key]);
@@ -243,11 +249,19 @@ export default createModel()({
if (key.includes('balance-in')) {
balance.push(summary[key]);
}
+ if (key.includes('earned-in')) {
+ earned.push(summary[key]);
+ }
+ if (key.includes('spent-in')) {
+ spent.push(summary[key]);
+ }
});
dispatch.firefly.setData({
netWorth,
balance,
+ earned,
+ spent,
});
}
},
diff --git a/src/models/transactions.ts b/src/models/transactions.ts
index fafeab2..2db72c5 100644
--- a/src/models/transactions.ts
+++ b/src/models/transactions.ts
@@ -44,8 +44,6 @@ export type TransactionStateType = {
},
page: number
totalPages: number
- error: string
- success: boolean
}
export type ErrorStateType = {
@@ -108,8 +106,6 @@ const INITIAL_STATE = {
page: 1,
totalPages: 1,
transactionPayload: null,
- error: '',
- success: false,
} as TransactionStateType;
export default createModel()({
@@ -220,26 +216,6 @@ export default createModel()({
},
};
},
- setErrorStatus(state, error): TransactionStateType {
- return {
- ...state,
- error,
- success: false,
- };
- },
- setSuccessStatus(state): TransactionStateType {
- return {
- ...state,
- success: true,
- };
- },
- resetStatus(state): TransactionStateType {
- return {
- ...state,
- error: '',
- success: false,
- };
- },
resetState() {
return INITIAL_STATE;
},
@@ -256,9 +232,11 @@ export default createModel()({
} = payload;
const currentPage = 1;
- const today = new Date().toISOString().split('T')[0];
+ const todayInOneMonth = new Date();
+ todayInOneMonth.setMonth(new Date().getMonth() + 1);
+ const inOneMonth = todayInOneMonth.toISOString().split('T')[0];
let search = searchQuery || ' ';
- search += (end && start) ? ` date_before:${end} date_after:${start}` : ` date_before:${today}`;
+ search += (end && start) ? ` date_after:${start} date_before:${end}` : ` date_before:${inOneMonth}`;
search += (currentCode) ? ` currency_is:${currentCode}` : '';
search += (type) ? ` type:${type}` : '';
@@ -296,9 +274,11 @@ export default createModel()({
const currentPage = (page < totalPages) ? page + 1 : 1;
if (page < totalPages) {
- const today = new Date().toISOString().split('T')[0];
+ const todayInOneMonth = new Date();
+ todayInOneMonth.setMonth(new Date().getMonth() + 1);
+ const inOneMonth = todayInOneMonth.toISOString().split('T')[0];
let search = searchQuery || ' ';
- search += (end && start) ? ` date_before:${end} date_after:${start}` : ` date_before:${today}`;
+ search += (end && start) ? ` date_after:${start} date_before:${end}` : ` date_before:${inOneMonth}`;
search += (currentCode) ? ` currency_is:${currentCode}` : '';
search += (type) ? ` type:${type}` : '';
diff --git a/src/routes/index.tsx b/src/routes/index.tsx
index 37cb84e..8d9b829 100644
--- a/src/routes/index.tsx
+++ b/src/routes/index.tsx
@@ -1,7 +1,9 @@
import React from 'react';
import {
+ DefaultTheme,
+ CommonActions,
+ useNavigation,
NavigationContainer,
- DefaultTheme, useNavigation, CommonActions,
} from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import {
@@ -9,10 +11,12 @@ import {
createBottomTabNavigator,
} from '@react-navigation/bottom-tabs';
import {
- AntDesign, Foundation, Ionicons,
+ AntDesign,
+ Foundation,
} from '@expo/vector-icons';
-import { Box, IconButton } from 'native-base';
-import { StyleSheet, Platform, View } from 'react-native';
+import {
+ StyleSheet, Platform, View, Pressable,
+} from 'react-native';
import translate from '../i18n/locale';
import { useThemeColors } from '../lib/common';
@@ -32,8 +36,13 @@ import CredentialsScreen from '../components/Screens/CredentialsScreen';
// UI components
import ABlurView from '../components/UI/ALibrary/ABlurView';
import NavigationHeader from '../components/UI/NavigationHeader';
+import {
+ AIconButton,
+ AStack,
+ AText,
+} from '../components/UI/ALibrary';
import ErrorWidget from '../components/UI/ErrorWidget';
-import { APressable } from '../components/UI/ALibrary';
+import PrivacyScreen from '../components/UI/PrivacyScreen';
const Stack = createNativeStackNavigator();
const TransactionStack = createNativeStackNavigator();
@@ -59,11 +68,6 @@ const styles = StyleSheet.create({
right: 0,
height: 0,
},
- container: {
- position: 'relative',
- width: 45,
- alignItems: 'center',
- },
background: {
position: 'absolute',
top: 0,
@@ -72,30 +76,21 @@ const styles = StyleSheet.create({
function TabBarPrimaryButton() {
const navigation = useNavigation();
+ const { colors } = useThemeColors();
return (
-
-
+ }
onPress={() => navigation.dispatch(
CommonActions.navigate({
name: 'TransactionCreateScreen',
}),
)}
- _pressed={{
- style: {
- top: -5,
- },
- }}
- style={{
- top: -5,
- }}
- testID="navigation_create_transaction"
/>
-
+
);
}
@@ -106,22 +101,20 @@ function TabBarComponent({
insets,
}) {
return (
- <>
-
-
-
+
+
- >
+
);
}
@@ -166,13 +159,12 @@ function TabBarConfigurationScreenIcon({ color }) {
}
export function HeaderClose() {
- const { colors } = useThemeColors();
const navigation = useNavigation();
return (
-
-
-
+
+ {translate('cancel')}
+
);
}
@@ -196,10 +188,10 @@ function TransactionsStack() {
backgroundColor: colors.tileBackgroundColor,
},
headerTitleStyle: {
- fontFamily: 'Montserrat_Bold',
+ fontFamily: 'Montserrat-Bold',
},
headerLargeTitleStyle: {
- fontFamily: 'Montserrat_Bold',
+ fontFamily: 'Montserrat-Bold',
},
}}
/>
@@ -212,7 +204,7 @@ function TransactionsStack() {
headerBackTitleVisible: true,
headerBackTitle: translate('router_back_button'),
headerBackTitleStyle: {
- fontFamily: 'Montserrat_Bold',
+ fontFamily: 'Montserrat-Bold',
},
headerTransparent: false,
headerTintColor: colors.text,
@@ -234,79 +226,82 @@ function Home() {
const { colors } = useThemeColors();
return (
- ({
- tabBarInactiveBackgroundColor: colors.tabBackgroundColor,
- tabBarActiveBackgroundColor: colors.tabBackgroundColor,
- tabBarActiveTintColor: colors.brandStyle,
- tabBarInactiveTintColor: colors.tabInactiveDarkLight,
- tabBarHideOnKeyboard: true,
- headerShown: false,
- tabBarShowLabel: true,
- tabBarLazyLoad: true,
- tabBarStyle: {
- backgroundColor: Platform.select({ ios: 'transparent', android: colors.tileBackgroundColor }),
- borderTopWidth: 0,
- marginTop: 10,
- elevation: 0,
- },
- tabBarLabelStyle: {
- fontSize: 10,
- fontFamily: 'Montserrat',
- paddingBottom: 10,
- },
- })}
- >
- ,
- headerTransparent: true,
- tabBarIcon: TabBarHomeScreenIcon,
- tabBarTestID: 'navigation_home_tab',
- }}
- />
- ,
- headerTransparent: true,
- tabBarIcon: TabBarChartScreenIcon,
- tabBarTestID: 'navigation_chart_tab',
- }}
- />
-
-
-
-
+ <>
+ ({
+ tabBarInactiveBackgroundColor: colors.tabBackgroundColor,
+ tabBarActiveBackgroundColor: colors.tabBackgroundColor,
+ tabBarActiveTintColor: colors.brandStyle,
+ tabBarInactiveTintColor: colors.tabInactiveDarkLight,
+ tabBarHideOnKeyboard: true,
+ headerShown: false,
+ tabBarShowLabel: true,
+ tabBarLazyLoad: true,
+ tabBarStyle: {
+ backgroundColor: Platform.select({ ios: 'transparent', android: colors.tileBackgroundColor }),
+ borderTopWidth: 0,
+ marginTop: 10,
+ elevation: 0,
+ },
+ tabBarLabelStyle: {
+ fontSize: 10,
+ fontFamily: 'Montserrat-Regular',
+ paddingBottom: 10,
+ },
+ })}
+ >
+ ,
+ headerTransparent: true,
+ tabBarIcon: TabBarHomeScreenIcon,
+ tabBarTestID: 'navigation_home_tab',
+ }}
+ />
+ ,
+ headerTransparent: true,
+ tabBarIcon: TabBarChartScreenIcon,
+ tabBarTestID: 'navigation_chart_tab',
+ }}
+ />
+
+
+
+
+
+ >
);
}
@@ -349,10 +344,11 @@ export default function Index() {
headerShown: true,
headerBackVisible: false,
headerTitle: translate('transaction_screen_title'),
- headerRight: HeaderClose,
+ headerLeft: HeaderClose,
+ headerTitleAlign: 'center',
headerShadowVisible: true,
headerTitleStyle: {
- fontFamily: 'Montserrat_Bold',
+ fontFamily: 'Montserrat-Bold',
},
headerTintColor: colors.text,
headerStyle: {
@@ -367,10 +363,11 @@ export default function Index() {
headerShown: true,
headerBackVisible: false,
headerTitle: 'Filters',
- headerRight: HeaderClose,
+ headerTitleAlign: 'center',
+ headerLeft: HeaderClose,
headerShadowVisible: true,
headerTitleStyle: {
- fontFamily: 'Montserrat_Bold',
+ fontFamily: 'Montserrat-Bold',
},
headerTintColor: colors.text,
headerStyle: {
@@ -384,15 +381,15 @@ export default function Index() {
options={{
headerShown: true,
headerBackVisible: false,
- headerTitle: '',
- headerRight: HeaderClose,
+ headerTitleAlign: 'center',
+ headerLeft: HeaderClose,
headerShadowVisible: true,
headerTitleStyle: {
- fontFamily: 'Montserrat_Bold',
+ fontFamily: 'Montserrat-Bold',
},
headerTintColor: colors.text,
headerStyle: {
- backgroundColor: colors.backgroundColor,
+ backgroundColor: colors.tileBackgroundColor,
},
}}
/>