diff --git a/.eslintrc.json b/.eslintrc.json index c4cefc6..a10354b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -25,7 +25,7 @@ } ], "linebreak-style": ["error", "unix"], - "quotes": ["error", "single"], + "quotes": ["error", "double"], "semi": ["error", "always"], "no-multiple-empty-lines": ["error", { "max": 1 }], "no-trailing-spaces": "error", diff --git a/.prettierrc b/.prettierrc index 0a08a66..40b12b0 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,6 +1,6 @@ { "printWidth": 100, - "singleQuote": true, + "singleQuote": false, "tabWidth": 2, "trailingComma": "all", "arrowParens": "avoid", diff --git a/App.tsx b/App.tsx index 4badc52..1356964 100644 --- a/App.tsx +++ b/App.tsx @@ -1,26 +1,26 @@ -import './src/translate/i18n'; -import 'react-native-reanimated'; -import 'react-native-gesture-handler'; +import "./src/application/settings/initializeAppInternationalization"; +import "react-native-reanimated"; +import "react-native-gesture-handler"; -import { DarkTheme, NavigationContainer } from '@react-navigation/native'; -import { useFonts } from 'expo-font'; -import * as ScreenOrientation from 'expo-screen-orientation'; -import * as SplashScreen from 'expo-splash-screen'; -import { StatusBar } from 'expo-status-bar'; -import * as React from 'react'; -import { View } from 'react-native'; -import { GestureHandlerRootView } from 'react-native-gesture-handler'; +import { DarkTheme, NavigationContainer } from "@react-navigation/native"; +import { useFonts } from "expo-font"; +import { StatusBar } from "expo-status-bar"; +import * as React from "react"; +import { View } from "react-native"; +import { GestureHandlerRootView } from "react-native-gesture-handler"; -import { AlertModal } from '@/components/AlertModal'; -import { initializeAppSettings } from '@/functions/initializeAppSettings'; -import { colors } from '@/helpers/themes'; -import { RootStack } from '@/routes/RootStack'; +import { initializeAppSettings } from "~/application/settings/initializeAppSettings"; +import { orientationLock } from "~/application/settings/orientationLock"; +import { splashScreen } from "~/application/settings/splashHide"; +import { AlertModal } from "~/presentation/components/AlertModal"; +import { RootStack } from "~/presentation/routes/RootStack"; +import { colors } from "~/presentation/settings/themes"; export default function App() { const [fontsLoaded] = useFonts({ - 'Figtree-Regular': require('./assets/fonts/Figtree-Regular.ttf'), - 'Figtree-Medium': require('./assets/fonts/Figtree-Medium.ttf'), - 'Figtree-Bold': require('./assets/fonts/Figtree-Bold.ttf'), + "Figtree-Regular": require("./assets/fonts/Figtree-Regular.ttf"), + "Figtree-Medium": require("./assets/fonts/Figtree-Medium.ttf"), + "Figtree-Bold": require("./assets/fonts/Figtree-Bold.ttf"), }); React.useEffect(() => { @@ -29,8 +29,8 @@ export default function App() { const onLayoutRootView = React.useCallback(async () => { if (fontsLoaded) { - await ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT); - await SplashScreen.hideAsync(); + await orientationLock(); + await splashScreen().hide(); } }, [fontsLoaded]); diff --git a/README.md b/README.md index 50378fc..e6a8698 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ - :robot: [Available on the Play Store](https://play.google.com/store/apps/details?id=com.cyberkaidev.walletyou) - :art: [Figma](https://www.figma.com/file/blAHuULYf6EKSGSCJSn4VC/Wallet-you?type=design&t=JjtfPpvcyhgvYuu8-1) - :rocket: [API](https://github.com/cyberkaidev/wallet-you-api) -- :bird: [Follow us on Twitter](https://twitter.com/cyberkaidev) ### Requirements diff --git a/__test__/setup.ts b/__test__/setup.ts index c8fa915..b4ce305 100644 --- a/__test__/setup.ts +++ b/__test__/setup.ts @@ -1,37 +1,37 @@ -import i18n from 'i18next'; -import { initReactI18next } from 'react-i18next'; -import mockSafeAreaContext from 'react-native-safe-area-context/jest/mock'; +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import mockSafeAreaContext from "react-native-safe-area-context/jest/mock"; -import DE_CH from '../src/translate/locales/de-ch.json'; -import EN_US from '../src/translate/locales/en-us.json'; -import ES_AR from '../src/translate/locales/es-ar.json'; -import PT_BR from '../src/translate/locales/pt-br.json'; +import DE_CH from "../src/data/jsons/de-ch.json"; +import EN_US from "../src/data/jsons/en-us.json"; +import ES_AR from "../src/data/jsons/es-ar.json"; +import PT_BR from "../src/data/jsons/pt-br.json"; -jest.mock('react-native-safe-area-context', () => mockSafeAreaContext); +jest.mock("react-native-safe-area-context", () => mockSafeAreaContext); -jest.mock('react-native-reanimated', () => require('react-native-reanimated/mock')); +jest.mock("react-native-reanimated", () => require("react-native-reanimated/mock")); -jest.mock('@/hooks/useFormatCurrency', () => { +jest.mock("~/application/hooks/useFormatCurrency", () => { return { - useFormatCurrency: () => '$100.00', + useFormatCurrency: () => "$100.00", }; }); -jest.mock('@/hooks/useFormatDate', () => { +jest.mock("~/application/hooks/useFormatDate", () => { return { useFormatDate: () => ({ - date: '12/12/2023', - time: '12:00 PM', - dateAndTime: '12/12/2023 12:00 PM', + date: "12/12/2023", + time: "12:00 PM", + dateAndTime: "12/12/2023 12:00 PM", }), }; }); -jest.mock('@/stores/useBitcoinHistoricalPrice', () => { +jest.mock("~/application/stores/usePriceHistoryBitcoin", () => { return { - useBitcoinHistoricalPrice: () => ({ + usePriceHistoryBitcoin: () => ({ fetchBitcoinHistoricalPrice: jest.fn(), - status: 'success', + status: "success", data: [ { timestamp: 1625945400000, @@ -50,47 +50,47 @@ jest.mock('@/stores/useBitcoinHistoricalPrice', () => { }; }); -jest.mock('@/stores/useUserData', () => { +jest.mock("~/application/stores/useUser", () => { return { - useUserData: () => ({ + useUser: () => ({ cleanUserData: jest.fn(), data: [ { - chain: 'Bitcoin Main', + chain: "Bitcoin Main", blockNumber: 12345, - hash: '00000', - transactionType: 'incoming', + hash: "00000", + transactionType: "incoming", transactionIndex: 12345, - tokenAddress: '010203', - tokenId: '0x00000', - amount: '1', + tokenAddress: "010203", + tokenId: "0x00000", + amount: "1", timestamp: 1625946300000, - address: '010203040506070809', + address: "010203040506070809", }, ], - status: 'success', + status: "success", }), }; }); -jest.mock('@/stores/useAppSettings', () => { +jest.mock("~/application/stores/useAppSettings", () => { return { useAppSettings: Object.assign( () => { - return { currency: 'usd' }; + return { currency: "usd" }; }, { getState: () => { - return { currency: 'usd' }; + return { currency: "usd" }; }, }, ), }; }); -jest.mock('@/stores/useBitcoinDataPrices', () => { +jest.mock("~/application/stores/useBitcoinPrices", () => { return { - useBitcoinDataPrices: () => ({ + useBitcoinPrices: () => ({ data: { current_price: { usd: 100.0, @@ -107,11 +107,11 @@ export const mockedAlertModalActions = { hideAlert: jest.fn(), }; -jest.mock('@/stores/useAlertModal', () => { +jest.mock("~/application/stores/useAlertModal", () => { return { useAlertModal: () => ({ visible: true, - title: 'Hello World', + title: "Hello World", ...mockedAlertModalActions, }), }; @@ -122,27 +122,27 @@ export const mockedNavigation = { goBack: jest.fn(), }; -jest.mock('@react-navigation/native', () => { +jest.mock("@react-navigation/native", () => { return { useNavigation: () => ({ ...mockedNavigation }), }; }); -jest.mock('@react-native-async-storage/async-storage', () => - require('@react-native-async-storage/async-storage/jest/async-storage-mock'), +jest.mock("@react-native-async-storage/async-storage", () => + require("@react-native-async-storage/async-storage/jest/async-storage-mock"), ); -jest.mock('moti/skeleton', () => ({ Skeleton: () => 'Skeleton' })); +jest.mock("moti/skeleton", () => ({ Skeleton: () => "Skeleton" })); i18n.use(initReactI18next).init({ - lng: 'en', + lng: "en", resources: { en: EN_US, pt: PT_BR, de: DE_CH, es: ES_AR, }, - fallbackLng: 'en', + fallbackLng: "en", debug: false, }); diff --git a/app.json b/app.json index e344425..d6d5d82 100644 --- a/app.json +++ b/app.json @@ -3,7 +3,7 @@ "name": "Wallet you", "slug": "wallet-you", "owner": "cyberkaidev", - "version": "2.0.0", + "version": "2.0.1", "orientation": "portrait", "icon": "./assets/images/icon.png", "userInterfaceStyle": "dark", @@ -34,7 +34,7 @@ }, "permissions": ["android.permission.USE_BIOMETRIC", "android.permission.USE_FINGERPRINT"], "package": "com.cyberkaidev.walletyou", - "versionCode": 9 + "versionCode": 10 }, "web": { "favicon": "./assets/images/favicon.ico" diff --git a/babel.config.js b/babel.config.js index 96a2479..6c3cc94 100644 --- a/babel.config.js +++ b/babel.config.js @@ -2,7 +2,7 @@ module.exports = function (api) { api.cache(true); return { - presets: ['babel-preset-expo'], - plugins: ['react-native-reanimated/plugin'], + presets: ["babel-preset-expo"], + plugins: ["react-native-reanimated/plugin"], }; }; diff --git a/commitlint.config.ts b/commitlint.config.ts index d85c5a5..16d2a4e 100644 --- a/commitlint.config.ts +++ b/commitlint.config.ts @@ -1,55 +1,55 @@ -import { RuleConfigCondition, RuleConfigSeverity } from '@commitlint/types'; +import { RuleConfigCondition, RuleConfigSeverity } from "@commitlint/types"; export default { - parserPreset: 'conventional-changelog-conventionalcommits', + parserPreset: "conventional-changelog-conventionalcommits", rules: { - 'type-enum': [ + "type-enum": [ RuleConfigSeverity.Error, - 'always', + "always", [ - ':tada:', // Initial commit - ':bookmark:', // Version tag - ':sparkles:', // New feature - ':bug:', // Bugfix - ':card_index:', // Metadata - ':books:', // Documentation - ':bulb:', // Documenting source code - ':racehorse:', // Performance - ':lipstick:', // Cosmetic - ':rotating_light:', // Tests - ':white_check_mark:', // Adding a test - ':heavy_check_mark:', // Make a test pass - ':zap:', // General update - ':art:', // Improve format/structure - ':hammer:', // Refactor code - ':fire:', // Removing code/files - ':green_heart:', // Continuous Integration - ':lock:', // Security - ':arrow_up:', // Upgrading dependencies - ':arrow_down:', // Downgrading dependencies - ':shirt:', // Lint - ':alien:', // Translation - ':pencil:', // Text - ':ambulance:', // Critical hotfix - ':rocket:', // Deploying stuff - ':apple:', // Fixing on MacOS - ':penguin:', // Fixing on Linux - ':checkered_flag:', // Fixing on Windows - ':construction:', // Work in progress - ':construction_worker:', // Adding CI build system - ':chart_with_upwards_trend:', // Analytics or tracking code - ':heavy_minus_sign:', // Removing a dependency - ':heavy_plus_sign:', // Adding a dependency - ':whale:', // Docker - ':wrench:', // Configuration files - ':package:', // Package.json in JS - ':twisted_rightwards_arrows:', // Merging branches - ':hankey:', // Bad code / need improv. - ':rewind:', // Reverting changes - ':boom:', // Breaking changes - ':ok_hand:', // Code review changes - ':wheelchair:', // Accessibility - ':truck:', // Move/rename repository + ":tada:", // Initial commit + ":bookmark:", // Version tag + ":sparkles:", // New feature + ":bug:", // Bugfix + ":card_index:", // Metadata + ":books:", // Documentation + ":bulb:", // Documenting source code + ":racehorse:", // Performance + ":lipstick:", // Cosmetic + ":rotating_light:", // Tests + ":white_check_mark:", // Adding a test + ":heavy_check_mark:", // Make a test pass + ":zap:", // General update + ":art:", // Improve format/structure + ":hammer:", // Refactor code + ":fire:", // Removing code/files + ":green_heart:", // Continuous Integration + ":lock:", // Security + ":arrow_up:", // Upgrading dependencies + ":arrow_down:", // Downgrading dependencies + ":shirt:", // Lint + ":alien:", // Translation + ":pencil:", // Text + ":ambulance:", // Critical hotfix + ":rocket:", // Deploying stuff + ":apple:", // Fixing on MacOS + ":penguin:", // Fixing on Linux + ":checkered_flag:", // Fixing on Windows + ":construction:", // Work in progress + ":construction_worker:", // Adding CI build system + ":chart_with_upwards_trend:", // Analytics or tracking code + ":heavy_minus_sign:", // Removing a dependency + ":heavy_plus_sign:", // Adding a dependency + ":whale:", // Docker + ":wrench:", // Configuration files + ":package:", // Package.json in JS + ":twisted_rightwards_arrows:", // Merging branches + ":hankey:", // Bad code / need improv. + ":rewind:", // Reverting changes + ":boom:", // Breaking changes + ":ok_hand:", // Code review changes + ":wheelchair:", // Accessibility + ":truck:", // Move/rename repository ], ] as [RuleConfigSeverity, RuleConfigCondition, string[]], }, diff --git a/package.json b/package.json index 8e073a7..3ab38c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wallet-you", - "version": "2.0.0", + "version": "2.0.1", "main": "node_modules/expo/AppEntry.js", "author": "cyberkaidev", "license": "MIT", @@ -27,39 +27,39 @@ "@react-navigation/bottom-tabs": "^6.5.11", "@react-navigation/native": "^6.1.9", "@react-navigation/stack": "^6.3.20", - "axios": "^1.6.8", + "axios": "^1.7.7", "currency.js": "^2.0.4", - "expo": "~51.0.14", + "expo": "~51.0.34", "expo-checkbox": "~3.0.0", "expo-clipboard": "~6.0.3", "expo-constants": "~16.0.2", "expo-device": "~6.0.2", - "expo-font": "~12.0.7", + "expo-font": "~12.0.10", "expo-linear-gradient": "~13.0.2", "expo-linking": "~6.3.1", "expo-local-authentication": "~14.0.1", "expo-localization": "~15.0.3", "expo-network": "~6.0.1", "expo-screen-orientation": "~7.0.5", - "expo-secure-store": "~13.0.1", - "expo-splash-screen": "~0.27.5", + "expo-secure-store": "~13.0.2", + "expo-splash-screen": "~0.27.6", "expo-status-bar": "~1.12.1", - "i18next": "^23.11.1", - "jest-expo": "~51.0.1", + "i18next": "^23.15.1", + "jest-expo": "~51.0.4", "moment": "^2.30.1", - "moti": "^0.28.1", + "moti": "^0.29.0", "react": "18.2.0", - "react-i18next": "^14.1.0", - "react-native": "0.74.2", + "react-i18next": "^15.0.2", + "react-native": "0.74.5", "react-native-gesture-handler": "~2.16.1", "react-native-localize": "^3.1.0", "react-native-reanimated": "~3.10.1", "react-native-responsive-screen": "^1.4.2", - "react-native-safe-area-context": "4.10.1", + "react-native-safe-area-context": "4.10.5", "react-native-screens": "3.31.1", "react-native-svg": "15.2.0", "react-native-svg-charts": "^5.4.0", - "zustand": "^4.5.2" + "zustand": "^5.0.0-rc.2" }, "devDependencies": { "@babel/core": "^7.20.0", diff --git a/src/application/api/getPriceHistoryBitcoin.ts b/src/application/api/getPriceHistoryBitcoin.ts new file mode 100644 index 0000000..9700c53 --- /dev/null +++ b/src/application/api/getPriceHistoryBitcoin.ts @@ -0,0 +1,19 @@ +import { bitcoinRepository } from "~/data/repositories/bitcoinRepository"; + +type GetPriceHistoryBitcoin = Promise< + { + date: Date; + value: number; + }[] +>; + +export async function getPriceHistoryBitcoin(): GetPriceHistoryBitcoin { + const { body, statusCode } = await bitcoinRepository().getPriceHistory(); + + if (!body || statusCode !== 200) throw new Error("failed request on getPriceHistory"); + + return body.prices.slice(-20).map(item => ({ + date: new Date(item[0]), + value: item[1], + })); +} diff --git a/src/application/api/getPricesBitcoin.ts b/src/application/api/getPricesBitcoin.ts new file mode 100644 index 0000000..7e126e9 --- /dev/null +++ b/src/application/api/getPricesBitcoin.ts @@ -0,0 +1,10 @@ +import { bitcoinRepository } from "~/data/repositories/bitcoinRepository"; + +export async function getPricesBitcoin() { + const { body, statusCode } = await bitcoinRepository().getPrices(); + + return { + body: body?.market_data.current_price, + statusCode, + }; +} diff --git a/src/application/api/getUserBalance.ts b/src/application/api/getUserBalance.ts new file mode 100644 index 0000000..d52b377 --- /dev/null +++ b/src/application/api/getUserBalance.ts @@ -0,0 +1,6 @@ +import { bitcoinRepository } from "~/data/repositories/bitcoinRepository"; + +export async function getUserBalance(address: string) { + const response = await bitcoinRepository().getUserBalance(address); + return response; +} diff --git a/src/application/api/getUserTransactions.ts b/src/application/api/getUserTransactions.ts new file mode 100644 index 0000000..178922b --- /dev/null +++ b/src/application/api/getUserTransactions.ts @@ -0,0 +1,6 @@ +import { bitcoinRepository } from "~/data/repositories/bitcoinRepository"; + +export async function getUserTransactions(address: string) { + const response = await bitcoinRepository().getUserTransactions(address); + return response; +} diff --git a/src/application/constants/storageKeys.ts b/src/application/constants/storageKeys.ts new file mode 100644 index 0000000..f202e74 --- /dev/null +++ b/src/application/constants/storageKeys.ts @@ -0,0 +1,6 @@ +export const storageKeys = { + enableLocalAuth: "@enable-local-auth", + language: "@language", + currency: "@currency", + publicKey: "publicKey", +}; diff --git a/src/application/hooks/useFormatCurrency.ts b/src/application/hooks/useFormatCurrency.ts new file mode 100644 index 0000000..35471ac --- /dev/null +++ b/src/application/hooks/useFormatCurrency.ts @@ -0,0 +1,36 @@ +import currencyJS from "currency.js"; + +import { useAppSettings } from "../stores/useAppSettings"; + +type UseFormatCurrency = string; + +export function useFormatCurrency(value?: number): UseFormatCurrency { + const { currency } = useAppSettings.getState(); + + if (!value && value !== 0) return "..."; + const isZero = value === 0 ? 0 : value; + + switch (currency) { + case "eur": + return currencyJS(isZero, { + separator: ",", + decimal: ".", + symbol: "€", + precision: 2, + }).format(); + case "brl": + return currencyJS(isZero, { + separator: ".", + decimal: ",", + symbol: "R$", + precision: 2, + }).format(); + default: + return currencyJS(isZero, { + separator: ",", + decimal: ".", + symbol: "$", + precision: 2, + }).format(); + } +} diff --git a/src/application/hooks/useFormatDate.ts b/src/application/hooks/useFormatDate.ts new file mode 100644 index 0000000..48c5d5e --- /dev/null +++ b/src/application/hooks/useFormatDate.ts @@ -0,0 +1,25 @@ +import "moment/locale/pt"; +import "moment/locale/fr"; +import "moment/locale/es"; +import "moment/locale/de"; + +import moment from "moment"; + +import { useAppSettings } from "../stores/useAppSettings"; + +type UseFormatDate = { + date: string; + time: string; + dateAndTime: string; +}; + +export function useFormatDate(date: Date): UseFormatDate { + const { language } = useAppSettings.getState(); + + moment.locale(language.split("-")[0]); + return { + date: moment(date).format("L"), + time: moment(date).format("LT"), + dateAndTime: `${moment(date).format("L")} ${moment(date).format("LT")}`, + }; +} diff --git a/src/application/settings/initializeAppInternationalization.ts b/src/application/settings/initializeAppInternationalization.ts new file mode 100644 index 0000000..6e87397 --- /dev/null +++ b/src/application/settings/initializeAppInternationalization.ts @@ -0,0 +1,3 @@ +import initialize from "~/infra/internationalization/initializeInternationalization"; + +export default initialize; diff --git a/src/application/settings/initializeAppSettings.ts b/src/application/settings/initializeAppSettings.ts new file mode 100644 index 0000000..3b52b80 --- /dev/null +++ b/src/application/settings/initializeAppSettings.ts @@ -0,0 +1,56 @@ +import { LocalityCodes } from "~/shared/LocalityCodes"; + +import { storageKeys } from "../constants/storageKeys"; +import { useAppSettings } from "../stores/useAppSettings"; +import { localityCodes } from "../utils/localityCodes"; +import { localStorage } from "../utils/localStorage"; + +export async function initializeAppSettings() { + const { setCurrency, setLanguage, setIsTablet } = useAppSettings.getState(); + setIsTablet(); + + const { currencyCode, languageCode } = localityCodes(); + + const currencyStorage = await localStorage().getItem({ key: storageKeys.currency }); + const languageStorage = await localStorage().getItem({ key: storageKeys.language }); + + if (currencyStorage) { + setCurrency(currencyStorage as LocalityCodes["currencyCode"]); + } else { + switch (currencyCode) { + case "BRL": + case "USD": + case "AUD": + case "CAD": + case "EUR": + case "GBP": + setCurrency(currencyCode.toLocaleLowerCase() as LocalityCodes["currencyCode"]); + break; + default: + setCurrency("usd"); + break; + } + } + + if (languageStorage) { + setLanguage(languageStorage as LocalityCodes["languageCode"]); + } else { + switch (languageCode) { + case "de": + setLanguage("de-ch"); + break; + case "en": + setLanguage("en-us"); + break; + case "es": + setLanguage("es-ar"); + break; + case "pt": + setLanguage("pt-br"); + break; + default: + setLanguage("en-us"); + break; + } + } +} diff --git a/src/application/settings/orientationLock.ts b/src/application/settings/orientationLock.ts new file mode 100644 index 0000000..b877d92 --- /dev/null +++ b/src/application/settings/orientationLock.ts @@ -0,0 +1,5 @@ +import * as ScreenOrientation from "expo-screen-orientation"; + +export async function orientationLock() { + await ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT); +} diff --git a/src/application/settings/splashHide.ts b/src/application/settings/splashHide.ts new file mode 100644 index 0000000..73373b0 --- /dev/null +++ b/src/application/settings/splashHide.ts @@ -0,0 +1,9 @@ +import * as SplashScreen from "expo-splash-screen"; + +export function splashScreen() { + async function hide() { + await SplashScreen.hideAsync(); + } + + return { hide }; +} diff --git a/src/application/stores/useAlertModal.ts b/src/application/stores/useAlertModal.ts new file mode 100644 index 0000000..0cb829d --- /dev/null +++ b/src/application/stores/useAlertModal.ts @@ -0,0 +1,28 @@ +import { create } from "zustand"; + +interface DataProps { + visible: boolean; + title: string; + onCancel?: () => void; + onConfirm?: () => void; +} + +interface ShowAlertProps { + title: string; + onCancel?: () => void; + onConfirm: () => void; +} + +interface Props extends DataProps { + showAlert: (arg: ShowAlertProps) => void; + hideAlert: () => void; +} + +export const useAlertModal = create(set => ({ + visible: false, + title: "", + onCancel: undefined, + onConfirm: undefined, + showAlert: props => set({ ...props, visible: true }), + hideAlert: () => set({ visible: false, title: "", onCancel: undefined, onConfirm: undefined }), +})); diff --git a/src/application/stores/useAppSettings.ts b/src/application/stores/useAppSettings.ts new file mode 100644 index 0000000..7d149a0 --- /dev/null +++ b/src/application/stores/useAppSettings.ts @@ -0,0 +1,40 @@ +import { create } from "zustand"; + +import { i18next } from "~/infra/internationalization/i18next"; +import { LocalityCodes } from "~/shared/LocalityCodes"; + +import { storageKeys } from "../constants/storageKeys"; +import { deviceCharacteristics } from "../utils/deviceCharacteristics"; +import { localStorage } from "../utils/localStorage"; + +type DataProps = { + currency: LocalityCodes["currencyCode"]; + language: LocalityCodes["languageCode"]; + isTablet: boolean | null; +}; + +type Props = DataProps & { + setCurrency: (arg: LocalityCodes["currencyCode"]) => void; + setLanguage: (arg: LocalityCodes["languageCode"]) => void; + setIsTablet: () => void; +}; + +export const useAppSettings = create(set => ({ + currency: "usd", + language: "en-us", + isTablet: null, + setCurrency: item => { + set({ currency: item }); + localStorage().setItem({ key: storageKeys.currency, item: item }); + }, + setLanguage: item => { + set({ language: item }); + localStorage().setItem({ key: storageKeys.language, item: item }); + i18next().changeLanguage(item); + }, + setIsTablet: async () => { + const { deviceType } = deviceCharacteristics(); + const response = await deviceType(); + set({ isTablet: response == "TABLET" }); + }, +})); diff --git a/src/application/stores/useBitcoinPrices.ts b/src/application/stores/useBitcoinPrices.ts new file mode 100644 index 0000000..08e5a20 --- /dev/null +++ b/src/application/stores/useBitcoinPrices.ts @@ -0,0 +1,25 @@ +import { create } from "zustand"; + +import { PricesModel } from "~/data/models/BitcoinRepositoryModel"; + +import { getPricesBitcoin } from "../api/getPricesBitcoin"; + +type DataProps = { + currentPrice: PricesModel["market_data"]["current_price"] | null; + status: "success" | "failed" | null; +}; + +type Props = DataProps & { + fetchBitcoinDataPrices: () => Promise; +}; + +export const useBitcoinPrices = create(set => ({ + currentPrice: null, + status: null, + fetchBitcoinDataPrices: async () => { + const { body, statusCode } = await getPricesBitcoin(); + + if (!body || statusCode !== 200) return set({ status: "failed" }); + set({ currentPrice: body, status: "success" }); + }, +})); diff --git a/src/application/stores/usePriceHistoryBitcoin.ts b/src/application/stores/usePriceHistoryBitcoin.ts new file mode 100644 index 0000000..0ac47a5 --- /dev/null +++ b/src/application/stores/usePriceHistoryBitcoin.ts @@ -0,0 +1,28 @@ +import { create } from "zustand"; + +import { getPriceHistoryBitcoin } from "../api/getPriceHistoryBitcoin"; + +interface DataProps { + data: { + date: Date; + value: number; + }[]; + status: "loading" | "success" | "failed" | null; +} + +export type Props = DataProps & { + fetchBitcoinHistoricalPrice: () => Promise; +}; + +export const usePriceHistoryBitcoin = create(set => ({ + data: [], + status: null, + fetchBitcoinHistoricalPrice: async () => { + try { + const response = await getPriceHistoryBitcoin(); + set({ data: response, status: "success" }); + } catch (error) { + set({ status: "failed" }); + } + }, +})); diff --git a/src/application/stores/useUser.ts b/src/application/stores/useUser.ts new file mode 100644 index 0000000..87af273 --- /dev/null +++ b/src/application/stores/useUser.ts @@ -0,0 +1,40 @@ +import { create } from "zustand"; + +import { TransactionModel } from "~/data/models/BitcoinRepositoryModel"; + +import { getUserTransactions } from "../api/getUserTransactions"; + +type DataProps = { + key: string; + balance: string; + transactions: { + data: TransactionModel[]; + status: "loading" | "success" | "failed" | null; + }; +}; + +type Props = DataProps & { + setKey: (arg: DataProps["key"]) => void; + setBalance: (arg: DataProps["balance"]) => void; + fetchTransactions: (arg: DataProps["key"]) => Promise; + cleanUserData: () => void; +}; + +export const useUser = create(set => ({ + key: "", + balance: "0", + transactions: { + data: [], + status: null, + }, + setKey: param => set({ key: param }), + setBalance: param => set({ balance: param }), + fetchTransactions: async param => { + const { body, statusCode } = await getUserTransactions(param); + + if (!body || statusCode !== 200) return set({ transactions: { data: [], status: "failed" } }); + + set({ transactions: { data: body.transactions, status: "success" } }); + }, + cleanUserData: () => set({ key: "", balance: "0", transactions: { data: [], status: null } }), +})); diff --git a/src/functions/convertCurrency.ts b/src/application/utils/convertCurrency.ts similarity index 50% rename from src/functions/convertCurrency.ts rename to src/application/utils/convertCurrency.ts index 6e2fcf8..8bd51f6 100644 --- a/src/functions/convertCurrency.ts +++ b/src/application/utils/convertCurrency.ts @@ -1,7 +1,11 @@ -import { useFormatCurrency } from '@/hooks/useFormatCurrency'; -import { CryptoToCurrencyProps } from '@/types/CryptoToCurrencyType'; +import { useFormatCurrency } from "../hooks/useFormatCurrency"; -export function cryptoToCurrency({ balance, cryptoCurrentPrice }: CryptoToCurrencyProps) { +type Props = { + balance: string; + cryptoCurrentPrice?: number; +}; + +export function cryptoToCurrency({ balance, cryptoCurrentPrice }: Props) { const curreny = Number(balance) * (cryptoCurrentPrice ?? 0); return useFormatCurrency(curreny); } diff --git a/src/application/utils/deviceCharacteristics.ts b/src/application/utils/deviceCharacteristics.ts new file mode 100644 index 0000000..d0e9738 --- /dev/null +++ b/src/application/utils/deviceCharacteristics.ts @@ -0,0 +1,21 @@ +import Constants from "expo-constants"; +import * as Device from "expo-device"; + +type DeviceTypeModel = "PHONE" | "TABLET" | "DESKTOP" | "TV"; + +type DeviceCharacteristics = { + deviceType: () => Promise; + STATUS_BAR_HEIGHT: number; +}; + +export function deviceCharacteristics(): DeviceCharacteristics { + async function deviceType() { + const deviceTypeAsync = await Device.getDeviceTypeAsync(); + const deviceType = Device.DeviceType[deviceTypeAsync] as DeviceTypeModel; + return deviceType; + } + + const STATUS_BAR_HEIGHT = Constants.statusBarHeight; + + return { deviceType, STATUS_BAR_HEIGHT }; +} diff --git a/src/application/utils/encryptStorage.ts b/src/application/utils/encryptStorage.ts new file mode 100644 index 0000000..fea7640 --- /dev/null +++ b/src/application/utils/encryptStorage.ts @@ -0,0 +1,17 @@ +import { GetItemProps, SetItemProps, StorageModel } from "~/data/models/StorageModel"; +import { secureStorage } from "~/data/storages/secureStorage"; + +export function encryptStorage(): StorageModel { + const storage = secureStorage(); + + async function setItem(props: SetItemProps) { + await storage.setItem(props); + } + + async function getItem(props: GetItemProps) { + const response = await storage.getItem(props); + return response; + } + + return { setItem, getItem }; +} diff --git a/src/application/utils/localStorage.ts b/src/application/utils/localStorage.ts new file mode 100644 index 0000000..fb3e042 --- /dev/null +++ b/src/application/utils/localStorage.ts @@ -0,0 +1,17 @@ +import { GetItemProps, SetItemProps, StorageModel } from "~/data/models/StorageModel"; +import { asyncStorage } from "~/data/storages/asyncStorage"; + +export function localStorage(): StorageModel { + const storage = asyncStorage(); + + async function setItem(props: SetItemProps) { + await storage.setItem(props); + } + + async function getItem(props: GetItemProps) { + const response = await storage.getItem(props); + return response; + } + + return { setItem, getItem }; +} diff --git a/src/application/utils/localityCodes.ts b/src/application/utils/localityCodes.ts new file mode 100644 index 0000000..3f2f124 --- /dev/null +++ b/src/application/utils/localityCodes.ts @@ -0,0 +1,10 @@ +import { expoLocalityCodes } from "~/infra/internationalization/expoLocalityCodes"; + +export function localityCodes() { + const locales = expoLocalityCodes(); + + return { + languageCode: locales.languageCode, + currencyCode: locales.currencyCode, + }; +} diff --git a/src/assets/icons/IconArrowRight.android.tsx b/src/assets/icons/IconArrowRight.android.tsx deleted file mode 100644 index 78dac73..0000000 --- a/src/assets/icons/IconArrowRight.android.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import { widthPercentageToDP as wp } from 'react-native-responsive-screen'; -import Svg, { Path } from 'react-native-svg'; - -import { colors } from '@/helpers/themes'; -import { IconProps } from '@/types/IconType'; - -export function IconArrowRight({ color = colors.white, porcentSize = '5%' }: IconProps) { - return ( - - - - ); -} diff --git a/src/assets/index.ts b/src/assets/index.ts deleted file mode 100644 index 89f6192..0000000 --- a/src/assets/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IconArrowDownLeft } from './icons/IconArrowDownLeft'; -import { IconArrowLeft } from './icons/IconArrowLeft'; -import { IconArrowRight } from './icons/IconArrowRight'; -import { IconArrowUpRight } from './icons/IconArrowUpRight'; -import { IconNoInternet } from './icons/IconNoInternet'; -import { IconSettings } from './icons/IconSettings'; - -export { - IconArrowDownLeft, - IconArrowLeft, - IconArrowRight, - IconArrowUpRight, - IconNoInternet, - IconSettings, -}; diff --git a/src/components/ButtonTitleGhost.tsx b/src/components/ButtonTitleGhost.tsx deleted file mode 100644 index 477d1b0..0000000 --- a/src/components/ButtonTitleGhost.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { ActivityIndicator } from 'react-native'; - -import { colors, spaces } from '@/helpers/themes'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { ButtonTitleGhostProps } from '@/types/ButtonTitleGhostType'; - -import { ButtonTitleGhostPlatform } from './fragments/ButtonTitleGhostPlatform'; -import { Text } from './Text'; - -export function ButtonTitleGhost({ - testID = 'idButtonTitleGhost', - title, - disabled = false, - onPress, - size = 'large', - loading = false, - buttonsWeight = 'bold', - marginT = 0, - marginB = 0, - marginR = 0, - marginL = 0, -}: ButtonTitleGhostProps) { - const { t } = useTranslation(); - const { isTablet } = useAppSettings(); - - return ( - - {!loading && ( - - {title} - - )} - {loading && ( - - - - {t('loading')} - - - )} - - ); -} diff --git a/src/components/LimitedWidthContainer.tsx b/src/components/LimitedWidthContainer.tsx deleted file mode 100644 index 34caee7..0000000 --- a/src/components/LimitedWidthContainer.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react'; -import { StyleSheet, View } from 'react-native'; - -import { width } from '@/helpers/themes'; -import { LimitedWidthContainerProps } from '@/types/LimitedWidthContainerType'; - -export function LimitedWidthContainer({ children }: LimitedWidthContainerProps) { - return ( - - {children} - - ); -} - -const styles = StyleSheet.create({ - container: { - maxWidth: width.max_width_800, - width: '100%', - alignSelf: 'center', - }, -}); diff --git a/src/components/Text.tsx b/src/components/Text.tsx deleted file mode 100644 index 21e01a1..0000000 --- a/src/components/Text.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React from 'react'; -import { Text as TextContainer } from 'react-native'; -import { widthPercentageToDP as wp } from 'react-native-responsive-screen'; - -import { schemeText } from '@/functions/schemeText'; -import { colors } from '@/helpers/themes'; -import { TextProps } from '@/types/TextType'; - -export function Text({ - children, - weight, - size, - color = colors.white, - marginT = 0, - marginB = 0, - marginR = 0, - marginL = 0, -}: TextProps) { - const { onFontFamily, onFontSize } = React.useMemo(() => { - return schemeText({ - weight: weight ?? 'regular', - size: size ?? 's', - }); - }, [weight, size]); - - return ( - - {children} - - ); -} diff --git a/src/components/__test__/SkeletonLoading.spec.tsx b/src/components/__test__/SkeletonLoading.spec.tsx deleted file mode 100644 index e5a4566..0000000 --- a/src/components/__test__/SkeletonLoading.spec.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { render } from '@testing-library/react-native'; -import React from 'react'; - -import { SkeletonLoading } from '../SkeletonLoading'; - -test('Render component', () => { - const { getByTestId } = render(); - - expect(getByTestId('idSkeletonLoading')).toBeTruthy(); -}); diff --git a/src/translate/locales/de-ch.json b/src/data/jsons/de-ch.json similarity index 100% rename from src/translate/locales/de-ch.json rename to src/data/jsons/de-ch.json diff --git a/src/translate/locales/en-us.json b/src/data/jsons/en-us.json similarity index 100% rename from src/translate/locales/en-us.json rename to src/data/jsons/en-us.json diff --git a/src/translate/locales/es-ar.json b/src/data/jsons/es-ar.json similarity index 100% rename from src/translate/locales/es-ar.json rename to src/data/jsons/es-ar.json diff --git a/src/translate/locales/pt-br.json b/src/data/jsons/pt-br.json similarity index 100% rename from src/translate/locales/pt-br.json rename to src/data/jsons/pt-br.json diff --git a/src/data/models/BitcoinRepositoryModel.ts b/src/data/models/BitcoinRepositoryModel.ts new file mode 100644 index 0000000..ec2f38a --- /dev/null +++ b/src/data/models/BitcoinRepositoryModel.ts @@ -0,0 +1,43 @@ +import { HttpResponseModel } from "~/infra/models/HttpsRequestModel"; + +export interface BalanceModel { + balance: string; +} + +export interface TransactionModel { + chain: string; + blockNumber: number | null; + timestamp: number; + transactionType?: "incoming" | "outgoing" | "zero-transfer"; + hash: string; + address: string; + amount: string; +} + +export interface TransactionsModel { + transactions: TransactionModel[]; +} + +export interface PriceHistoryModel { + prices: [number, number][]; +} + +export interface PricesModel { + market_data: { + current_price: { + aud: number; + brl: number; + cad: number; + eur: number; + gbp: number; + usd: number; + }; + }; +} + +export interface BitcoinRepositoryModel { + getUserBalance: (address: string) => Promise>; + getUserTransactions: (address: string) => Promise>; + getPriceHistory: () => Promise>; + getPrices: () => Promise>; +} diff --git a/src/data/models/StorageModel.ts b/src/data/models/StorageModel.ts new file mode 100644 index 0000000..fd653af --- /dev/null +++ b/src/data/models/StorageModel.ts @@ -0,0 +1,17 @@ +export type SetItemModel = Promise; + +export type GetItemModel = Promise; + +export type SetItemProps = { + key: string; + item: string; +}; + +export type GetItemProps = { + key: string; +}; + +export interface StorageModel { + setItem: (args: SetItemProps) => SetItemModel; + getItem: (args: GetItemProps) => GetItemModel; +} diff --git a/src/data/repositories/bitcoinRepository.ts b/src/data/repositories/bitcoinRepository.ts new file mode 100644 index 0000000..d23df3d --- /dev/null +++ b/src/data/repositories/bitcoinRepository.ts @@ -0,0 +1,49 @@ +import { axiosHttpsRequest } from "~/infra/https/axiosHttpsRequest"; + +import { + BalanceModel, + BitcoinRepositoryModel, + PriceHistoryModel, + PricesModel, + TransactionsModel, +} from "../models/BitcoinRepositoryModel"; + +export function bitcoinRepository(): BitcoinRepositoryModel { + async function getUserBalance(address: string) { + const response = await axiosHttpsRequest({ + url: `https://${process.env.EXPO_PUBLIC_API}/v1/bitcoin/get-balance/${address}`, + method: "GET", + }); + + return response; + } + + async function getUserTransactions(address: string) { + const response = await axiosHttpsRequest({ + url: `https://${process.env.EXPO_PUBLIC_API}/v1/bitcoin/get-transactions/${address}`, + method: "GET", + }); + + return response; + } + + async function getPriceHistory() { + const response = await axiosHttpsRequest({ + url: "https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=1", + method: "GET", + }); + + return response; + } + + async function getPrices() { + const response = await axiosHttpsRequest({ + url: "https://api.coingecko.com/api/v3/coins/bitcoin", + method: "GET", + }); + + return response; + } + + return { getUserBalance, getUserTransactions, getPriceHistory, getPrices }; +} diff --git a/src/data/storages/asyncStorage.ts b/src/data/storages/asyncStorage.ts new file mode 100644 index 0000000..8b5f4ed --- /dev/null +++ b/src/data/storages/asyncStorage.ts @@ -0,0 +1,16 @@ +import AsyncStorage from "@react-native-async-storage/async-storage"; + +import { GetItemProps, SetItemProps, StorageModel } from "../models/StorageModel"; + +export function asyncStorage(): StorageModel { + async function setItem({ key, item }: SetItemProps) { + await AsyncStorage.setItem(key, item); + } + + async function getItem({ key }: GetItemProps) { + const response = await AsyncStorage.getItem(key); + return response; + } + + return { setItem, getItem }; +} diff --git a/src/data/storages/secureStorage.ts b/src/data/storages/secureStorage.ts new file mode 100644 index 0000000..6751de3 --- /dev/null +++ b/src/data/storages/secureStorage.ts @@ -0,0 +1,16 @@ +import * as SecureStore from "expo-secure-store"; + +import { GetItemProps, SetItemProps, StorageModel } from "../models/StorageModel"; + +export function secureStorage(): StorageModel { + async function setItem({ key, item }: SetItemProps) { + await SecureStore.setItemAsync(key, item); + } + + async function getItem({ key }: GetItemProps) { + const response = await SecureStore.getItemAsync(key); + return response; + } + + return { setItem, getItem }; +} diff --git a/src/functions/initializeAppSettings.ts b/src/functions/initializeAppSettings.ts deleted file mode 100644 index 416ca96..0000000 --- a/src/functions/initializeAppSettings.ts +++ /dev/null @@ -1,57 +0,0 @@ -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { getLocales } from 'expo-localization'; - -import { storageKeys } from '@/helpers/storageKeys'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { UseAppSettingsProps } from '@/types/UseAppSettingsType'; - -export async function initializeAppSettings() { - const { setCurrency, setLanguage, setIsTablet } = useAppSettings.getState(); - setIsTablet(); - - const currencyCode = getLocales()[0].currencyCode; - const languageCode = getLocales()[0].languageCode; - - const currencyStorage = await AsyncStorage.getItem(storageKeys.currency); - const languageStorage = await AsyncStorage.getItem(storageKeys.language); - - if (currencyStorage) { - setCurrency(currencyStorage as UseAppSettingsProps['currency']); - } else { - switch (currencyCode) { - case 'BRL': - case 'USD': - case 'AUD': - case 'CAD': - case 'EUR': - case 'GBP': - setCurrency(currencyCode.toLocaleLowerCase() as UseAppSettingsProps['currency']); - break; - default: - setCurrency('usd'); - break; - } - } - - if (languageStorage) { - setLanguage(languageStorage as UseAppSettingsProps['language']); - } else { - switch (languageCode) { - case 'de': - setLanguage('de-ch'); - break; - case 'en': - setLanguage('en-us'); - break; - case 'es': - setLanguage('es-ar'); - break; - case 'pt': - setLanguage('pt-br'); - break; - default: - setLanguage('en-us'); - break; - } - } -} diff --git a/src/functions/schemeText.ts b/src/functions/schemeText.ts deleted file mode 100644 index c439ede..0000000 --- a/src/functions/schemeText.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { fontSizes } from '@/helpers/themes'; -import { SchemeTextProps } from '@/types/SchemeTextType'; - -export function schemeText({ weight, size }: SchemeTextProps) { - function onFontFamily() { - switch (weight) { - case 'regular': - return 'Figtree-Regular'; - case 'medium': - return 'Figtree-Medium'; - case 'bold': - return 'Figtree-Bold'; - default: - return 'Figtree-Regular'; - } - } - - function onFontSize() { - return fontSizes[size]; - } - - return { - onFontFamily, - onFontSize, - }; -} diff --git a/src/helpers/statusBarHeight.ts b/src/helpers/statusBarHeight.ts deleted file mode 100644 index 47e426b..0000000 --- a/src/helpers/statusBarHeight.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Constants from 'expo-constants'; - -export const statusBarHeight = Constants.statusBarHeight; diff --git a/src/helpers/storageKeys.ts b/src/helpers/storageKeys.ts deleted file mode 100644 index db23c21..0000000 --- a/src/helpers/storageKeys.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const storageKeys = { - enableLocalAuth: '@enable-local-auth', - language: '@language', - currency: '@currency', - publicKey: 'publicKey', -}; diff --git a/src/helpers/themes.ts b/src/helpers/themes.ts deleted file mode 100644 index 7fc4283..0000000 --- a/src/helpers/themes.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - heightPercentageToDP as hp, - widthPercentageToDP as wp, -} from 'react-native-responsive-screen'; - -export const width = { - max_width_800: 800, - max_width_500: 500, -}; - -export const borderRadius = { - radius_10: 10, - radius_15: 15, - radius_25: 25, -}; - -export const spaces = { - horizontal: { - xs: wp('2%'), - s: wp('3%'), - m: wp('4%'), - l: wp('5%'), - }, - vertical: { - xs: hp('1%'), - s: hp('2%'), - m: hp('3%'), - l: hp('4%'), - }, -}; - -export const fontSizes = { - xs: '2.5%', - s: '3%', - m: '3.5%', - l: '4.5%', - xl: '5%', - xxl: '6.5%', - xxxl: '9%', -}; - -export const colors = { - white: '#FFFFFF', - white_10pct: 'rgba(255, 255, 255, 0.10)', - green: '#ACD9A8', - red: '#E17C7C', - light_cyan: '#B4C9FF', - dark_cyan: '#3E4454', - black_100: '#191B1F', - black_000: '#222329', - light_grey: '#BFBFBF', - dark_grey: '#616670', - black_100_50pct: 'rgba(25, 27, 31, 0.50)', - transparent: 'transparent', -}; - -export const scaffold = { - page_space_horizontal: wp('5%'), - header_space_horizontal: wp('3%'), -}; diff --git a/src/hooks/useFormatCurrency.ts b/src/hooks/useFormatCurrency.ts deleted file mode 100644 index 3435f95..0000000 --- a/src/hooks/useFormatCurrency.ts +++ /dev/null @@ -1,34 +0,0 @@ -import currencyJS from 'currency.js'; - -import { useAppSettings } from '@/stores/useAppSettings'; - -export function useFormatCurrency(value?: number) { - const { currency } = useAppSettings.getState(); - - if (!value && value !== 0) return '...'; - const isZero = value === 0 ? 0 : value; - - switch (currency) { - case 'eur': - return currencyJS(isZero, { - separator: ',', - decimal: '.', - symbol: '€', - precision: 2, - }).format(); - case 'brl': - return currencyJS(isZero, { - separator: '.', - decimal: ',', - symbol: 'R$', - precision: 2, - }).format(); - default: - return currencyJS(isZero, { - separator: ',', - decimal: '.', - symbol: '$', - precision: 2, - }).format(); - } -} diff --git a/src/hooks/useFormatDate.ts b/src/hooks/useFormatDate.ts deleted file mode 100644 index 4d0f6ae..0000000 --- a/src/hooks/useFormatDate.ts +++ /dev/null @@ -1,19 +0,0 @@ -import 'moment/locale/pt'; -import 'moment/locale/fr'; -import 'moment/locale/es'; -import 'moment/locale/de'; - -import moment from 'moment'; - -import { useAppSettings } from '@/stores/useAppSettings'; - -export function useFormatDate(date: Date) { - const { language } = useAppSettings.getState(); - - moment.locale(language.split('-')[0]); - return { - date: moment(date).format('L'), - time: moment(date).format('LT'), - dateAndTime: `${moment(date).format('L')} ${moment(date).format('LT')}`, - }; -} diff --git a/src/index.d.ts b/src/index.d.ts index 658bd96..4e5d2c3 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -1,3 +1,3 @@ -declare module '*.svg'; -declare module '*.jpg'; -declare module '*.png'; +declare module "*.svg"; +declare module "*.jpg"; +declare module "*.png"; diff --git a/src/infra/https/axiosHttpsRequest.ts b/src/infra/https/axiosHttpsRequest.ts new file mode 100644 index 0000000..b89889b --- /dev/null +++ b/src/infra/https/axiosHttpsRequest.ts @@ -0,0 +1,27 @@ +import axios, { AxiosError, AxiosResponse } from "axios"; + +import { HttpRequestModel, HttpResponseModel } from "../models/HttpsRequestModel"; + +function adapter(response: AxiosResponse): HttpResponseModel { + return { + body: response.data, + statusCode: response.status, + }; +} + +export async function axiosHttpsRequest(data: HttpRequestModel): Promise> { + try { + const response: AxiosResponse = await axios.request({ + url: data.url, + method: data.method, + headers: data.headers, + data: data.body, + }); + + return adapter(response); + } catch (error) { + const axiosError = error as AxiosError; + const axiosResponse = axiosError.response as AxiosResponse; + return adapter(axiosResponse); + } +} diff --git a/src/infra/internationalization/expoLocalityCodes.ts b/src/infra/internationalization/expoLocalityCodes.ts new file mode 100644 index 0000000..adefdf1 --- /dev/null +++ b/src/infra/internationalization/expoLocalityCodes.ts @@ -0,0 +1,7 @@ +import { getLocales, Locale } from "expo-localization"; + +export function expoLocalityCodes(): Locale { + const codes = getLocales()[0]; + + return codes; +} diff --git a/src/infra/internationalization/i18next.ts b/src/infra/internationalization/i18next.ts new file mode 100644 index 0000000..9d2304f --- /dev/null +++ b/src/infra/internationalization/i18next.ts @@ -0,0 +1,9 @@ +import i18n from "i18next"; + +export function i18next() { + function changeLanguage(language: string) { + i18n.changeLanguage(language); + } + + return { changeLanguage }; +} diff --git a/src/infra/internationalization/initializeInternationalization.ts b/src/infra/internationalization/initializeInternationalization.ts new file mode 100644 index 0000000..658a130 --- /dev/null +++ b/src/infra/internationalization/initializeInternationalization.ts @@ -0,0 +1,26 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; + +import DE_CH from "~/data/jsons/de-ch.json"; +import EN_US from "~/data/jsons/en-us.json"; +import ES_AR from "~/data/jsons/es-ar.json"; +import PT_BR from "~/data/jsons/pt-br.json"; + +import { expoLocalityCodes } from "./expoLocalityCodes"; + +i18n.use(initReactI18next).init({ + lng: expoLocalityCodes().languageCode ?? "en", + compatibilityJSON: "v3", + fallbackLng: "en", + interpolation: { + escapeValue: false, + }, + resources: { + en: EN_US, + pt: PT_BR, + de: DE_CH, + es: ES_AR, + }, +}); + +export default i18n; diff --git a/src/infra/models/HttpsRequestModel.ts b/src/infra/models/HttpsRequestModel.ts new file mode 100644 index 0000000..55f901b --- /dev/null +++ b/src/infra/models/HttpsRequestModel.ts @@ -0,0 +1,12 @@ +export interface HttpRequestModel { + url: string; + method: "GET"; + headers?: Record; + body?: unknown; +} + +export interface HttpResponseModel { + statusCode: number; + body?: T; + error?: string; +} diff --git a/src/pages/CurrencyPage.tsx b/src/pages/CurrencyPage.tsx deleted file mode 100644 index 2358de3..0000000 --- a/src/pages/CurrencyPage.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; - -import { HeaderSwiperOptions } from '@/components/HeaderSwiperOptions'; -import { ScrollView } from '@/components/ScrollView'; -import { SelectList } from '@/components/SelectList'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { CurrenciesTypes } from '@/types/CurrencyPageType'; - -export function CurrencyPage() { - const { t } = useTranslation(); - const { currency, setCurrency } = useAppSettings(); - const [selected, setSelected] = React.useState(currency); - - const currenciesTypes: CurrenciesTypes[] = [ - { title: 'AUD', key: 'aud' }, - { title: 'BRL', key: 'brl' }, - { title: 'CAD', key: 'cad' }, - { title: 'EUR', key: 'eur' }, - { title: 'GBP', key: 'gbp' }, - { title: 'USD', key: 'usd' }, - ]; - - return ( - - setCurrency(selected)} - disableAction={selected === currency} - /> - - setSelected(arg)} - /> - - - ); -} diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx deleted file mode 100644 index 226f958..0000000 --- a/src/pages/HomePage.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import React from 'react'; - -import { LimitedWidthContainer } from '@/components/LimitedWidthContainer'; -import { ScrollView } from '@/components/ScrollView'; -import { cryptoToCurrency } from '@/functions/convertCurrency'; -import { TransactionList } from '@/pages/fragments/TransactionList'; -import { getBitcoinBalance } from '@/services/getBitcoinBalance'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { useBitcoinDataPrices } from '@/stores/useBitcoinDataPrices'; -import { useUserData } from '@/stores/useUserData'; - -import { Chart } from './fragments/Chart'; -import { HeaderIcons } from './fragments/HeaderIcons'; -import { MyBitcoinPrice } from './fragments/MyBitcoinPrice'; - -export function HomePage() { - const { balance, key, fetchTransactions } = useUserData(); - const { currency } = useAppSettings(); - const { currentPrice, status } = useBitcoinDataPrices(); - const currencyFormated = cryptoToCurrency({ - balance, - cryptoCurrentPrice: currentPrice?.[currency], - }); - - async function onRefresh() { - await getBitcoinBalance(key); - await fetchTransactions(key); - return true; - } - - return ( - onRefresh()}> - - - - - - - - ); -} diff --git a/src/pages/LanguagePage.tsx b/src/pages/LanguagePage.tsx deleted file mode 100644 index 0c35e3e..0000000 --- a/src/pages/LanguagePage.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; - -import { HeaderSwiperOptions } from '@/components/HeaderSwiperOptions'; -import { LimitedWidthContainer } from '@/components/LimitedWidthContainer'; -import { ScrollView } from '@/components/ScrollView'; -import { SelectList } from '@/components/SelectList'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { LanguagesType } from '@/types/LanguagePageType'; - -export function LanguagePage() { - const { t } = useTranslation(); - const { language, setLanguage } = useAppSettings(); - const [selected, setSelected] = React.useState(language); - - const languages: LanguagesType[] = [ - { title: 'English', key: 'en-us' }, - { title: 'Português (BR)', key: 'pt-br' }, - { title: 'Spanish', key: 'es-ar' }, - { title: 'Deutsch', key: 'de-ch' }, - ]; - - return ( - - setLanguage(selected)} - disableAction={selected === language} - /> - - - setSelected(arg)} /> - - - - ); -} diff --git a/src/pages/LocalAuthPage.tsx b/src/pages/LocalAuthPage.tsx deleted file mode 100644 index 1907cf3..0000000 --- a/src/pages/LocalAuthPage.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { useNavigation } from '@react-navigation/native'; -import * as LocalAuthentication from 'expo-local-authentication'; -import * as SecureStore from 'expo-secure-store'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; - -import { ButtonTitleGhost } from '@/components/ButtonTitleGhost'; -import { storageKeys } from '@/helpers/storageKeys'; -import { colors } from '@/helpers/themes'; -import { getBitcoinBalance } from '@/services/getBitcoinBalance'; -import { useBitcoinDataPrices } from '@/stores/useBitcoinDataPrices'; -import { useUserData } from '@/stores/useUserData'; -import { RootStackParamListProps } from '@/types/RoutesType'; - -export function LocalAuthPage() { - const navigation = useNavigation(); - const { fetchTransactions, setKey } = useUserData(); - const { fetchBitcoinDataPrices } = useBitcoinDataPrices(); - const { t } = useTranslation(); - - const [loading, setLoading] = React.useState(false); - - async function resetRoute(navigate: keyof RootStackParamListProps) { - if (navigate === 'HomePage') { - const publicKey = await SecureStore.getItemAsync(storageKeys.publicKey); - const resBalance = await getBitcoinBalance(publicKey as string); - if (resBalance === 'not-found') { - navigation.reset({ - index: 0, - routes: [{ name: 'RegisterKeyPage' }], - }); - return; - } - fetchBitcoinDataPrices(); - fetchTransactions(publicKey as string); - } - navigation.reset({ - index: 0, - routes: [{ name: navigate }], - }); - } - - async function authenticate() { - setLoading(true); - - const isBiometricEnrolled = await LocalAuthentication.isEnrolledAsync(); - const userEnabledAuth = await AsyncStorage.getItem(storageKeys.enableLocalAuth); - - if (!isBiometricEnrolled || !userEnabledAuth || userEnabledAuth === 'off') { - resetRoute('HomePage'); - } else { - const results = await LocalAuthentication.authenticateAsync(); - if (results.success) resetRoute('HomePage'); - if (!results.success) setLoading(false); - } - } - - async function publicKeyCheck() { - const publicKey = await SecureStore.getItemAsync(storageKeys.publicKey); - if (!publicKey) { - resetRoute('RegisterKeyPage'); - } else { - setKey(publicKey); - authenticate(); - } - } - - React.useEffect(() => { - publicKeyCheck(); - }, []); - - return ( - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: colors.black_100, - alignItems: 'center', - justifyContent: 'center', - }, -}); diff --git a/src/pages/NoInternetPage.tsx b/src/pages/NoInternetPage.tsx deleted file mode 100644 index 513e066..0000000 --- a/src/pages/NoInternetPage.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; - -import { IconNoInternet } from '@/assets'; -import { Text } from '@/components/Text'; -import { spaces } from '@/helpers/themes'; - -export function NoInternetPage() { - const { t } = useTranslation(); - - return ( - - - - {t('no-internet-connection')} - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, -}); diff --git a/src/pages/RegisterKeyPage.tsx b/src/pages/RegisterKeyPage.tsx deleted file mode 100644 index 62dff0b..0000000 --- a/src/pages/RegisterKeyPage.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { useNavigation } from '@react-navigation/native'; -import * as LocalAuthentication from 'expo-local-authentication'; -import * as SecureStore from 'expo-secure-store'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; - -import { ButtonTitleGhost } from '@/components/ButtonTitleGhost'; -import { CheckBoxMessage } from '@/components/CheckBoxMessage'; -import { ScrollView } from '@/components/ScrollView'; -import { Text } from '@/components/Text'; -import { storageKeys } from '@/helpers/storageKeys'; -import { colors, spaces, width } from '@/helpers/themes'; -import { TextFieldPaste } from '@/pages/fragments/TextFieldPaste'; -import { getBitcoinBalance } from '@/services/getBitcoinBalance'; -import { useBitcoinDataPrices } from '@/stores/useBitcoinDataPrices'; -import { useUserData } from '@/stores/useUserData'; - -export function RegisterKeyPage() { - const { t } = useTranslation(); - const { fetchTransactions, setKey } = useUserData(); - const { fetchBitcoinDataPrices } = useBitcoinDataPrices(); - const navigation = useNavigation(); - - const [showBiometricOption, setShowBiometricOption] = React.useState(false); - const [toggleCheckBox, setToggleCheckBox] = React.useState(false); - const [loading, setLoading] = React.useState(false); - const [inputPublicKey, setInputPublicKey] = React.useState(''); - const [error, setError] = React.useState({ message: '', visible: false }); - - React.useLayoutEffect(() => { - (async () => { - const compatible = await LocalAuthentication.hasHardwareAsync(); - const isBiometricEnrolled = await LocalAuthentication.isEnrolledAsync(); - setShowBiometricOption(compatible && isBiometricEnrolled); - })(); - }, []); - - async function handlerContinue() { - setLoading(true); - if (error.visible) setError({ message: '', visible: false }); - const resBalance = await getBitcoinBalance(inputPublicKey); - - if (resBalance === 'KEY_NOT_FOUND') { - setError({ message: t('public-key-not-found'), visible: true }); - setLoading(false); - return; - } - - if (resBalance === 'INTERNAL_ERROR') { - setError({ message: t('request-error-try-later'), visible: true }); - setLoading(false); - return; - } - - fetchTransactions(inputPublicKey); - fetchBitcoinDataPrices(); - if (toggleCheckBox) await AsyncStorage.setItem(storageKeys.enableLocalAuth, 'on'); - await SecureStore.setItemAsync(storageKeys.publicKey, inputPublicKey); - setKey(inputPublicKey); - - navigation.reset({ - index: 0, - routes: [{ name: 'HomePage' }], - }); - } - - return ( - - - {error.visible && ( - - - {error.message} - - - )} - {showBiometricOption && ( - setToggleCheckBox(!toggleCheckBox)} - message={t('use-biometrics-optional')} - /> - )} - - - ); -} - -const styles = StyleSheet.create({ - textErrorContainer: { - width: '100%', - maxWidth: width.max_width_800, - alignSelf: 'center', - }, -}); diff --git a/src/pages/SettingsPage.tsx b/src/pages/SettingsPage.tsx deleted file mode 100644 index 5e64cc1..0000000 --- a/src/pages/SettingsPage.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import AsyncStorage from '@react-native-async-storage/async-storage'; -import { useNavigation } from '@react-navigation/native'; -import * as Clipboard from 'expo-clipboard'; -import Constants from 'expo-constants'; -import * as SecureStore from 'expo-secure-store'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { Linking } from 'react-native'; - -import { ActionList } from '@/components/ActionList'; -import { LimitedWidthContainer } from '@/components/LimitedWidthContainer'; -import { ScrollView } from '@/components/ScrollView'; -import { Text } from '@/components/Text'; -import { initializeAppSettings } from '@/functions/initializeAppSettings'; -import { storageKeys } from '@/helpers/storageKeys'; -import { colors, spaces } from '@/helpers/themes'; -import { useAlertModal } from '@/stores/useAlertModal'; -import { useUserData } from '@/stores/useUserData'; - -export function SettingsPage() { - const { t } = useTranslation(); - const { key, cleanUserData } = useUserData(); - const { showAlert } = useAlertModal(); - const navigation = useNavigation(); - - const { currency, enableLocalAuth, language, publicKey } = storageKeys; - - async function onExit() { - await AsyncStorage.multiRemove([currency, enableLocalAuth, language]); - await SecureStore.deleteItemAsync(publicKey); - initializeAppSettings(); - cleanUserData(); - - navigation.reset({ - index: 0, - routes: [{ name: 'LocalAuthPage' }], - }); - } - - const firstList = [ - { - testID: 'idCopy', - title: t('copy-my-address'), - onAction: async () => await Clipboard.setStringAsync(key), - }, - ]; - - const secondList = [ - { - testID: 'idLanguage', - title: t('language'), - onAction: () => navigation.navigate('LanguagePage'), - arrowVisible: true, - }, - { - testID: 'idCurrency', - title: t('currency'), - onAction: () => navigation.navigate('CurrencyPage'), - arrowVisible: true, - }, - { - testID: 'idTerms', - title: t('terms'), - onAction: () => navigation.navigate('TermsPage'), - arrowVisible: true, - }, - { - testID: 'idSourceCode', - title: t('source-code'), - onAction: () => Linking.openURL('https://github.com/cyberkaidev/wallet-you'), - arrowVisible: true, - }, - { - testID: 'idExit', - title: t('exit'), - onAction: () => { - showAlert({ title: t('do-you-really-want-to-leave'), onConfirm: () => onExit() }); - }, - arrowVisible: true, - }, - ]; - - return ( - - - - - {key} - - - - v {Constants.expoConfig?.version != null ? Constants.expoConfig.version : '-'} - - - - ); -} diff --git a/src/pages/TransactionPage.tsx b/src/pages/TransactionPage.tsx deleted file mode 100644 index 8c2fe4a..0000000 --- a/src/pages/TransactionPage.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { useRoute } from '@react-navigation/native'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; - -import { LimitedWidthContainer } from '@/components/LimitedWidthContainer'; -import { ScrollView } from '@/components/ScrollView'; -import { TitleSubtitle } from '@/components/TitleSubtitle'; -import { spaces } from '@/helpers/themes'; -import { useFormatDate } from '@/hooks/useFormatDate'; -import { UseRouteType } from '@/types/RoutesType'; - -export function TransactionPage() { - const { - params: { data }, - } = useRoute>(); - const { t } = useTranslation(); - - const time = useFormatDate(new Date(data.timestamp * 1000)); - - const transactionsData = [ - { - title: data.transactionType === 'incoming' ? t('received') : t('sent'), - subTitle: data.amount, - }, - { title: t('date'), subTitle: time.date }, - { title: t('hour'), subTitle: time.time }, - { title: 'Hash', subTitle: data.hash }, - { - title: t('block-number'), - subTitle: data.blockNumber ? data.blockNumber.toString() : '-', - }, - ]; - - return ( - - {transactionsData.map((item, index) => ( - - - - ))} - - ); -} diff --git a/src/pages/fragments/HeaderIcons.tsx b/src/pages/fragments/HeaderIcons.tsx deleted file mode 100644 index 027034b..0000000 --- a/src/pages/fragments/HeaderIcons.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; - -import { IconSettings } from '@/assets'; -import { ButtonIcon } from '@/components/ButtonIcon'; -import { Text } from '@/components/Text'; -import { statusBarHeight } from '@/helpers/statusBarHeight'; -import { colors } from '@/helpers/themes'; - -export function HeaderIcons() { - const navigation = useNavigation(); - const { t } = useTranslation(); - - return ( - - - - {t('my-wallet')} - - - navigation.navigate('SettingsPage')}> - - - - ); -} - -const styles = StyleSheet.create({ - container: { - position: 'relative', - flexDirection: 'row', - justifyContent: 'flex-end', - alignItems: 'center', - marginTop: statusBarHeight, - }, - center: { - position: 'absolute', - alignItems: 'center', - left: 0, - right: 0, - }, -}); diff --git a/src/pages/fragments/MyBitcoinPrice.tsx b/src/pages/fragments/MyBitcoinPrice.tsx deleted file mode 100644 index 7221adc..0000000 --- a/src/pages/fragments/MyBitcoinPrice.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; -import { heightPercentageToDP as hp } from 'react-native-responsive-screen'; - -import { SkeletonLoading } from '@/components/SkeletonLoading'; -import { Text } from '@/components/Text'; -import { colors, spaces } from '@/helpers/themes'; -import { MyBitcoinPriceProps } from '@/types/HomePageType'; - -export function MyBitcoinPrice({ price, balance, status }: MyBitcoinPriceProps) { - const { t } = useTranslation(); - - return ( - - {status !== 'failed' && {t('total-balance')}} - - {status === 'success' && ( - - - {price} - - - {balance} BTC - - - )} - - {status === 'failed' && {t('request-error-try-later')}} - - {(status === 'loading' || status === null) && ( - - - - - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - alignItems: 'center', - paddingVertical: hp('22%'), - }, -}); diff --git a/src/assets/icons/IconArrowDownLeft.android.tsx b/src/presentation/assets/icons/IconArrowDownLeft.android.tsx similarity index 57% rename from src/assets/icons/IconArrowDownLeft.android.tsx rename to src/presentation/assets/icons/IconArrowDownLeft.android.tsx index 3cefb06..6c4bd9e 100644 --- a/src/assets/icons/IconArrowDownLeft.android.tsx +++ b/src/presentation/assets/icons/IconArrowDownLeft.android.tsx @@ -1,11 +1,11 @@ -import React from 'react'; -import { widthPercentageToDP as wp } from 'react-native-responsive-screen'; -import Svg, { Path } from 'react-native-svg'; +import React from "react"; +import { widthPercentageToDP as wp } from "react-native-responsive-screen"; +import Svg, { Path } from "react-native-svg"; -import { colors } from '@/helpers/themes'; -import { IconProps } from '@/types/IconType'; +import { colors } from "~/presentation/settings/themes"; +import { IconProps } from "~/shared/Styles"; -export function IconArrowDownLeft({ color = colors.white, porcentSize = '5%' }: IconProps) { +export function IconArrowDownLeft({ color = colors.white, porcentSize = "5%" }: IconProps) { return ( + + + ); +} diff --git a/src/assets/icons/IconArrowRight.ios.tsx b/src/presentation/assets/icons/IconArrowRight.ios.tsx similarity index 76% rename from src/assets/icons/IconArrowRight.ios.tsx rename to src/presentation/assets/icons/IconArrowRight.ios.tsx index 8dc6a88..824d24e 100644 --- a/src/assets/icons/IconArrowRight.ios.tsx +++ b/src/presentation/assets/icons/IconArrowRight.ios.tsx @@ -1,11 +1,11 @@ -import React from 'react'; -import { widthPercentageToDP as wp } from 'react-native-responsive-screen'; -import Svg, { Path } from 'react-native-svg'; +import React from "react"; +import { widthPercentageToDP as wp } from "react-native-responsive-screen"; +import Svg, { Path } from "react-native-svg"; -import { colors } from '@/helpers/themes'; -import { IconProps } from '@/types/IconType'; +import { colors } from "~/presentation/settings/themes"; +import { IconProps } from "~/shared/Styles"; -export function IconArrowRight({ color = colors.white, porcentSize = '5%' }: IconProps) { +export function IconArrowRight({ color = colors.white, porcentSize = "5%" }: IconProps) { return ( void; + children: React.ReactNode | React.ReactNode[]; +}; + +type ActionListProps = { + list: { + testID: string; + prefixIcon?: JSX.Element; + title: string; + onAction: () => void; + arrowVisible?: boolean; + }[]; + marginB?: number; +}; + +function Button({ testID, onAction, children }: ButtonProps) { + if (Platform.OS === "android") { return ( {item.title} {item.arrowVisible === true && ( - + )} {list.length !== index + 1 && } @@ -69,16 +86,16 @@ export function ActionList({ list, marginB }: ActionListProps) { const styles = StyleSheet.create({ container: { - width: '100%', + width: "100%", maxWidth: width.max_width_800, - alignSelf: 'center', + alignSelf: "center", backgroundColor: colors.black_000, - overflow: 'hidden', + overflow: "hidden", }, button: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", paddingLeft: spaces.horizontal.m, }, iconContainer: { @@ -86,18 +103,18 @@ const styles = StyleSheet.create({ }, iconAndTitle: { flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - position: 'relative', + flexDirection: "row", + alignItems: "center", + justifyContent: "space-between", + position: "relative", paddingVertical: spaces.vertical.s, }, indicator: { - position: 'absolute', + position: "absolute", bottom: 0, right: 0, height: 1, - width: '100%', + width: "100%", backgroundColor: colors.dark_cyan, }, }); diff --git a/src/components/AlertModal.tsx b/src/presentation/components/AlertModal.tsx similarity index 68% rename from src/components/AlertModal.tsx rename to src/presentation/components/AlertModal.tsx index 906d21a..c152da4 100644 --- a/src/components/AlertModal.tsx +++ b/src/presentation/components/AlertModal.tsx @@ -1,11 +1,12 @@ -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; -import { ButtonTitleGhost } from '@/components/ButtonTitleGhost'; -import { Text } from '@/components/Text'; -import { borderRadius, colors, spaces, width } from '@/helpers/themes'; -import { useAlertModal } from '@/stores/useAlertModal'; +import { useAlertModal } from "~/application/stores/useAlertModal"; + +import { borderRadius, colors, spaces, width } from "../settings/themes"; +import { ButtonTitleGhost } from "./ButtonTitleGhost"; +import { Text } from "./Text"; export function AlertModal() { const { t } = useTranslation(); @@ -22,7 +23,7 @@ export function AlertModal() { { @@ -32,7 +33,7 @@ export function AlertModal() { /> { onConfirm?.(); @@ -47,19 +48,19 @@ export function AlertModal() { const styles = StyleSheet.create({ background: { - position: 'absolute', + position: "absolute", left: 0, right: 0, top: 0, bottom: 0, zIndex: 9999999999, backgroundColor: colors.black_100_50pct, - alignItems: 'center', - justifyContent: 'center', + alignItems: "center", + justifyContent: "center", paddingHorizontal: spaces.horizontal.m, }, body: { - width: '90%', + width: "90%", maxWidth: width.max_width_500, paddingHorizontal: spaces.horizontal.l, paddingTop: spaces.vertical.l, @@ -68,9 +69,9 @@ const styles = StyleSheet.create({ backgroundColor: colors.black_000, }, footer: { - width: '100%', + width: "100%", marginTop: spaces.vertical.l, - flexDirection: 'row', - justifyContent: 'flex-end', + flexDirection: "row", + justifyContent: "flex-end", }, }); diff --git a/src/components/ButtonIcon.tsx b/src/presentation/components/ButtonIcon.tsx similarity index 66% rename from src/components/ButtonIcon.tsx rename to src/presentation/components/ButtonIcon.tsx index 7866a9f..637d34c 100644 --- a/src/components/ButtonIcon.tsx +++ b/src/presentation/components/ButtonIcon.tsx @@ -1,11 +1,11 @@ -import React from 'react'; +import React from "react"; -import { ButtonIconProps } from '@/types/ButtonIconType'; +import { ButtonIconProps } from "~/shared/Styles"; -import { ButtonIconPlatform } from './fragments/ButtonIconPlatform'; +import { ButtonIconPlatform } from "./fragments/ButtonIconPlatform"; export function ButtonIcon({ - testID = 'idButtonIcon', + testID = "idButtonIcon", children, onPress, disabled = false, diff --git a/src/presentation/components/ButtonTitleGhost.tsx b/src/presentation/components/ButtonTitleGhost.tsx new file mode 100644 index 0000000..4927a4d --- /dev/null +++ b/src/presentation/components/ButtonTitleGhost.tsx @@ -0,0 +1,72 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { ActivityIndicator } from "react-native"; + +import { useAppSettings } from "~/application/stores/useAppSettings"; +import { SchemeText } from "~/shared/Styles"; + +import { colors, spaces } from "../settings/themes"; +import { ButtonTitleGhostPlatform } from "./fragments/ButtonTitleGhostPlatform"; +import { Text } from "./Text"; + +type Props = { + testID?: string; + title: string; + onPress: () => void; + disabled?: boolean; + size?: "large" | "small"; + buttonsWeight?: SchemeText["weight"]; + loading?: boolean; + marginT?: number; + marginB?: number; + marginR?: number; + marginL?: number; +}; + +export function ButtonTitleGhost({ + testID = "idButtonTitleGhost", + title, + disabled = false, + onPress, + size = "large", + loading = false, + buttonsWeight = "bold", + marginT = 0, + marginB = 0, + marginR = 0, + marginL = 0, +}: Props) { + const { t } = useTranslation(); + const { isTablet } = useAppSettings(); + + return ( + + {!loading && ( + + {title} + + )} + {loading && ( + + + + {t("loading")} + + + )} + + ); +} diff --git a/src/components/CheckBoxMessage.tsx b/src/presentation/components/CheckBoxMessage.tsx similarity index 62% rename from src/components/CheckBoxMessage.tsx rename to src/presentation/components/CheckBoxMessage.tsx index 5094081..751610d 100644 --- a/src/components/CheckBoxMessage.tsx +++ b/src/presentation/components/CheckBoxMessage.tsx @@ -1,13 +1,17 @@ -import Checkbox from 'expo-checkbox'; -import React from 'react'; -import { StyleSheet, View } from 'react-native'; +import Checkbox from "expo-checkbox"; +import React from "react"; +import { StyleSheet, View } from "react-native"; -import { colors, spaces } from '@/helpers/themes'; -import { CheckboxMessageProps } from '@/types/CheckboxMessageType'; +import { colors, spaces } from "../settings/themes"; +import { Text } from "./Text"; -import { Text } from './Text'; +type Props = { + message: string; + isActivated: boolean; + onAction: () => void; +}; -export function CheckBoxMessage({ isActivated, onAction, message }: CheckboxMessageProps) { +export function CheckBoxMessage({ isActivated, onAction, message }: Props) { return ( void; + disableAction?: boolean; +}; -export function HeaderSwiperOptions({ - title, - onAction, - disableAction = false, -}: HeaderSwiperOptionsProps) { +export function HeaderSwiperOptions({ title, onAction, disableAction = false }: Props) { const navigation = useNavigation(); const { t } = useTranslation(); @@ -32,7 +32,7 @@ export function HeaderSwiperOptions({ navigation.goBack()} @@ -40,7 +40,7 @@ export function HeaderSwiperOptions({ /> + {children} + + ); +} + +const styles = StyleSheet.create({ + container: { + maxWidth: width.max_width_800, + width: "100%", + alignSelf: "center", + }, +}); diff --git a/src/components/ScrollView.tsx b/src/presentation/components/ScrollView.tsx similarity index 55% rename from src/components/ScrollView.tsx rename to src/presentation/components/ScrollView.tsx index d0331b6..bfca986 100644 --- a/src/components/ScrollView.tsx +++ b/src/presentation/components/ScrollView.tsx @@ -1,14 +1,20 @@ -import React from 'react'; -import { RefreshControl, ScrollView as ScrollViewContainer } from 'react-native-gesture-handler'; -import { heightPercentageToDP as hp } from 'react-native-responsive-screen'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import React from "react"; +import { RefreshControl, ScrollView as ScrollViewContainer } from "react-native-gesture-handler"; +import { heightPercentageToDP as hp } from "react-native-responsive-screen"; +import { useSafeAreaInsets } from "react-native-safe-area-context"; -import { statusBarHeight } from '@/helpers/statusBarHeight'; -import { colors, scaffold, spaces } from '@/helpers/themes'; -import { ScrollViewProps } from '@/types/ScrollViewType'; +import { deviceCharacteristics } from "~/application/utils/deviceCharacteristics"; -export function ScrollView({ children, refreshControl }: ScrollViewProps) { +import { colors, scaffold, spaces } from "../settings/themes"; + +type Props = { + children: React.ReactNode | React.ReactNode[]; + refreshControl?: () => Promise | boolean; +}; + +export function ScrollView({ children, refreshControl }: Props) { const insets = useSafeAreaInsets(); + const { STATUS_BAR_HEIGHT } = deviceCharacteristics(); const [refreshing, setRefreshing] = React.useState(false); @@ -19,7 +25,7 @@ export function ScrollView({ children, refreshControl }: ScrollViewProps) { } function refreshController() { - if (typeof refreshControl === 'function') { + if (typeof refreshControl === "function") { return ( ); } @@ -42,7 +48,7 @@ export function ScrollView({ children, refreshControl }: ScrollViewProps) { refreshControl={refreshController()} showsVerticalScrollIndicator={false} contentContainerStyle={{ - paddingBottom: hp('3%') + insets.bottom, + paddingBottom: hp("3%") + insets.bottom, paddingTop: spaces.vertical.s, paddingHorizontal: scaffold.page_space_horizontal, }} diff --git a/src/components/SelectList.tsx b/src/presentation/components/SelectList.tsx similarity index 51% rename from src/components/SelectList.tsx rename to src/presentation/components/SelectList.tsx index 685e499..66a21d8 100644 --- a/src/components/SelectList.tsx +++ b/src/presentation/components/SelectList.tsx @@ -1,13 +1,22 @@ -import React from 'react'; -import { StyleSheet, TouchableOpacity, View } from 'react-native'; -import { widthPercentageToDP as wp } from 'react-native-responsive-screen'; +import React from "react"; +import { StyleSheet, TouchableOpacity, View } from "react-native"; +import { widthPercentageToDP as wp } from "react-native-responsive-screen"; -import { colors, spaces } from '@/helpers/themes'; -import { SelectListProps } from '@/types/SelectListType'; +import { colors, spaces } from "../settings/themes"; +import { Text } from "./Text"; -import { Text } from './Text'; +type Data = { + title: string; + key: T; +}; -export function SelectList({ data, selected, onSelected }: SelectListProps) { +export type Props = { + data: Data[]; + selected: string; + onSelected: (arg: Data["key"]) => void; +}; + +export function SelectList({ data, selected, onSelected }: Props) { return ( {data.map((item, index) => ( @@ -32,22 +41,22 @@ export function SelectList({ data, selected, onSelected }: SelectListProps const styles = StyleSheet.create({ button: { paddingVertical: spaces.vertical.s, - flexDirection: 'row', - alignItems: 'center', + flexDirection: "row", + alignItems: "center", }, border: { - width: wp('4%'), - height: wp('4%'), - alignItems: 'center', - justifyContent: 'center', + width: wp("4%"), + height: wp("4%"), + alignItems: "center", + justifyContent: "center", borderRadius: 40, - borderStyle: 'solid', + borderStyle: "solid", borderWidth: 2, borderColor: colors.light_cyan, }, circle: { - width: wp('2%'), - height: wp('2%'), + width: wp("2%"), + height: wp("2%"), borderRadius: 20, backgroundColor: colors.light_cyan, }, diff --git a/src/components/SkeletonLoading.tsx b/src/presentation/components/SkeletonLoading.tsx similarity index 51% rename from src/components/SkeletonLoading.tsx rename to src/presentation/components/SkeletonLoading.tsx index 75d54a8..9c645c2 100644 --- a/src/components/SkeletonLoading.tsx +++ b/src/presentation/components/SkeletonLoading.tsx @@ -1,13 +1,22 @@ -import { Skeleton } from 'moti/skeleton'; -import React from 'react'; -import { View } from 'react-native'; +import { Skeleton } from "moti/skeleton"; +import React from "react"; +import { View } from "react-native"; import { heightPercentageToDP as hp, widthPercentageToDP as wp, -} from 'react-native-responsive-screen'; +} from "react-native-responsive-screen"; -import { colors } from '@/helpers/themes'; -import { SkeletonLoadingProps } from '@/types/SkeletonLoadingType'; +import { colors } from "~/presentation/settings/themes"; + +type Props = { + heightPorcent: string; + widthPorcent?: string; + radius: number; + marginT?: number; + marginB?: number; + marginR?: number; + marginL?: number; +}; export function SkeletonLoading({ heightPorcent, @@ -17,7 +26,7 @@ export function SkeletonLoading({ marginB = 0, marginR = 0, marginL = 0, -}: SkeletonLoadingProps) { +}: Props) { return ( ); diff --git a/src/presentation/components/Text.tsx b/src/presentation/components/Text.tsx new file mode 100644 index 0000000..17ad1ef --- /dev/null +++ b/src/presentation/components/Text.tsx @@ -0,0 +1,54 @@ +import React from "react"; +import { Text as TextContainer } from "react-native"; +import { widthPercentageToDP as wp } from "react-native-responsive-screen"; + +import { colors } from "~/presentation/settings/themes"; +import { SchemeText } from "~/shared/Styles"; + +import { textUtils } from "../settings/textUtils"; + +type Props = { + children: React.ReactNode; + weight?: "regular" | "medium" | "bold"; + size?: SchemeText["fontSize"]; + color?: string; + marginT?: number; + marginB?: number; + marginR?: number; + marginL?: number; +}; + +export function Text({ + children, + weight, + size, + color = colors.white, + marginT = 0, + marginB = 0, + marginR = 0, + marginL = 0, +}: Props) { + const { onFontFamily, onFontSize } = React.useMemo(() => { + return textUtils({ + weight: weight ?? "regular", + size: size ?? "s", + }); + }, [weight, size]); + + return ( + + {children} + + ); +} diff --git a/src/components/TitleSubtitle.tsx b/src/presentation/components/TitleSubtitle.tsx similarity index 62% rename from src/components/TitleSubtitle.tsx rename to src/presentation/components/TitleSubtitle.tsx index 8efb73f..81b7843 100644 --- a/src/components/TitleSubtitle.tsx +++ b/src/presentation/components/TitleSubtitle.tsx @@ -1,11 +1,18 @@ -import React from 'react'; -import { StyleSheet, View } from 'react-native'; +import React from "react"; +import { StyleSheet, View } from "react-native"; -import { colors } from '@/helpers/themes'; -import { TitleSubtitleProps } from '@/types/TitleSubtitleType'; +import { colors } from "~/presentation/settings/themes"; -import { SkeletonLoading } from './SkeletonLoading'; -import { Text } from './Text'; +import { SkeletonLoading } from "./SkeletonLoading"; +import { Text } from "./Text"; + +type Props = { + title: string; + subTitle: string; + isLoading?: boolean; + marginT?: number; + marginB?: number; +}; export function TitleSubtitle({ title, @@ -13,7 +20,7 @@ export function TitleSubtitle({ isLoading = false, marginB = 0, marginT = 0, -}: TitleSubtitleProps) { +}: Props) { return ( @@ -35,6 +42,6 @@ export function TitleSubtitle({ const styles = StyleSheet.create({ loadingContainer: { - width: '50%', + width: "50%", }, }); diff --git a/src/components/__test__/ActionList.spec.tsx b/src/presentation/components/__test__/ActionList.spec.tsx similarity index 63% rename from src/components/__test__/ActionList.spec.tsx rename to src/presentation/components/__test__/ActionList.spec.tsx index 8810d6d..eafe53b 100644 --- a/src/components/__test__/ActionList.spec.tsx +++ b/src/presentation/components/__test__/ActionList.spec.tsx @@ -1,28 +1,28 @@ -import { act, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { act, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { IconArrowRight } from '@/assets'; +import { IconArrowRight } from "~/presentation/assets"; -import { ActionList } from '../ActionList'; +import { ActionList } from "../ActionList"; -describe('ActionList', () => { +describe("ActionList", () => { const t = renderHook(() => useTranslation()); const configTest = { - idActionList: 'idActionList', - idPrefixIcon: 'idPrefixIcon0', + idActionList: "idActionList", + idPrefixIcon: "idPrefixIcon0", list: [ { - testID: 'idHelloWorld', + testID: "idHelloWorld", prefixIcon: , - title: 'Hello World', + title: "Hello World", onAction: jest.fn(), }, ], }; - test('Render component', () => { + test("Render component", () => { const { getByTestId, getByText } = render( @@ -35,7 +35,7 @@ describe('ActionList', () => { expect(getByText(configTest.list[0].title)).toBeTruthy(); }); - test('Action', () => { + test("Action", () => { const { getByTestId } = render( diff --git a/src/components/__test__/AlertModal.spec.tsx b/src/presentation/components/__test__/AlertModal.spec.tsx similarity index 71% rename from src/components/__test__/AlertModal.spec.tsx rename to src/presentation/components/__test__/AlertModal.spec.tsx index 9098ab3..2246d7a 100644 --- a/src/components/__test__/AlertModal.spec.tsx +++ b/src/presentation/components/__test__/AlertModal.spec.tsx @@ -1,21 +1,21 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { mockedAlertModalActions } from '../../../__test__/setup'; -import { AlertModal } from '../AlertModal'; +import { mockedAlertModalActions } from "../../../../__test__/setup"; +import { AlertModal } from "../AlertModal"; -describe('AlertModal', () => { +describe("AlertModal", () => { const configTest = { - title: 'Hello World', - id: 'idAlertModal', - idCancel: 'idCancel', - idConfirm: 'idConfirm', + title: "Hello World", + id: "idAlertModal", + idCancel: "idCancel", + idConfirm: "idConfirm", onCancel: jest.fn(), onConfirm: jest.fn(), }; - test('Render component', () => { + test("Render component", () => { const t = renderHook(() => useTranslation()); const { getByText, getByTestId } = render( @@ -30,7 +30,7 @@ describe('AlertModal', () => { expect(getByTestId(configTest.idConfirm)).toBeTruthy(); }); - test('Actions', () => { + test("Actions", () => { const t = renderHook(() => useTranslation()); const { getByText, getByTestId } = render( diff --git a/src/components/__test__/ButtonIcon.spec.tsx b/src/presentation/components/__test__/ButtonIcon.spec.tsx similarity index 68% rename from src/components/__test__/ButtonIcon.spec.tsx rename to src/presentation/components/__test__/ButtonIcon.spec.tsx index 261b7a5..23f23de 100644 --- a/src/components/__test__/ButtonIcon.spec.tsx +++ b/src/presentation/components/__test__/ButtonIcon.spec.tsx @@ -1,18 +1,18 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { IconSettings } from '@/assets'; +import { IconSettings } from "~/presentation/assets"; -import { ButtonIcon } from '../ButtonIcon'; +import { ButtonIcon } from "../ButtonIcon"; -describe('ButtonIcon', () => { +describe("ButtonIcon", () => { const configTest = { - id: 'idButtonIcon', - loading: 'Loading', + id: "idButtonIcon", + loading: "Loading", }; - test('Render component and onPress', () => { + test("Render component and onPress", () => { const t = renderHook(() => useTranslation()); const configItem = { onPress: jest.fn(), @@ -32,7 +32,7 @@ describe('ButtonIcon', () => { expect(configItem.onPress.mock.calls.length).toBe(1); }); - test('Disabled', async () => { + test("Disabled", async () => { const t = renderHook(() => useTranslation()); const configItem = { onPress: jest.fn(), diff --git a/src/components/__test__/ButtonTitleGhost.spec.tsx b/src/presentation/components/__test__/ButtonTitleGhost.spec.tsx similarity index 76% rename from src/components/__test__/ButtonTitleGhost.spec.tsx rename to src/presentation/components/__test__/ButtonTitleGhost.spec.tsx index 3a0aa93..176cb9a 100644 --- a/src/components/__test__/ButtonTitleGhost.spec.tsx +++ b/src/presentation/components/__test__/ButtonTitleGhost.spec.tsx @@ -1,17 +1,17 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { ButtonTitleGhost } from '../ButtonTitleGhost'; +import { ButtonTitleGhost } from "../ButtonTitleGhost"; -describe('ButtonTitleGhost', () => { +describe("ButtonTitleGhost", () => { const configTest = { - title: 'Hello World', - id: 'idButtonTitleGhost', - loading: 'Loading', + title: "Hello World", + id: "idButtonTitleGhost", + loading: "Loading", }; - test('Render component and onPress', () => { + test("Render component and onPress", () => { const t = renderHook(() => useTranslation()); const configItem = { onPress: jest.fn(), @@ -30,7 +30,7 @@ describe('ButtonTitleGhost', () => { expect(configItem.onPress.mock.calls.length).toBe(1); }); - test('Disabled', async () => { + test("Disabled", async () => { const t = renderHook(() => useTranslation()); const configItem = { onPress: jest.fn(), @@ -47,7 +47,7 @@ describe('ButtonTitleGhost', () => { expect(configItem.onPress).not.toHaveBeenCalled(); }); - test('Loading', async () => { + test("Loading", async () => { const t = renderHook(() => useTranslation()); const configItem = { onPress: jest.fn(), diff --git a/src/components/__test__/CheckBoxMessage.spec.tsx b/src/presentation/components/__test__/CheckBoxMessage.spec.tsx similarity index 60% rename from src/components/__test__/CheckBoxMessage.spec.tsx rename to src/presentation/components/__test__/CheckBoxMessage.spec.tsx index 97e4f12..d92b871 100644 --- a/src/components/__test__/CheckBoxMessage.spec.tsx +++ b/src/presentation/components/__test__/CheckBoxMessage.spec.tsx @@ -1,12 +1,12 @@ -import { fireEvent, render } from '@testing-library/react-native'; -import React from 'react'; +import { fireEvent, render } from "@testing-library/react-native"; +import React from "react"; -import { CheckBoxMessage } from '../CheckBoxMessage'; +import { CheckBoxMessage } from "../CheckBoxMessage"; -test('Render component and onPress', () => { +test("Render component and onPress", () => { const configTest = { - message: 'Hello World', - id: 'idCheckBoxMessage', + message: "Hello World", + id: "idCheckBoxMessage", onPress: jest.fn(), }; diff --git a/src/components/__test__/HeaderSwiperOptions.spec.tsx b/src/presentation/components/__test__/HeaderSwiperOptions.spec.tsx similarity index 60% rename from src/components/__test__/HeaderSwiperOptions.spec.tsx rename to src/presentation/components/__test__/HeaderSwiperOptions.spec.tsx index 3de2170..7aa9537 100644 --- a/src/components/__test__/HeaderSwiperOptions.spec.tsx +++ b/src/presentation/components/__test__/HeaderSwiperOptions.spec.tsx @@ -1,22 +1,22 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { mockedNavigation } from '../../../__test__/setup'; -import { HeaderSwiperOptions } from '../HeaderSwiperOptions'; +import { mockedNavigation } from "../../../../__test__/setup"; +import { HeaderSwiperOptions } from "../HeaderSwiperOptions"; -describe('HeaderSwiperOptions', () => { +describe("HeaderSwiperOptions", () => { const t = renderHook(() => useTranslation()); const configTest = { - title: 'Hello World', - id: 'idHeaderSwiperOptions', - idButtonRight: 'idButtonRight', - idButtonLeft: 'idButtonLeft', + title: "Hello World", + id: "idHeaderSwiperOptions", + idButtonRight: "idButtonRight", + idButtonLeft: "idButtonLeft", onAction: jest.fn(), }; - test('Render component', () => { + test("Render component", () => { const { getByText, getByTestId } = render( @@ -24,11 +24,11 @@ describe('HeaderSwiperOptions', () => { ); expect(getByTestId(configTest.id)).toBeTruthy(); expect(getByText(configTest.title)).toBeTruthy(); - expect(getByText('Cancel')).toBeTruthy(); - expect(getByText('Change')).toBeTruthy(); + expect(getByText("Cancel")).toBeTruthy(); + expect(getByText("Change")).toBeTruthy(); }); - test('Actions', () => { + test("Actions", () => { const { getByTestId } = render( diff --git a/src/components/__test__/LimitedWidthContainer.spec.tsx b/src/presentation/components/__test__/LimitedWidthContainer.spec.tsx similarity index 51% rename from src/components/__test__/LimitedWidthContainer.spec.tsx rename to src/presentation/components/__test__/LimitedWidthContainer.spec.tsx index a3324bf..98b8489 100644 --- a/src/components/__test__/LimitedWidthContainer.spec.tsx +++ b/src/presentation/components/__test__/LimitedWidthContainer.spec.tsx @@ -1,13 +1,13 @@ -import { render } from '@testing-library/react-native'; -import React from 'react'; +import { render } from "@testing-library/react-native"; +import React from "react"; -import { LimitedWidthContainer } from '../LimitedWidthContainer'; -import { Text } from '../Text'; +import { LimitedWidthContainer } from "../LimitedWidthContainer"; +import { Text } from "../Text"; -test('Render component', () => { +test("Render component", () => { const configTest = { - title: 'Hello World', - id: 'idLimitedWidth', + title: "Hello World", + id: "idLimitedWidth", }; const { getByText, getByTestId } = render( diff --git a/src/components/__test__/ScrollView.spec.tsx b/src/presentation/components/__test__/ScrollView.spec.tsx similarity index 62% rename from src/components/__test__/ScrollView.spec.tsx rename to src/presentation/components/__test__/ScrollView.spec.tsx index 06328b2..1bc849a 100644 --- a/src/components/__test__/ScrollView.spec.tsx +++ b/src/presentation/components/__test__/ScrollView.spec.tsx @@ -1,17 +1,17 @@ -import { act, render } from '@testing-library/react-native'; -import React from 'react'; -import { View } from 'react-native'; +import { act, render } from "@testing-library/react-native"; +import React from "react"; +import { View } from "react-native"; -import { ScrollView } from '../ScrollView'; +import { ScrollView } from "../ScrollView"; -describe('ScrollView', () => { +describe("ScrollView", () => { const configTest = { - id: 'idScrollView', - idRefreshControl: 'idRefreshControl', + id: "idScrollView", + idRefreshControl: "idRefreshControl", refreshControl: () => true, }; - test('Render component', () => { + test("Render component", () => { const { getByTestId } = render( @@ -21,7 +21,7 @@ describe('ScrollView', () => { expect(getByTestId(configTest.id)).toBeTruthy(); }); - test('Refresh scroll', async () => { + test("Refresh scroll", async () => { const component = render( diff --git a/src/components/__test__/SelectList.spec.tsx b/src/presentation/components/__test__/SelectList.spec.tsx similarity index 61% rename from src/components/__test__/SelectList.spec.tsx rename to src/presentation/components/__test__/SelectList.spec.tsx index d78d1f9..bfae285 100644 --- a/src/components/__test__/SelectList.spec.tsx +++ b/src/presentation/components/__test__/SelectList.spec.tsx @@ -1,15 +1,15 @@ -import { fireEvent, render } from '@testing-library/react-native'; -import React from 'react'; +import { fireEvent, render } from "@testing-library/react-native"; +import React from "react"; -import { SelectList } from '../SelectList'; +import { SelectList } from "../SelectList"; -test('Render component and action', () => { +test("Render component and action", () => { const configTest = { - idSelectList: 'idSelectList', + idSelectList: "idSelectList", onSelected: jest.fn(), list: [ - { title: 'Title 1', key: 'T1' }, - { title: 'Ttitle 2', key: 'T2' }, + { title: "Title 1", key: "T1" }, + { title: "Ttitle 2", key: "T2" }, ], }; @@ -25,7 +25,7 @@ test('Render component and action', () => { expect(getByText(configTest.list[0].title)).toBeTruthy(); expect(getByText(configTest.list[1].title)).toBeTruthy(); - const button = getByTestId('id0'); + const button = getByTestId("id0"); fireEvent.press(button); expect(configTest.onSelected.mock.calls[0][0]).toBe(configTest.list[0].key); }); diff --git a/src/presentation/components/__test__/SkeletonLoading.spec.tsx b/src/presentation/components/__test__/SkeletonLoading.spec.tsx new file mode 100644 index 0000000..1580564 --- /dev/null +++ b/src/presentation/components/__test__/SkeletonLoading.spec.tsx @@ -0,0 +1,10 @@ +import { render } from "@testing-library/react-native"; +import React from "react"; + +import { SkeletonLoading } from "../SkeletonLoading"; + +test("Render component", () => { + const { getByTestId } = render(); + + expect(getByTestId("idSkeletonLoading")).toBeTruthy(); +}); diff --git a/src/components/__test__/Text.spec.tsx b/src/presentation/components/__test__/Text.spec.tsx similarity index 53% rename from src/components/__test__/Text.spec.tsx rename to src/presentation/components/__test__/Text.spec.tsx index 52af67d..a3e1e27 100644 --- a/src/components/__test__/Text.spec.tsx +++ b/src/presentation/components/__test__/Text.spec.tsx @@ -1,12 +1,12 @@ -import { render } from '@testing-library/react-native'; -import React from 'react'; +import { render } from "@testing-library/react-native"; +import React from "react"; -import { Text } from '../Text'; +import { Text } from "../Text"; -test('Render component', () => { +test("Render component", () => { const configTest = { - title: 'Hello World', - id: 'idText', + title: "Hello World", + id: "idText", }; const { getByText, getByTestId } = render({configTest.title}); diff --git a/src/components/__test__/TitleSubtitle.spec.tsx b/src/presentation/components/__test__/TitleSubtitle.spec.tsx similarity index 58% rename from src/components/__test__/TitleSubtitle.spec.tsx rename to src/presentation/components/__test__/TitleSubtitle.spec.tsx index fe4c463..f444637 100644 --- a/src/components/__test__/TitleSubtitle.spec.tsx +++ b/src/presentation/components/__test__/TitleSubtitle.spec.tsx @@ -1,17 +1,17 @@ -import { render } from '@testing-library/react-native'; -import React from 'react'; +import { render } from "@testing-library/react-native"; +import React from "react"; -import { TitleSubtitle } from '../TitleSubtitle'; +import { TitleSubtitle } from "../TitleSubtitle"; -describe('TitleSubtitle', () => { +describe("TitleSubtitle", () => { const configTest = { - id: 'idTitleSubtitle', - idSkeleton: 'idSkeletonLoading', - title: 'Hello World', - subTitle: 'Text', + id: "idTitleSubtitle", + idSkeleton: "idSkeletonLoading", + title: "Hello World", + subTitle: "Text", }; - test('Render component without load', () => { + test("Render component without load", () => { const { getByText, getByTestId } = render( , ); @@ -21,7 +21,7 @@ describe('TitleSubtitle', () => { expect(getByText(configTest.subTitle)).toBeTruthy(); }); - test('Render component with load', () => { + test("Render component with load", () => { const { getByTestId } = render( , ); diff --git a/src/components/fragments/ButtonIconPlatform.android.tsx b/src/presentation/components/fragments/ButtonIconPlatform.android.tsx similarity index 66% rename from src/components/fragments/ButtonIconPlatform.android.tsx rename to src/presentation/components/fragments/ButtonIconPlatform.android.tsx index 8c78839..f89ddb2 100644 --- a/src/components/fragments/ButtonIconPlatform.android.tsx +++ b/src/presentation/components/fragments/ButtonIconPlatform.android.tsx @@ -1,12 +1,12 @@ -import React from 'react'; -import { StyleSheet } from 'react-native'; -import { RectButton } from 'react-native-gesture-handler'; +import React from "react"; +import { StyleSheet } from "react-native"; +import { RectButton } from "react-native-gesture-handler"; -import { colors, spaces } from '@/helpers/themes'; -import { ButtonIconPlatformProps } from '@/types/ButtonIconType'; +import { colors, spaces } from "~/presentation/settings/themes"; +import { ButtonIconProps } from "~/shared/Styles"; export function ButtonIconPlatform({ - testID = 'idButtonIcon', + testID = "idButtonIcon", children, onPress, disabled = false, @@ -14,7 +14,7 @@ export function ButtonIconPlatform({ marginB, marginR, marginL, -}: ButtonIconPlatformProps) { +}: ButtonIconProps) { return ( + setCurrency(selected)} + disableAction={selected === currency} + /> + + setSelected(arg)} + /> + + + ); +} diff --git a/src/presentation/pages/HomePage.tsx b/src/presentation/pages/HomePage.tsx new file mode 100644 index 0000000..ca49714 --- /dev/null +++ b/src/presentation/pages/HomePage.tsx @@ -0,0 +1,41 @@ +import React from "react"; + +import { getUserBalance } from "~/application/api/getUserBalance"; +import { useAppSettings } from "~/application/stores/useAppSettings"; +import { useBitcoinPrices } from "~/application/stores/useBitcoinPrices"; +import { useUser } from "~/application/stores/useUser"; +import { cryptoToCurrency } from "~/application/utils/convertCurrency"; +import { ScrollView } from "~/presentation/components/ScrollView"; + +import { LimitedWidthContainer } from "../components/LimitedWidthContainer"; +import { Chart } from "./fragments/Chart"; +import { HeaderIcons } from "./fragments/HeaderIcons"; +import { MyBitcoinPrice } from "./fragments/MyBitcoinPrice"; +import { TransactionList } from "./fragments/TransactionList"; + +export function HomePage() { + const { balance, key, fetchTransactions } = useUser(); + const { currency } = useAppSettings(); + const { currentPrice, status } = useBitcoinPrices(); + const currencyFormated = cryptoToCurrency({ + balance, + cryptoCurrentPrice: currentPrice?.[currency], + }); + + async function onRefresh() { + await getUserBalance(key); + await fetchTransactions(key); + return true; + } + + return ( + onRefresh()}> + + + + + + + + ); +} diff --git a/src/presentation/pages/LanguagePage.tsx b/src/presentation/pages/LanguagePage.tsx new file mode 100644 index 0000000..687092b --- /dev/null +++ b/src/presentation/pages/LanguagePage.tsx @@ -0,0 +1,43 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; + +import { useAppSettings } from "~/application/stores/useAppSettings"; +import { ScrollView } from "~/presentation/components/ScrollView"; +import { LocalityCodes } from "~/shared/LocalityCodes"; + +import { HeaderSwiperOptions } from "../components/HeaderSwiperOptions"; +import { LimitedWidthContainer } from "../components/LimitedWidthContainer"; +import { SelectList } from "../components/SelectList"; + +type LanguagesType = { + title: string; + key: LocalityCodes["languageCode"]; +}; + +export function LanguagePage() { + const { t } = useTranslation(); + const { language, setLanguage } = useAppSettings(); + const [selected, setSelected] = React.useState(language); + + const languages: LanguagesType[] = [ + { title: "English", key: "en-us" }, + { title: "Português (BR)", key: "pt-br" }, + { title: "Spanish", key: "es-ar" }, + { title: "Deutsch", key: "de-ch" }, + ]; + + return ( + + setLanguage(selected)} + disableAction={selected === language} + /> + + + setSelected(arg)} /> + + + + ); +} diff --git a/src/presentation/pages/LocalAuthPage.tsx b/src/presentation/pages/LocalAuthPage.tsx new file mode 100644 index 0000000..1ebe6ab --- /dev/null +++ b/src/presentation/pages/LocalAuthPage.tsx @@ -0,0 +1,93 @@ +import { useNavigation } from "@react-navigation/native"; +import * as LocalAuthentication from "expo-local-authentication"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; + +import { getUserBalance } from "~/application/api/getUserBalance"; +import { storageKeys } from "~/application/constants/storageKeys"; +import { useBitcoinPrices } from "~/application/stores/useBitcoinPrices"; +import { useUser } from "~/application/stores/useUser"; +import { encryptStorage } from "~/application/utils/encryptStorage"; +import { localStorage } from "~/application/utils/localStorage"; +import { colors } from "~/presentation/settings/themes"; +import { RootStackParamListProps } from "~/shared/Navigation"; + +import { ButtonTitleGhost } from "../components/ButtonTitleGhost"; + +export function LocalAuthPage() { + const navigation = useNavigation(); + const { fetchTransactions, setKey, setBalance } = useUser(); + const { fetchBitcoinDataPrices } = useBitcoinPrices(); + const { t } = useTranslation(); + + const [loading, setLoading] = React.useState(false); + + async function resetRoute(navigate: keyof RootStackParamListProps) { + if (navigate === "HomePage") { + const publicKey = await encryptStorage().getItem({ key: storageKeys.publicKey }); + const resBalance = await getUserBalance(publicKey as string); + + if (resBalance.statusCode !== 200 || !resBalance.body) { + return navigation.reset({ + index: 0, + routes: [{ name: "RegisterKeyPage" }], + }); + } + + setBalance(resBalance.body?.balance); + + fetchBitcoinDataPrices(); + fetchTransactions(publicKey as string); + } + + navigation.reset({ + index: 0, + routes: [{ name: navigate }], + }); + } + + async function authenticate() { + setLoading(true); + + const isBiometricEnrolled = await LocalAuthentication.isEnrolledAsync(); + const userEnabledAuth = await localStorage().getItem({ key: storageKeys.enableLocalAuth }); + + if (!isBiometricEnrolled || !userEnabledAuth || userEnabledAuth === "off") { + resetRoute("HomePage"); + } else { + const results = await LocalAuthentication.authenticateAsync(); + if (results.success) resetRoute("HomePage"); + if (!results.success) setLoading(false); + } + } + + async function publicKeyCheck() { + const publicKey = await encryptStorage().getItem({ key: storageKeys.publicKey }); + if (!publicKey) { + resetRoute("RegisterKeyPage"); + } else { + setKey(publicKey); + authenticate(); + } + } + + React.useEffect(() => { + publicKeyCheck(); + }, []); + + return ( + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.black_100, + alignItems: "center", + justifyContent: "center", + }, +}); diff --git a/src/presentation/pages/NoInternetPage.tsx b/src/presentation/pages/NoInternetPage.tsx new file mode 100644 index 0000000..d95c740 --- /dev/null +++ b/src/presentation/pages/NoInternetPage.tsx @@ -0,0 +1,29 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; + +import { Text } from "~/presentation/components/Text"; + +import { IconNoInternet } from "../assets"; +import { spaces } from "../settings/themes"; + +export function NoInternetPage() { + const { t } = useTranslation(); + + return ( + + + + {t("no-internet-connection")} + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center", + alignItems: "center", + }, +}); diff --git a/src/presentation/pages/RegisterKeyPage.tsx b/src/presentation/pages/RegisterKeyPage.tsx new file mode 100644 index 0000000..b606e32 --- /dev/null +++ b/src/presentation/pages/RegisterKeyPage.tsx @@ -0,0 +1,108 @@ +import { useNavigation } from "@react-navigation/native"; +import * as LocalAuthentication from "expo-local-authentication"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; + +import { getUserBalance } from "~/application/api/getUserBalance"; +import { storageKeys } from "~/application/constants/storageKeys"; +import { useBitcoinPrices } from "~/application/stores/useBitcoinPrices"; +import { useUser } from "~/application/stores/useUser"; +import { encryptStorage } from "~/application/utils/encryptStorage"; +import { localStorage } from "~/application/utils/localStorage"; +import { Text } from "~/presentation/components/Text"; + +import { ButtonTitleGhost } from "../components/ButtonTitleGhost"; +import { CheckBoxMessage } from "../components/CheckBoxMessage"; +import { ScrollView } from "../components/ScrollView"; +import { colors, spaces, width } from "../settings/themes"; +import { TextFieldPaste } from "./fragments/TextFieldPaste"; + +export function RegisterKeyPage() { + const { t } = useTranslation(); + const { fetchTransactions, setKey, setBalance } = useUser(); + const { fetchBitcoinDataPrices } = useBitcoinPrices(); + const navigation = useNavigation(); + + const [showBiometricOption, setShowBiometricOption] = React.useState(false); + const [toggleCheckBox, setToggleCheckBox] = React.useState(false); + const [loading, setLoading] = React.useState(false); + const [inputPublicKey, setInputPublicKey] = React.useState(""); + const [error, setError] = React.useState({ message: "", visible: false }); + + React.useLayoutEffect(() => { + (async () => { + const compatible = await LocalAuthentication.hasHardwareAsync(); + const isBiometricEnrolled = await LocalAuthentication.isEnrolledAsync(); + setShowBiometricOption(compatible && isBiometricEnrolled); + })(); + }, []); + + async function handlerContinue() { + setLoading(true); + if (error.visible) setError({ message: "", visible: false }); + const { body, statusCode } = await getUserBalance(inputPublicKey); + + if (statusCode === 404) { + setError({ message: t("public-key-not-found"), visible: true }); + setLoading(false); + return; + } + + if (!body || statusCode !== 200) { + setError({ message: t("request-error-try-later"), visible: true }); + setLoading(false); + return; + } + fetchTransactions(inputPublicKey); + fetchBitcoinDataPrices(); + + if (toggleCheckBox) { + await localStorage().setItem({ key: storageKeys.enableLocalAuth, item: "on" }); + } + await encryptStorage().setItem({ key: storageKeys.publicKey, item: inputPublicKey }); + setKey(inputPublicKey); + setBalance(body.balance); + + navigation.reset({ + index: 0, + routes: [{ name: "HomePage" }], + }); + } + + return ( + + + {error.visible && ( + + + {error.message} + + + )} + {showBiometricOption && ( + setToggleCheckBox(!toggleCheckBox)} + message={t("use-biometrics-optional")} + /> + )} + + + ); +} + +const styles = StyleSheet.create({ + textErrorContainer: { + width: "100%", + maxWidth: width.max_width_800, + alignSelf: "center", + }, +}); diff --git a/src/presentation/pages/SettingsPage.tsx b/src/presentation/pages/SettingsPage.tsx new file mode 100644 index 0000000..0370e90 --- /dev/null +++ b/src/presentation/pages/SettingsPage.tsx @@ -0,0 +1,104 @@ +import AsyncStorage from "@react-native-async-storage/async-storage"; +import { useNavigation } from "@react-navigation/native"; +import * as Clipboard from "expo-clipboard"; +import Constants from "expo-constants"; +import * as SecureStore from "expo-secure-store"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Linking } from "react-native"; + +import { storageKeys } from "~/application/constants/storageKeys"; +import { initializeAppSettings } from "~/application/settings/initializeAppSettings"; +import { useAlertModal } from "~/application/stores/useAlertModal"; +import { useUser } from "~/application/stores/useUser"; +import { ScrollView } from "~/presentation/components/ScrollView"; +import { Text } from "~/presentation/components/Text"; + +import { ActionList } from "../components/ActionList"; +import { LimitedWidthContainer } from "../components/LimitedWidthContainer"; +import { colors, spaces } from "../settings/themes"; + +export function SettingsPage() { + const { t } = useTranslation(); + const { key, cleanUserData } = useUser(); + const { showAlert } = useAlertModal(); + const navigation = useNavigation(); + + const { currency, enableLocalAuth, language, publicKey } = storageKeys; + + async function onExit() { + await AsyncStorage.multiRemove([currency, enableLocalAuth, language]); + await SecureStore.deleteItemAsync(publicKey); + initializeAppSettings(); + cleanUserData(); + + navigation.reset({ + index: 0, + routes: [{ name: "LocalAuthPage" }], + }); + } + + const firstList = [ + { + testID: "idCopy", + title: t("copy-my-address"), + onAction: async () => await Clipboard.setStringAsync(key), + }, + ]; + + const secondList = [ + { + testID: "idLanguage", + title: t("language"), + onAction: () => navigation.navigate("LanguagePage"), + arrowVisible: true, + }, + { + testID: "idCurrency", + title: t("currency"), + onAction: () => navigation.navigate("CurrencyPage"), + arrowVisible: true, + }, + { + testID: "idTerms", + title: t("terms"), + onAction: () => navigation.navigate("TermsPage"), + arrowVisible: true, + }, + { + testID: "idSourceCode", + title: t("source-code"), + onAction: () => Linking.openURL("https://github.com/cyberkaidev/wallet-you"), + arrowVisible: true, + }, + { + testID: "idExit", + title: t("exit"), + onAction: () => { + showAlert({ title: t("do-you-really-want-to-leave"), onConfirm: () => onExit() }); + }, + arrowVisible: true, + }, + ]; + + return ( + + + + + {key} + + + + v {Constants.expoConfig?.version != null ? Constants.expoConfig.version : "-"} + + + + ); +} diff --git a/src/pages/TermsPage.tsx b/src/presentation/pages/TermsPage.tsx similarity index 70% rename from src/pages/TermsPage.tsx rename to src/presentation/pages/TermsPage.tsx index 6167464..c6f968c 100644 --- a/src/pages/TermsPage.tsx +++ b/src/presentation/pages/TermsPage.tsx @@ -1,9 +1,10 @@ -import React from 'react'; +import React from "react"; -import { LimitedWidthContainer } from '@/components/LimitedWidthContainer'; -import { ScrollView } from '@/components/ScrollView'; -import { Text } from '@/components/Text'; -import { colors, spaces } from '@/helpers/themes'; +import { ScrollView } from "~/presentation/components/ScrollView"; +import { Text } from "~/presentation/components/Text"; + +import { LimitedWidthContainer } from "../components/LimitedWidthContainer"; +import { colors, spaces } from "../settings/themes"; export function TermsPage() { return ( @@ -31,8 +32,8 @@ export function TermsPage() { 3 - How we share your information - 3.1 - We only share your public key with the {'"tatum.com"'} library so that we can - collect your balance information and transactions on the blockchain. + 3.1 - We only share your public key with the tatum.com library so that we can collect your + balance information and transactions on the blockchain. diff --git a/src/presentation/pages/TransactionPage.tsx b/src/presentation/pages/TransactionPage.tsx new file mode 100644 index 0000000..8a63dbc --- /dev/null +++ b/src/presentation/pages/TransactionPage.tsx @@ -0,0 +1,44 @@ +import { useRoute } from "@react-navigation/native"; +import React from "react"; +import { useTranslation } from "react-i18next"; + +import { useFormatDate } from "~/application/hooks/useFormatDate"; +import { ScrollView } from "~/presentation/components/ScrollView"; +import { UseRouteType } from "~/shared/Navigation"; + +import { LimitedWidthContainer } from "../components/LimitedWidthContainer"; +import { TitleSubtitle } from "../components/TitleSubtitle"; +import { spaces } from "../settings/themes"; + +export function TransactionPage() { + const { + params: { data }, + } = useRoute>(); + const { t } = useTranslation(); + + const time = useFormatDate(new Date(data.timestamp * 1000)); + + const transactionsData = [ + { + title: data.transactionType === "incoming" ? t("received") : t("sent"), + subTitle: data.amount, + }, + { title: t("date"), subTitle: time.date }, + { title: t("hour"), subTitle: time.time }, + { title: "Hash", subTitle: data.hash }, + { + title: t("block-number"), + subTitle: data.blockNumber ? data.blockNumber.toString() : "-", + }, + ]; + + return ( + + {transactionsData.map((item, index) => ( + + + + ))} + + ); +} diff --git a/src/pages/__test__/HeaderIcons.spec.tsx b/src/presentation/pages/__test__/HeaderIcons.spec.tsx similarity index 62% rename from src/pages/__test__/HeaderIcons.spec.tsx rename to src/presentation/pages/__test__/HeaderIcons.spec.tsx index 1df9fe4..668cb50 100644 --- a/src/pages/__test__/HeaderIcons.spec.tsx +++ b/src/presentation/pages/__test__/HeaderIcons.spec.tsx @@ -1,17 +1,17 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { mockedNavigation } from '../../../__test__/setup'; -import { HeaderIcons } from '../fragments/HeaderIcons'; +import { mockedNavigation } from "../../../../__test__/setup"; +import { HeaderIcons } from "../fragments/HeaderIcons"; -describe('HeaderIcons', () => { +describe("HeaderIcons", () => { const configTest = { - idSettings: 'idSettings', - title: 'My wallet', + idSettings: "idSettings", + title: "My wallet", }; - test('Render component', () => { + test("Render component", () => { const t = renderHook(() => useTranslation()); const { getByTestId, getByText } = render( @@ -23,7 +23,7 @@ describe('HeaderIcons', () => { expect(getByText(configTest.title)).toBeTruthy(); }); - test('Settings action', () => { + test("Settings action", () => { const t = renderHook(() => useTranslation()); const { getByTestId } = render( diff --git a/src/pages/__test__/MyBitcoinPrice.spec.tsx b/src/presentation/pages/__test__/MyBitcoinPrice.spec.tsx similarity index 79% rename from src/pages/__test__/MyBitcoinPrice.spec.tsx rename to src/presentation/pages/__test__/MyBitcoinPrice.spec.tsx index abd2922..7f50fdd 100644 --- a/src/pages/__test__/MyBitcoinPrice.spec.tsx +++ b/src/presentation/pages/__test__/MyBitcoinPrice.spec.tsx @@ -1,20 +1,20 @@ -import { render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { MyBitcoinPrice } from '../fragments/MyBitcoinPrice'; +import { MyBitcoinPrice } from "../fragments/MyBitcoinPrice"; -describe('MyBitcoinPrice', () => { +describe("MyBitcoinPrice", () => { const configTest = { - id: 'idMyBitcoinPrice', - idSkeleton: 'idSkeletonLoading', - title: 'Total balance', - price: '1', - balance: '1', - error: 'Request error, please try again later', + id: "idMyBitcoinPrice", + idSkeleton: "idSkeletonLoading", + title: "Total balance", + price: "1", + balance: "1", + error: "Request error, please try again later", }; - test('Success render', () => { + test("Success render", () => { const t = renderHook(() => useTranslation()); const { getByTestId, getByText, queryByTestId, queryByText } = render( @@ -31,7 +31,7 @@ describe('MyBitcoinPrice', () => { expect(queryByText(configTest.error)).not.toBeTruthy(); }); - test('Failed render', () => { + test("Failed render", () => { const t = renderHook(() => useTranslation()); const { getByTestId, getByText, queryByTestId, queryByText } = render( @@ -48,7 +48,7 @@ describe('MyBitcoinPrice', () => { expect(getByText(configTest.error)).toBeTruthy(); }); - test('Loading render', () => { + test("Loading render", () => { const t = renderHook(() => useTranslation()); const { getByTestId, getByText, queryByText, getAllByTestId } = render( diff --git a/src/pages/__test__/TextFieldPaste.spec.tsx b/src/presentation/pages/__test__/TextFieldPaste.spec.tsx similarity index 62% rename from src/pages/__test__/TextFieldPaste.spec.tsx rename to src/presentation/pages/__test__/TextFieldPaste.spec.tsx index bb88aa8..c3c4f72 100644 --- a/src/pages/__test__/TextFieldPaste.spec.tsx +++ b/src/presentation/pages/__test__/TextFieldPaste.spec.tsx @@ -1,14 +1,14 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { TextFieldPaste } from '../fragments/TextFieldPaste'; +import { TextFieldPaste } from "../fragments/TextFieldPaste"; -test('Render component', () => { +test("Render component", () => { const t = renderHook(() => useTranslation()); const configTest = { - value: 'Hello World', - id: 'idTextFieldPaste', + value: "Hello World", + id: "idTextFieldPaste", onChangeText: jest.fn(), }; diff --git a/src/pages/__test__/TransactionList.spec.tsx b/src/presentation/pages/__test__/TransactionList.spec.tsx similarity index 55% rename from src/pages/__test__/TransactionList.spec.tsx rename to src/presentation/pages/__test__/TransactionList.spec.tsx index 6c6b0e3..0b2672e 100644 --- a/src/pages/__test__/TransactionList.spec.tsx +++ b/src/presentation/pages/__test__/TransactionList.spec.tsx @@ -1,15 +1,15 @@ -import { act, render } from '@testing-library/react-native'; -import React from 'react'; +import { act, render } from "@testing-library/react-native"; +import React from "react"; -import { TransactionList } from '../fragments/TransactionList'; +import { TransactionList } from "../fragments/TransactionList"; -test('Render component and action', () => { +test("Render component and action", () => { const configTest = { - idTransactionList: 'idTransactionList', - idButton: 'id0', - date: '12/12/2023', - time: '12:00 PM', - price: '+ 1 BTC', + idTransactionList: "idTransactionList", + idButton: "id0", + date: "12/12/2023", + time: "12:00 PM", + price: "+ 1 BTC", }; const { getByTestId, getAllByText } = render(); diff --git a/src/pages/fragments/Chart.tsx b/src/presentation/pages/fragments/Chart.tsx similarity index 56% rename from src/pages/fragments/Chart.tsx rename to src/presentation/pages/fragments/Chart.tsx index fda8154..4e0226c 100644 --- a/src/pages/fragments/Chart.tsx +++ b/src/presentation/pages/fragments/Chart.tsx @@ -1,17 +1,25 @@ -import * as shape from 'd3-shape'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; -import { Path } from 'react-native-svg'; -import { AreaChart } from 'react-native-svg-charts'; +import * as shape from "d3-shape"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; +import { Path } from "react-native-svg"; +import { AreaChart } from "react-native-svg-charts"; -import { SkeletonLoading } from '@/components/SkeletonLoading'; -import { Text } from '@/components/Text'; -import { borderRadius, colors, spaces } from '@/helpers/themes'; -import { useFormatCurrency } from '@/hooks/useFormatCurrency'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { useBitcoinHistoricalPrice } from '@/stores/useBitcoinHistoricalPrice'; -import { ChartProps, LinePathProps } from '@/types/ChartTypes'; +import { useFormatCurrency } from "~/application/hooks/useFormatCurrency"; +import { useAppSettings } from "~/application/stores/useAppSettings"; +import { usePriceHistoryBitcoin } from "~/application/stores/usePriceHistoryBitcoin"; +import { SkeletonLoading } from "~/presentation/components/SkeletonLoading"; +import { Text } from "~/presentation/components/Text"; +import { borderRadius, colors, spaces } from "~/presentation/settings/themes"; + +export type LinePathProps = { + line?: string; +}; + +export type ChartProps = { + price?: number; + priceStatus: "loading" | "success" | "failed"; +}; function LinePath({ line }: LinePathProps) { return ( @@ -29,7 +37,7 @@ function LinePath({ line }: LinePathProps) { export function Chart({ price, priceStatus }: ChartProps) { const { t } = useTranslation(); const { isTablet } = useAppSettings(); - const { fetchBitcoinHistoricalPrice, status, data } = useBitcoinHistoricalPrice(); + const { fetchBitcoinHistoricalPrice, status, data } = usePriceHistoryBitcoin(); const currentPrice = React.useMemo(() => { if (price) return useFormatCurrency(price); @@ -40,7 +48,7 @@ export function Chart({ price, priceStatus }: ChartProps) { if (status === null) fetchBitcoinHistoricalPrice(); }, []); - if (priceStatus === 'loading' && (status === 'loading' || status === null)) { + if (priceStatus === "loading" && (status === "loading" || status === null)) { return ; } @@ -53,14 +61,14 @@ export function Chart({ price, priceStatus }: ChartProps) { > - {t('today')} + {t("today")} {currentPrice} - {status === 'success' && ( + {status === "success" && ( )} - {status === 'failed' && } + {status === "failed" && } ); } const styles = StyleSheet.create({ container: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', + flexDirection: "row", + justifyContent: "space-between", + alignItems: "center", backgroundColor: colors.black_000, paddingHorizontal: spaces.horizontal.m, paddingVertical: spaces.vertical.s, diff --git a/src/presentation/pages/fragments/HeaderIcons.tsx b/src/presentation/pages/fragments/HeaderIcons.tsx new file mode 100644 index 0000000..885ac02 --- /dev/null +++ b/src/presentation/pages/fragments/HeaderIcons.tsx @@ -0,0 +1,44 @@ +import { useNavigation } from "@react-navigation/native"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; + +import { deviceCharacteristics } from "~/application/utils/deviceCharacteristics"; +import { IconSettings } from "~/presentation/assets"; +import { ButtonIcon } from "~/presentation/components/ButtonIcon"; +import { Text } from "~/presentation/components/Text"; +import { colors } from "~/presentation/settings/themes"; + +export function HeaderIcons() { + const navigation = useNavigation(); + const { t } = useTranslation(); + + return ( + + + + {t("my-wallet")} + + + navigation.navigate("SettingsPage")}> + + + + ); +} + +const styles = StyleSheet.create({ + container: { + position: "relative", + flexDirection: "row", + justifyContent: "flex-end", + alignItems: "center", + marginTop: deviceCharacteristics().STATUS_BAR_HEIGHT, + }, + center: { + position: "absolute", + alignItems: "center", + left: 0, + right: 0, + }, +}); diff --git a/src/presentation/pages/fragments/MyBitcoinPrice.tsx b/src/presentation/pages/fragments/MyBitcoinPrice.tsx new file mode 100644 index 0000000..b190df9 --- /dev/null +++ b/src/presentation/pages/fragments/MyBitcoinPrice.tsx @@ -0,0 +1,61 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; +import { heightPercentageToDP as hp } from "react-native-responsive-screen"; + +import { SkeletonLoading } from "~/presentation/components/SkeletonLoading"; +import { Text } from "~/presentation/components/Text"; +import { colors, spaces } from "~/presentation/settings/themes"; + +type Props = { + price: string; + balance: string; + status: "loading" | "success" | "failed" | null; +}; + +export function MyBitcoinPrice({ price, balance, status }: Props) { + const { t } = useTranslation(); + + return ( + + {status !== "failed" && {t("total-balance")}} + + {status === "success" && ( + + + {price} + + + {balance} BTC + + + )} + + {status === "failed" && {t("request-error-try-later")}} + + {(status === "loading" || status === null) && ( + + + + + )} + + ); +} + +const styles = StyleSheet.create({ + container: { + alignItems: "center", + paddingVertical: hp("22%"), + }, +}); diff --git a/src/pages/fragments/TextFieldPaste.tsx b/src/presentation/pages/fragments/TextFieldPaste.tsx similarity index 61% rename from src/pages/fragments/TextFieldPaste.tsx rename to src/presentation/pages/fragments/TextFieldPaste.tsx index c186b05..bcda06d 100644 --- a/src/pages/fragments/TextFieldPaste.tsx +++ b/src/presentation/pages/fragments/TextFieldPaste.tsx @@ -1,15 +1,19 @@ -import * as Clipboard from 'expo-clipboard'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, TextInput, View } from 'react-native'; -import { widthPercentageToDP as wp } from 'react-native-responsive-screen'; +import * as Clipboard from "expo-clipboard"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, TextInput, View } from "react-native"; +import { widthPercentageToDP as wp } from "react-native-responsive-screen"; -import { ButtonTitleGhost } from '@/components/ButtonTitleGhost'; -import { borderRadius, colors, fontSizes, spaces, width } from '@/helpers/themes'; -import { useAppSettings } from '@/stores/useAppSettings'; -import { TextFieldPasteProps } from '@/types/RegisterKeyPageType'; +import { useAppSettings } from "~/application/stores/useAppSettings"; +import { ButtonTitleGhost } from "~/presentation/components/ButtonTitleGhost"; +import { borderRadius, colors, fontSizes, spaces, width } from "~/presentation/settings/themes"; -export function TextFieldPaste({ value, onChangeText }: TextFieldPasteProps) { +type Props = { + value: string; + onChangeText: (arg: string) => void; +}; + +export function TextFieldPaste({ value, onChangeText }: Props) { const { t } = useTranslation(); const { isTablet } = useAppSettings(); @@ -35,7 +39,7 @@ export function TextFieldPaste({ value, onChangeText }: TextFieldPasteProps) { testID="idTextFieldPaste" value={value} onChangeText={onChangeText} - placeholder={t('public-key-btc')} + placeholder={t("public-key-btc")} onFocus={() => setIsFocused(true)} onBlur={() => setIsFocused(false)} autoCapitalize="none" @@ -49,7 +53,7 @@ export function TextFieldPaste({ value, onChangeText }: TextFieldPasteProps) { maxLength={150} /> state.transactions); + const { data, status } = useUser(state => state.transactions); const { isTablet } = useAppSettings(); const navigation = useNavigation(); - if (status === 'failed' || (status === 'success' && data.length === 0)) return ; + if (status === "failed" || (status === "success" && data.length === 0)) return ; return ( - {t('transactions')} + {t("transactions")} - {(status === 'loading' || status === null) && ( + {(status === "loading" || status === null) && ( - {status === 'success' && + {status === "success" && data.map((item, index) => { - if (item.transactionType === 'zero-transfer') return; + if (item.transactionType === "zero-transfer") return; return ( navigation.navigate('TransactionPage', { data: item })} + onPress={() => navigation.navigate("TransactionPage", { data: item })} > - {item.transactionType === 'incoming' && } - {item.transactionType === 'outgoing' && } + {item.transactionType === "incoming" && } + {item.transactionType === "outgoing" && } - {item.transactionType === 'incoming' ? '+ ' : '- '} {item.amount} BTC + {item.transactionType === "incoming" ? "+ " : "- "} {item.amount} BTC - + ); @@ -86,9 +86,9 @@ export function TransactionList() { const styles = StyleSheet.create({ container: { - width: '100%', + width: "100%", maxWidth: width.max_width_800, - alignSelf: 'center', + alignSelf: "center", marginTop: spaces.vertical.m, }, transactionContainer: { @@ -96,33 +96,33 @@ const styles = StyleSheet.create({ }, button: { flex: 1, - flexDirection: 'row', + flexDirection: "row", paddingLeft: spaces.horizontal.s, }, iconStatus: { width: 50, - justifyContent: 'center', - alignItems: 'center', + justifyContent: "center", + alignItems: "center", marginRight: spaces.horizontal.s, }, item: { flex: 1, - flexDirection: 'row', - alignItems: 'center', + flexDirection: "row", + alignItems: "center", borderBottomWidth: 1, - borderStyle: 'solid', + borderStyle: "solid", paddingVertical: spaces.vertical.m, paddingRight: spaces.horizontal.m, }, row: { flex: 1, - flexDirection: 'row', - alignItems: 'center', + flexDirection: "row", + alignItems: "center", paddingRight: spaces.horizontal.s, }, labels: { flex: 1, - justifyContent: 'center', - alignItems: 'flex-start', + justifyContent: "center", + alignItems: "flex-start", }, }); diff --git a/src/routes/RootStack.tsx b/src/presentation/routes/RootStack.tsx similarity index 56% rename from src/routes/RootStack.tsx rename to src/presentation/routes/RootStack.tsx index db50539..8972596 100644 --- a/src/routes/RootStack.tsx +++ b/src/presentation/routes/RootStack.tsx @@ -1,23 +1,23 @@ -import { useNetInfo } from '@react-native-community/netinfo'; -import { createStackNavigator, TransitionPresets } from '@react-navigation/stack'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; +import { useNetInfo } from "@react-native-community/netinfo"; +import { createStackNavigator, TransitionPresets } from "@react-navigation/stack"; +import React from "react"; +import { useTranslation } from "react-i18next"; -import { colors } from '@/helpers/themes'; -import { CurrencyPage } from '@/pages/CurrencyPage'; -import { HomePage } from '@/pages/HomePage'; -import { LanguagePage } from '@/pages/LanguagePage'; -import { LocalAuthPage } from '@/pages/LocalAuthPage'; -import { NoInternetPage } from '@/pages/NoInternetPage'; -import { RegisterKeyPage } from '@/pages/RegisterKeyPage'; -import { SettingsPage } from '@/pages/SettingsPage'; -import { TermsPage } from '@/pages/TermsPage'; -import { TransactionPage } from '@/pages/TransactionPage'; -import { RootStackParamListProps } from '@/types/RoutesType'; +import { RootStackParamListProps } from "~/shared/Navigation"; -import { HeaderBack } from './fragments/HeaderBack'; -import { HeaderSwiperIndicator } from './fragments/HeaderSwiperIndicator'; -import { HeaderTitle } from './fragments/HeaderTitle'; +import { CurrencyPage } from "../pages/CurrencyPage"; +import { HomePage } from "../pages/HomePage"; +import { LanguagePage } from "../pages/LanguagePage"; +import { LocalAuthPage } from "../pages/LocalAuthPage"; +import { NoInternetPage } from "../pages/NoInternetPage"; +import { RegisterKeyPage } from "../pages/RegisterKeyPage"; +import { SettingsPage } from "../pages/SettingsPage"; +import { TermsPage } from "../pages/TermsPage"; +import { TransactionPage } from "../pages/TransactionPage"; +import { colors } from "../settings/themes"; +import { HeaderBack } from "./fragments/HeaderBack"; +import { HeaderSwiperIndicator } from "./fragments/HeaderSwiperIndicator"; +import { HeaderTitle } from "./fragments/HeaderTitle"; const Stack = createStackNavigator(); @@ -33,7 +33,7 @@ export function RootStack() { return ( , headerShown: true }} + options={{ header: () => , headerShown: true }} /> , + header: () => , headerShown: true, ...optionsScreenIOS, }} @@ -82,7 +82,7 @@ export function RootStack() { name="TermsPage" component={TermsPage} options={{ - header: () => , + header: () => , headerShown: true, ...optionsScreenIOS, }} diff --git a/src/routes/__test__/HeaderBack.spec.tsx b/src/presentation/routes/__test__/HeaderBack.spec.tsx similarity index 50% rename from src/routes/__test__/HeaderBack.spec.tsx rename to src/presentation/routes/__test__/HeaderBack.spec.tsx index b85dc6a..8bd4d23 100644 --- a/src/routes/__test__/HeaderBack.spec.tsx +++ b/src/presentation/routes/__test__/HeaderBack.spec.tsx @@ -1,12 +1,12 @@ -import { render } from '@testing-library/react-native'; -import React from 'react'; +import { render } from "@testing-library/react-native"; +import React from "react"; -import { HeaderBack } from '../fragments/HeaderBack'; +import { HeaderBack } from "../fragments/HeaderBack"; -test('Render component', () => { +test("Render component", () => { const configTest = { - title: 'Hello World', - id: 'idHeaderBack', + title: "Hello World", + id: "idHeaderBack", }; const { getByText, getByTestId } = render(); diff --git a/src/routes/__test__/HeaderSwiperIndicator.spec.tsx b/src/presentation/routes/__test__/HeaderSwiperIndicator.spec.tsx similarity index 54% rename from src/routes/__test__/HeaderSwiperIndicator.spec.tsx rename to src/presentation/routes/__test__/HeaderSwiperIndicator.spec.tsx index 4cc7cce..faf8908 100644 --- a/src/routes/__test__/HeaderSwiperIndicator.spec.tsx +++ b/src/presentation/routes/__test__/HeaderSwiperIndicator.spec.tsx @@ -1,20 +1,20 @@ -import { fireEvent, render, renderHook } from '@testing-library/react-native'; -import React from 'react'; -import { I18nextProvider, useTranslation } from 'react-i18next'; +import { fireEvent, render, renderHook } from "@testing-library/react-native"; +import React from "react"; +import { I18nextProvider, useTranslation } from "react-i18next"; -import { mockedNavigation } from '../../../__test__/setup'; -import { HeaderSwiperIndicator } from '../fragments/HeaderSwiperIndicator'; +import { mockedNavigation } from "../../../../__test__/setup"; +import { HeaderSwiperIndicator } from "../fragments/HeaderSwiperIndicator"; -describe('HeaderSwiperIndicator', () => { +describe("HeaderSwiperIndicator", () => { const t = renderHook(() => useTranslation()); const configTest = { - title: 'Hello World', - id: 'idHeaderSwiperIndicator', - idButtonLeft: 'idButtonLeft', + title: "Hello World", + id: "idHeaderSwiperIndicator", + idButtonLeft: "idButtonLeft", }; - test('Render component', () => { + test("Render component", () => { const { getByText, getByTestId } = render( @@ -25,7 +25,7 @@ describe('HeaderSwiperIndicator', () => { expect(getByTestId(configTest.id)).toBeTruthy(); }); - test('Action', () => { + test("Action", () => { const { getByTestId } = render(); const button = getByTestId(configTest.idButtonLeft); fireEvent.press(button); diff --git a/src/routes/__test__/HeaderTitle.spec.tsx b/src/presentation/routes/__test__/HeaderTitle.spec.tsx similarity index 50% rename from src/routes/__test__/HeaderTitle.spec.tsx rename to src/presentation/routes/__test__/HeaderTitle.spec.tsx index bc2c475..ff1317a 100644 --- a/src/routes/__test__/HeaderTitle.spec.tsx +++ b/src/presentation/routes/__test__/HeaderTitle.spec.tsx @@ -1,12 +1,12 @@ -import { render } from '@testing-library/react-native'; -import React from 'react'; +import { render } from "@testing-library/react-native"; +import React from "react"; -import { HeaderTitle } from '../fragments/HeaderTitle'; +import { HeaderTitle } from "../fragments/HeaderTitle"; -test('Render component', () => { +test("Render component", () => { const configTest = { - title: 'Hello World', - id: 'idHeaderTitle', + title: "Hello World", + id: "idHeaderTitle", }; const { getByText, getByTestId } = render(); diff --git a/src/presentation/routes/fragments/HeaderBack.tsx b/src/presentation/routes/fragments/HeaderBack.tsx new file mode 100644 index 0000000..442d489 --- /dev/null +++ b/src/presentation/routes/fragments/HeaderBack.tsx @@ -0,0 +1,61 @@ +import { useNavigation } from "@react-navigation/native"; +import React from "react"; +import { StyleSheet, View } from "react-native"; +import { heightPercentageToDP as hp } from "react-native-responsive-screen"; + +import { deviceCharacteristics } from "~/application/utils/deviceCharacteristics"; +import { IconArrowLeft } from "~/presentation/assets"; +import { ButtonIcon } from "~/presentation/components/ButtonIcon"; +import { Text } from "~/presentation/components/Text"; +import { colors, scaffold } from "~/presentation/settings/themes"; + +type Props = { + title: string; +}; + +export function HeaderBack({ title }: Props) { + const navigation = useNavigation(); + const { STATUS_BAR_HEIGHT } = deviceCharacteristics(); + + const useHeightHeader = React.useMemo(() => hp("8%") + STATUS_BAR_HEIGHT, []); + + return ( + + + navigation.goBack()}> + + + + + + {title} + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + width: "100%", + backgroundColor: colors.black_100, + justifyContent: "flex-end", + }, + content: { + position: "relative", + width: "100%", + height: hp("8%"), + paddingHorizontal: scaffold.header_space_horizontal, + flexDirection: "row", + justifyContent: "flex-start", + alignItems: "center", + }, + title: { + zIndex: -1, + left: 0, + right: 0, + position: "absolute", + alignItems: "center", + }, +}); diff --git a/src/routes/fragments/HeaderSwiperIndicator.tsx b/src/presentation/routes/fragments/HeaderSwiperIndicator.tsx similarity index 52% rename from src/routes/fragments/HeaderSwiperIndicator.tsx rename to src/presentation/routes/fragments/HeaderSwiperIndicator.tsx index 3807b8c..c404ff2 100644 --- a/src/routes/fragments/HeaderSwiperIndicator.tsx +++ b/src/presentation/routes/fragments/HeaderSwiperIndicator.tsx @@ -1,18 +1,21 @@ -import { useNavigation } from '@react-navigation/native'; -import React from 'react'; -import { useTranslation } from 'react-i18next'; -import { StyleSheet, View } from 'react-native'; +import { useNavigation } from "@react-navigation/native"; +import React from "react"; +import { useTranslation } from "react-i18next"; +import { StyleSheet, View } from "react-native"; import { heightPercentageToDP as hp, widthPercentageToDP as wp, -} from 'react-native-responsive-screen'; +} from "react-native-responsive-screen"; -import { ButtonTitleGhost } from '@/components/ButtonTitleGhost'; -import { Text } from '@/components/Text'; -import { borderRadius, colors, scaffold, spaces } from '@/helpers/themes'; -import { HeaderSwiperIndicatorProps } from '@/types/HeaderSwiperIndicatorType'; +import { ButtonTitleGhost } from "~/presentation/components/ButtonTitleGhost"; +import { Text } from "~/presentation/components/Text"; +import { borderRadius, colors, scaffold, spaces } from "~/presentation/settings/themes"; -export function HeaderSwiperIndicator({ title }: HeaderSwiperIndicatorProps) { +type Props = { + title: string; +}; + +export function HeaderSwiperIndicator({ title }: Props) { const navigation = useNavigation(); const { t } = useTranslation(); @@ -27,7 +30,7 @@ export function HeaderSwiperIndicator({ title }: HeaderSwiperIndicatorProps) { navigation.goBack()} @@ -41,28 +44,28 @@ const styles = StyleSheet.create({ container: { backgroundColor: colors.black_100, paddingVertical: spaces.vertical.xs, - alignItems: 'center', - width: '100%', + alignItems: "center", + width: "100%", }, title: { - position: 'absolute', - alignItems: 'center', + position: "absolute", + alignItems: "center", left: 0, right: 0, }, indicator: { - width: wp('10%'), - height: hp('0.6%'), + width: wp("10%"), + height: hp("0.6%"), borderRadius: borderRadius.radius_10, marginBottom: spaces.vertical.xs, backgroundColor: colors.dark_grey, }, content: { - width: '100%', + width: "100%", paddingHorizontal: scaffold.header_space_horizontal, - justifyContent: 'space-between', - alignItems: 'center', - flexDirection: 'row', - position: 'relative', + justifyContent: "space-between", + alignItems: "center", + flexDirection: "row", + position: "relative", }, }); diff --git a/src/presentation/routes/fragments/HeaderTitle.tsx b/src/presentation/routes/fragments/HeaderTitle.tsx new file mode 100644 index 0000000..ce7ab89 --- /dev/null +++ b/src/presentation/routes/fragments/HeaderTitle.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import { StyleSheet, View } from "react-native"; +import { heightPercentageToDP as hp } from "react-native-responsive-screen"; + +import { deviceCharacteristics } from "~/application/utils/deviceCharacteristics"; +import { Text } from "~/presentation/components/Text"; +import { colors, scaffold } from "~/presentation/settings/themes"; + +type Props = { + title: string; +}; + +export function HeaderTitle({ title }: Props) { + const { STATUS_BAR_HEIGHT } = deviceCharacteristics(); + + const useHeightHeader = React.useMemo(() => hp("8%") + STATUS_BAR_HEIGHT, []); + + return ( + + + + {title} + + + + ); +} + +const styles = StyleSheet.create({ + container: { + width: "100%", + backgroundColor: colors.black_100, + justifyContent: "flex-end", + }, + content: { + width: "100%", + height: hp("8%"), + paddingHorizontal: scaffold.header_space_horizontal, + justifyContent: "center", + alignItems: "center", + }, +}); diff --git a/src/presentation/settings/textUtils.ts b/src/presentation/settings/textUtils.ts new file mode 100644 index 0000000..463f6ae --- /dev/null +++ b/src/presentation/settings/textUtils.ts @@ -0,0 +1,37 @@ +import { SchemeText } from "~/shared/Styles"; + +import { fontSizes } from "./themes"; + +type Props = { + weight: SchemeText["weight"]; + size: SchemeText["fontSize"]; +}; + +type TextUtils = { + onFontFamily: () => SchemeText["fontFamily"]; + onFontSize: () => string; +}; + +export function textUtils({ weight, size }: Props): TextUtils { + function onFontFamily() { + switch (weight) { + case "regular": + return "Figtree-Regular"; + case "medium": + return "Figtree-Medium"; + case "bold": + return "Figtree-Bold"; + default: + return "Figtree-Regular"; + } + } + + function onFontSize() { + return fontSizes[size]; + } + + return { + onFontFamily, + onFontSize, + }; +} diff --git a/src/presentation/settings/themes.ts b/src/presentation/settings/themes.ts new file mode 100644 index 0000000..cb97e47 --- /dev/null +++ b/src/presentation/settings/themes.ts @@ -0,0 +1,60 @@ +import { + heightPercentageToDP as hp, + widthPercentageToDP as wp, +} from "react-native-responsive-screen"; + +export const width = { + max_width_800: 800, + max_width_500: 500, +}; + +export const borderRadius = { + radius_10: 10, + radius_15: 15, + radius_25: 25, +}; + +export const spaces = { + horizontal: { + xs: wp("2%"), + s: wp("3%"), + m: wp("4%"), + l: wp("5%"), + }, + vertical: { + xs: hp("1%"), + s: hp("2%"), + m: hp("3%"), + l: hp("4%"), + }, +}; + +export const fontSizes = { + xs: "2.5%", + s: "3%", + m: "3.5%", + l: "4.5%", + xl: "5%", + xxl: "6.5%", + xxxl: "9%", +}; + +export const colors = { + white: "#FFFFFF", + white_10pct: "rgba(255, 255, 255, 0.10)", + green: "#ACD9A8", + red: "#E17C7C", + light_cyan: "#B4C9FF", + dark_cyan: "#3E4454", + black_100: "#191B1F", + black_000: "#222329", + light_grey: "#BFBFBF", + dark_grey: "#616670", + black_100_50pct: "rgba(25, 27, 31, 0.50)", + transparent: "transparent", +}; + +export const scaffold = { + page_space_horizontal: wp("5%"), + header_space_horizontal: wp("3%"), +}; diff --git a/src/routes/fragments/HeaderBack.tsx b/src/routes/fragments/HeaderBack.tsx deleted file mode 100644 index a40ad29..0000000 --- a/src/routes/fragments/HeaderBack.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useNavigation } from '@react-navigation/native'; -import React from 'react'; -import { StyleSheet, View } from 'react-native'; -import { heightPercentageToDP as hp } from 'react-native-responsive-screen'; - -import { IconArrowLeft } from '@/assets'; -import { ButtonIcon } from '@/components/ButtonIcon'; -import { Text } from '@/components/Text'; -import { statusBarHeight } from '@/helpers/statusBarHeight'; -import { colors, scaffold } from '@/helpers/themes'; -import { HeaderTitleProps } from '@/types/HeaderTitleType'; - -export function HeaderBack({ title }: HeaderTitleProps) { - const navigation = useNavigation(); - - const useHeightHeader = React.useMemo(() => hp('8%') + statusBarHeight, []); - - return ( - - - navigation.goBack()}> - - - - - - {title} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - width: '100%', - backgroundColor: colors.black_100, - justifyContent: 'flex-end', - }, - content: { - position: 'relative', - width: '100%', - height: hp('8%'), - paddingHorizontal: scaffold.header_space_horizontal, - flexDirection: 'row', - justifyContent: 'flex-start', - alignItems: 'center', - }, - title: { - zIndex: -1, - left: 0, - right: 0, - position: 'absolute', - alignItems: 'center', - }, -}); diff --git a/src/routes/fragments/HeaderTitle.tsx b/src/routes/fragments/HeaderTitle.tsx deleted file mode 100644 index f904b05..0000000 --- a/src/routes/fragments/HeaderTitle.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react'; -import { StyleSheet, View } from 'react-native'; -import { heightPercentageToDP as hp } from 'react-native-responsive-screen'; - -import { statusBarHeight } from '@/helpers/statusBarHeight'; -import { colors, scaffold } from '@/helpers/themes'; -import { HeaderTitleProps } from '@/types/HeaderTitleType'; - -import { Text } from '../../components/Text'; - -export function HeaderTitle({ title }: HeaderTitleProps) { - const useHeightHeader = React.useMemo(() => hp('8%') + statusBarHeight, []); - - return ( - - - - {title} - - - - ); -} - -const styles = StyleSheet.create({ - container: { - width: '100%', - backgroundColor: colors.black_100, - justifyContent: 'flex-end', - }, - content: { - width: '100%', - height: hp('8%'), - paddingHorizontal: scaffold.header_space_horizontal, - justifyContent: 'center', - alignItems: 'center', - }, -}); diff --git a/src/services/getBitcoinBalance.ts b/src/services/getBitcoinBalance.ts deleted file mode 100644 index 61d4036..0000000 --- a/src/services/getBitcoinBalance.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import axios from 'axios'; - -import { useUserData } from '@/stores/useUserData'; - -export async function getBitcoinBalance(address: string) { - const { setBalance } = useUserData.getState(); - - try { - const { data } = await axios.get(`https://${process.env.EXPO_PUBLIC_API}/v1/get-balance`, { - params: { publicKey: address }, - }); - - setBalance(data.balance); - } catch (error: any) { - return error?.response?.data?.error ?? 'INTERNAL_ERROR'; - } -} diff --git a/src/services/getBitcoinDataPrices.ts b/src/services/getBitcoinDataPrices.ts deleted file mode 100644 index 8723c32..0000000 --- a/src/services/getBitcoinDataPrices.ts +++ /dev/null @@ -1,20 +0,0 @@ -import axios from 'axios'; - -import { ResponseData } from '@/types/GetBitcoinDataPricesType'; - -export async function getBitcoinDataPrices() { - try { - const { data }: ResponseData = await axios.get( - 'https://api.coingecko.com/api/v3/coins/bitcoin', - { - headers: { - 'Content-Type': 'application/json', - }, - }, - ); - - return data.market_data.current_price; - } catch (err) { - throw new Error('error-get-bitcoin-data-prices'); - } -} diff --git a/src/services/getBitcoinHistoricalPrice.ts b/src/services/getBitcoinHistoricalPrice.ts deleted file mode 100644 index d03a3b5..0000000 --- a/src/services/getBitcoinHistoricalPrice.ts +++ /dev/null @@ -1,25 +0,0 @@ -import axios from 'axios'; - -import { ResponseData } from '@/types/GetBitcoinHistoricalPriceType'; - -export async function getBitcoinHistoricalPrice() { - try { - const { data }: ResponseData = await axios.get( - 'https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=1', - { - headers: { - 'Content-Type': 'application/json', - }, - }, - ); - - if (data.prices.length === 0) throw new Error('error get-bitcoin-historical-price'); - - return data.prices.slice(-20).map(item => ({ - date: new Date(item[0]), - value: item[1], - })); - } catch (err) { - throw new Error('error get-bitcoin-historical-price'); - } -} diff --git a/src/services/getBitcoinTransactions.ts b/src/services/getBitcoinTransactions.ts deleted file mode 100644 index 250507c..0000000 --- a/src/services/getBitcoinTransactions.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import axios from 'axios'; - -export async function getBitcoinTransactions(address: string) { - try { - const { data } = await axios.get(`https://${process.env.EXPO_PUBLIC_API}/v1/get-transactions`, { - params: { publicKey: address }, - }); - - return data.transactions; - } catch (error: any) { - throw new Error(error?.response?.data?.error ?? 'INTERNAL_ERROR'); - } -} diff --git a/src/shared/LocalityCodes.ts b/src/shared/LocalityCodes.ts new file mode 100644 index 0000000..bba4d89 --- /dev/null +++ b/src/shared/LocalityCodes.ts @@ -0,0 +1,4 @@ +export type LocalityCodes = { + currencyCode: "aud" | "brl" | "cad" | "eur" | "gbp" | "usd"; + languageCode: "de-ch" | "en-us" | "es-ar" | "pt-br"; +}; diff --git a/src/types/RoutesType.ts b/src/shared/Navigation.ts similarity index 77% rename from src/types/RoutesType.ts rename to src/shared/Navigation.ts index c5621a7..5b8ba3f 100644 --- a/src/types/RoutesType.ts +++ b/src/shared/Navigation.ts @@ -1,6 +1,6 @@ -import { RouteProp } from '@react-navigation/native'; +import { RouteProp } from "@react-navigation/native"; -import { Transaction } from './UseUserDataType'; +import { TransactionModel } from "~/data/models/BitcoinRepositoryModel"; export type RootStackParamListProps = { RegisterKeyPage: undefined; @@ -8,7 +8,7 @@ export type RootStackParamListProps = { HomePage: undefined; ChartPage: undefined; TransactionPage: { - data: Transaction; + data: TransactionModel; }; SettingsPage: undefined; LanguagePage: undefined; diff --git a/src/shared/Styles.ts b/src/shared/Styles.ts new file mode 100644 index 0000000..c2320eb --- /dev/null +++ b/src/shared/Styles.ts @@ -0,0 +1,32 @@ +export type SchemeText = { + weight: "regular" | "medium" | "bold"; + fontFamily: "Figtree-Regular" | "Figtree-Medium" | "Figtree-Bold"; + fontSize: "xs" | "s" | "m" | "l" | "xl" | "xxl" | "xxxl"; +}; + +export type IconProps = { + color?: string; + porcentSize?: string; +}; + +export type ButtonIconProps = { + testID?: string; + children: React.ReactNode; + onPress: () => void; + disabled?: boolean; + marginT?: number; + marginB?: number; + marginR?: number; + marginL?: number; +}; + +export type ButtonTitleGhostProps = { + testID?: string; + children: React.ReactNode | React.ReactNode[]; + onPress: () => void; + disabled?: boolean; + marginT?: number; + marginB?: number; + marginR?: number; + marginL?: number; +}; diff --git a/src/stores/useAlertModal.ts b/src/stores/useAlertModal.ts deleted file mode 100644 index 4b18201..0000000 --- a/src/stores/useAlertModal.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { create } from 'zustand'; - -import { UseModalAlertProps } from '@/types/UseModalAlertType'; - -export const useAlertModal = create(set => ({ - visible: false, - title: '', - onCancel: undefined, - onConfirm: undefined, - showAlert: props => set({ ...props, visible: true }), - hideAlert: () => set({ visible: false, title: '', onCancel: undefined, onConfirm: undefined }), -})); diff --git a/src/stores/useAppSettings.ts b/src/stores/useAppSettings.ts deleted file mode 100644 index bf75ff0..0000000 --- a/src/stores/useAppSettings.ts +++ /dev/null @@ -1,27 +0,0 @@ -import AsyncStorage from '@react-native-async-storage/async-storage'; -import * as Device from 'expo-device'; -import i18n from 'i18next'; -import { create } from 'zustand'; - -import { storageKeys } from '@/helpers/storageKeys'; -import { UseAppSettingsProps } from '@/types/UseAppSettingsType'; - -export const useAppSettings = create(set => ({ - currency: 'usd', - language: 'en-us', - isTablet: null, - setCurrency: param => { - set({ currency: param }); - AsyncStorage.setItem(storageKeys.currency, param); - }, - setLanguage: param => { - set({ language: param }); - AsyncStorage.setItem(storageKeys.language, param); - i18n.changeLanguage(param); - }, - setIsTablet: async () => { - const deviceType = await Device.getDeviceTypeAsync(); - const isTablet = Device.DeviceType[deviceType] == 'TABLET'; - set({ isTablet: isTablet }); - }, -})); diff --git a/src/stores/useBitcoinDataPrices.ts b/src/stores/useBitcoinDataPrices.ts deleted file mode 100644 index f47de3b..0000000 --- a/src/stores/useBitcoinDataPrices.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { create } from 'zustand'; - -import { getBitcoinDataPrices } from '@/services/getBitcoinDataPrices'; -import { UseBitcoinDataPricesProps } from '@/types/UseBitcoinDataPricesType'; - -export const useBitcoinDataPrices = create(set => ({ - currentPrice: null, - status: null, - fetchBitcoinDataPrices: async () => { - try { - const response = await getBitcoinDataPrices(); - set({ currentPrice: response, status: 'success' }); - } catch (error) { - set({ status: 'failed' }); - } - }, -})); diff --git a/src/stores/useBitcoinHistoricalPrice.ts b/src/stores/useBitcoinHistoricalPrice.ts deleted file mode 100644 index ba50a4b..0000000 --- a/src/stores/useBitcoinHistoricalPrice.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { create } from 'zustand'; - -import { getBitcoinHistoricalPrice } from '@/services/getBitcoinHistoricalPrice'; -import { UseBitcoinHistoricalPriceProps } from '@/types/UseBitcoinHistoricalPriceType'; - -export const useBitcoinHistoricalPrice = create(set => ({ - data: [], - status: null, - fetchBitcoinHistoricalPrice: async () => { - try { - const response = await getBitcoinHistoricalPrice(); - set({ data: response, status: 'success' }); - } catch (error) { - set({ status: 'failed' }); - } - }, -})); diff --git a/src/stores/useUserData.ts b/src/stores/useUserData.ts deleted file mode 100644 index ae2bab7..0000000 --- a/src/stores/useUserData.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { create } from 'zustand'; - -import { getBitcoinTransactions } from '@/services/getBitcoinTransactions'; -import { UseUserDataProps } from '@/types/UseUserDataType'; - -export const useUserData = create(set => ({ - key: '', - balance: '0', - transactions: { - data: [], - status: null, - }, - setKey: param => set({ key: param }), - setBalance: param => set({ balance: param }), - fetchTransactions: async param => { - try { - const response = await getBitcoinTransactions(param); - set({ transactions: { data: response, status: 'success' } }); - } catch (_) { - set({ transactions: { data: [], status: 'failed' } }); - } - }, - cleanUserData: () => set({ key: '', balance: '0', transactions: { data: [], status: null } }), -})); diff --git a/src/translate/i18n.ts b/src/translate/i18n.ts deleted file mode 100644 index f1fcaf0..0000000 --- a/src/translate/i18n.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { getLocales } from 'expo-localization'; -import i18n from 'i18next'; -import { initReactI18next } from 'react-i18next'; - -import DE_CH from './locales/de-ch.json'; -import EN_US from './locales/en-us.json'; -import ES_AR from './locales/es-ar.json'; -import PT_BR from './locales/pt-br.json'; - -i18n.use(initReactI18next).init({ - lng: getLocales()[0].languageCode ?? 'en', - compatibilityJSON: 'v3', - fallbackLng: 'en', - interpolation: { - escapeValue: false, - }, - resources: { - en: EN_US, - pt: PT_BR, - de: DE_CH, - es: ES_AR, - }, -}); - -export default i18n; diff --git a/src/types/ActionListType.ts b/src/types/ActionListType.ts deleted file mode 100644 index 4f7ac68..0000000 --- a/src/types/ActionListType.ts +++ /dev/null @@ -1,16 +0,0 @@ -export interface ActionListProps { - list: { - testID: string; - prefixIcon?: JSX.Element; - title: string; - onAction: () => void; - arrowVisible?: boolean; - }[]; - marginB?: number; -} - -export interface ActionListButtonProps { - testID: string; - onAction: () => void; - children: React.ReactNode | React.ReactNode[]; -} diff --git a/src/types/ButtonIconType.ts b/src/types/ButtonIconType.ts deleted file mode 100644 index aaadc17..0000000 --- a/src/types/ButtonIconType.ts +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -export interface ButtonIconProps { - testID?: string; - children: React.ReactNode; - onPress: () => void; - disabled?: boolean; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} - -export type ButtonIconPlatformProps = ButtonIconProps; diff --git a/src/types/ButtonTitleGhostType.ts b/src/types/ButtonTitleGhostType.ts deleted file mode 100644 index 9a70794..0000000 --- a/src/types/ButtonTitleGhostType.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { SchemeTextProps } from './SchemeTextType'; - -export interface ButtonTitleGhostProps { - testID?: string; - title: string; - onPress: () => void; - disabled?: boolean; - size?: 'large' | 'small'; - buttonsWeight?: SchemeTextProps['weight']; - loading?: boolean; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} - -export interface ButtonTitleGhostPlatformProps { - testID?: string; - children: React.ReactNode | React.ReactNode[]; - onPress: () => void; - disabled?: boolean; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} diff --git a/src/types/ButtonTitleShapeType.ts b/src/types/ButtonTitleShapeType.ts deleted file mode 100644 index 33e65dd..0000000 --- a/src/types/ButtonTitleShapeType.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface ButtonTitleShapeProps { - testID?: string; - title: string; - onPress: () => void; - disabled?: boolean; - size?: 'large' | 'small'; - loading?: boolean; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} - -export interface ButtonTitleShapePlatformProps { - testID?: string; - children: React.ReactNode | React.ReactNode[]; - onPress: () => void; - size?: 'large' | 'small'; - disabled?: boolean; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} diff --git a/src/types/ChartTypes.ts b/src/types/ChartTypes.ts deleted file mode 100644 index 1a1b3b5..0000000 --- a/src/types/ChartTypes.ts +++ /dev/null @@ -1,8 +0,0 @@ -export interface LinePathProps { - line?: string; -} - -export interface ChartProps { - price?: number; - priceStatus: 'loading' | 'success' | 'failed'; -} diff --git a/src/types/CheckboxMessageType.ts b/src/types/CheckboxMessageType.ts deleted file mode 100644 index cc0fb5c..0000000 --- a/src/types/CheckboxMessageType.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface CheckboxMessageProps { - message: string; - isActivated: boolean; - onAction: () => void; -} diff --git a/src/types/CryptoToCurrencyType.ts b/src/types/CryptoToCurrencyType.ts deleted file mode 100644 index 0f0072b..0000000 --- a/src/types/CryptoToCurrencyType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface CryptoToCurrencyProps { - balance: string; - cryptoCurrentPrice?: number; -} diff --git a/src/types/CurrencyPageType.ts b/src/types/CurrencyPageType.ts deleted file mode 100644 index 35fcce4..0000000 --- a/src/types/CurrencyPageType.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { UseAppSettingsProps } from './UseAppSettingsType'; - -export interface CurrenciesTypes { - title: string; - key: UseAppSettingsProps['currency']; -} diff --git a/src/types/GetBitcoinDataPricesType.ts b/src/types/GetBitcoinDataPricesType.ts deleted file mode 100644 index 1828c15..0000000 --- a/src/types/GetBitcoinDataPricesType.ts +++ /dev/null @@ -1,21 +0,0 @@ -export interface ResponseData { - data: { - market_data: { - current_price: { - aud: number; - brl: number; - cad: number; - eur: number; - gbp: number; - usd: number; - }; - }; - }; -} - -export type DataReturn = { - date: Date; - value: number; -}[]; - -export type GetBitcoinHistoricalPriceReturn = Promise; diff --git a/src/types/GetBitcoinHistoricalPriceType.ts b/src/types/GetBitcoinHistoricalPriceType.ts deleted file mode 100644 index 0984569..0000000 --- a/src/types/GetBitcoinHistoricalPriceType.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface ResponseData { - data: { - prices: [number, number][]; - }; -} - -export type DataReturn = { - date: Date; - value: number; -}[]; - -export type GetBitcoinHistoricalPriceReturn = Promise; diff --git a/src/types/HeaderSwiperIndicatorType.ts b/src/types/HeaderSwiperIndicatorType.ts deleted file mode 100644 index 11672b1..0000000 --- a/src/types/HeaderSwiperIndicatorType.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface HeaderSwiperIndicatorProps { - title: string; -} diff --git a/src/types/HeaderSwiperOptionsType.ts b/src/types/HeaderSwiperOptionsType.ts deleted file mode 100644 index 0b67f4c..0000000 --- a/src/types/HeaderSwiperOptionsType.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface HeaderSwiperOptionsProps { - title: string; - onAction: () => void; - disableAction?: boolean; -} diff --git a/src/types/HeaderTitleType.ts b/src/types/HeaderTitleType.ts deleted file mode 100644 index 2497ab0..0000000 --- a/src/types/HeaderTitleType.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface HeaderTitleProps { - title: string; -} diff --git a/src/types/HomePageType.ts b/src/types/HomePageType.ts deleted file mode 100644 index 3d23bf3..0000000 --- a/src/types/HomePageType.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface MyBitcoinPriceProps { - price: string; - balance: string; - status: 'loading' | 'success' | 'failed' | null; -} diff --git a/src/types/IconType.ts b/src/types/IconType.ts deleted file mode 100644 index 00d2ee7..0000000 --- a/src/types/IconType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IconProps { - color?: string; - porcentSize?: string; -} diff --git a/src/types/LanguagePageType.ts b/src/types/LanguagePageType.ts deleted file mode 100644 index 279a34a..0000000 --- a/src/types/LanguagePageType.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { UseAppSettingsProps } from './UseAppSettingsType'; - -export interface LanguagesType { - title: string; - key: UseAppSettingsProps['language']; -} diff --git a/src/types/LimitedWidthContainerType.ts b/src/types/LimitedWidthContainerType.ts deleted file mode 100644 index dd19351..0000000 --- a/src/types/LimitedWidthContainerType.ts +++ /dev/null @@ -1,5 +0,0 @@ -import React from 'react'; - -export interface LimitedWidthContainerProps { - children: React.ReactNode | React.ReactNode[]; -} diff --git a/src/types/RegisterKeyPageType.ts b/src/types/RegisterKeyPageType.ts deleted file mode 100644 index 18fd420..0000000 --- a/src/types/RegisterKeyPageType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface TextFieldPasteProps { - value: string; - onChangeText: (arg: string) => void; -} diff --git a/src/types/SchemeTextType.ts b/src/types/SchemeTextType.ts deleted file mode 100644 index d57ba65..0000000 --- a/src/types/SchemeTextType.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { StylesProps } from './StylesType'; - -export interface SchemeTextProps { - weight: 'regular' | 'medium' | 'bold'; - size: StylesProps['fontSize']; -} diff --git a/src/types/ScrollViewType.ts b/src/types/ScrollViewType.ts deleted file mode 100644 index a14f781..0000000 --- a/src/types/ScrollViewType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface ScrollViewProps { - children: React.ReactNode | React.ReactNode[]; - refreshControl?: () => Promise | boolean; -} diff --git a/src/types/SelectListType.ts b/src/types/SelectListType.ts deleted file mode 100644 index 3668d75..0000000 --- a/src/types/SelectListType.ts +++ /dev/null @@ -1,10 +0,0 @@ -interface Data { - title: string; - key: T; -} - -export interface SelectListProps { - data: Data[]; - selected: string; - onSelected: (arg: Data['key']) => void; -} diff --git a/src/types/SkeletonLoadingType.ts b/src/types/SkeletonLoadingType.ts deleted file mode 100644 index 49414f4..0000000 --- a/src/types/SkeletonLoadingType.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface SkeletonLoadingProps { - heightPorcent: string; - widthPorcent?: string; - radius: number; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} diff --git a/src/types/StylesType.ts b/src/types/StylesType.ts deleted file mode 100644 index 17a34fa..0000000 --- a/src/types/StylesType.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface StylesProps { - fontFamily: 'Figtree-Regular' | 'Figtree-Medium' | 'Figtree-Bold'; - fontSize: 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl' | 'xxxl'; -} diff --git a/src/types/TextType.ts b/src/types/TextType.ts deleted file mode 100644 index c0a38a0..0000000 --- a/src/types/TextType.ts +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -import { StylesProps } from './StylesType'; - -export interface TextProps { - children: React.ReactNode; - weight?: 'regular' | 'medium' | 'bold'; - size?: StylesProps['fontSize']; - color?: string; - marginT?: number; - marginB?: number; - marginR?: number; - marginL?: number; -} diff --git a/src/types/TitleSubtitleType.ts b/src/types/TitleSubtitleType.ts deleted file mode 100644 index c25a040..0000000 --- a/src/types/TitleSubtitleType.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface TitleSubtitleProps { - title: string; - subTitle: string; - isLoading?: boolean; - marginT?: number; - marginB?: number; -} diff --git a/src/types/UseAppSettingsType.ts b/src/types/UseAppSettingsType.ts deleted file mode 100644 index fcfd0e2..0000000 --- a/src/types/UseAppSettingsType.ts +++ /dev/null @@ -1,11 +0,0 @@ -interface DataProps { - currency: 'aud' | 'brl' | 'cad' | 'eur' | 'gbp' | 'usd'; - language: 'de-ch' | 'en-us' | 'es-ar' | 'pt-br'; - isTablet: boolean | null; -} - -export interface UseAppSettingsProps extends DataProps { - setCurrency: (arg: DataProps['currency']) => void; - setLanguage: (arg: DataProps['language']) => void; - setIsTablet: () => void; -} diff --git a/src/types/UseBitcoinDataPricesType.ts b/src/types/UseBitcoinDataPricesType.ts deleted file mode 100644 index 392f2d0..0000000 --- a/src/types/UseBitcoinDataPricesType.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ResponseData } from './GetBitcoinDataPricesType'; - -export interface DataProps { - currentPrice: ResponseData['data']['market_data']['current_price'] | null; - status: 'loading' | 'success' | 'failed' | null; -} - -export interface UseBitcoinDataPricesProps extends DataProps { - fetchBitcoinDataPrices: () => Promise; -} diff --git a/src/types/UseBitcoinHistoricalPriceType.ts b/src/types/UseBitcoinHistoricalPriceType.ts deleted file mode 100644 index 9a49170..0000000 --- a/src/types/UseBitcoinHistoricalPriceType.ts +++ /dev/null @@ -1,11 +0,0 @@ -interface DataProps { - data: { - date: Date; - value: number; - }[]; - status: 'loading' | 'success' | 'failed' | null; -} - -export interface UseBitcoinHistoricalPriceProps extends DataProps { - fetchBitcoinHistoricalPrice: () => Promise; -} diff --git a/src/types/UseModalAlertType.ts b/src/types/UseModalAlertType.ts deleted file mode 100644 index 87e7ddb..0000000 --- a/src/types/UseModalAlertType.ts +++ /dev/null @@ -1,17 +0,0 @@ -interface DataProps { - visible: boolean; - title: string; - onCancel?: () => void; - onConfirm?: () => void; -} - -interface ShowAlertProps { - title: string; - onCancel?: () => void; - onConfirm: () => void; -} - -export interface UseModalAlertProps extends DataProps { - showAlert: (arg: ShowAlertProps) => void; - hideAlert: () => void; -} diff --git a/src/types/UseUserDataType.ts b/src/types/UseUserDataType.ts deleted file mode 100644 index 056059f..0000000 --- a/src/types/UseUserDataType.ts +++ /dev/null @@ -1,25 +0,0 @@ -export interface Transaction { - chain: string; - blockNumber: number | null; - timestamp: number; - transactionType?: 'incoming' | 'outgoing' | 'zero-transfer'; - hash: string; - address: string; - amount: string; -} - -interface DataProps { - key: string; - balance: string; - transactions: { - data: Transaction[]; - status: 'loading' | 'success' | 'failed' | null; - }; -} - -export interface UseUserDataProps extends DataProps { - setKey: (arg: DataProps['key']) => void; - setBalance: (arg: DataProps['balance']) => void; - fetchTransactions: (arg: DataProps['key']) => Promise; - cleanUserData: () => void; -} diff --git a/tsconfig.json b/tsconfig.json index b3ddb2b..7bfa523 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -18,7 +18,7 @@ "moduleSuffixes": [".ios", ".android", ".native", ""], "baseUrl": ".", "paths": { - "@/*": ["src/*"] + "~/*": ["src/*"] } }, "exclude": ["node_modules", "babel.config.js", "metro.config.js", "jest.config.js"], diff --git a/yarn.lock b/yarn.lock index f7a8482..69315ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,14 +3,9 @@ "@0no-co/graphql.web@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.6.tgz#3def68bbaf654a301bd910ce3744506cad97ab9a" - integrity sha512-KZ7TnwMcQJcFgzjoY623AVxtlDQonkqp3rSz0wb15/jHPyU1v5gynUibEpuutDeoyGJ5Tp+FwxjGyDGDwq3vIw== - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + version "1.0.7" + resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.0.7.tgz#c7a762c887b3482a79ffa68f63de5e96059a62e4" + integrity sha512-E3Qku4mTzdrlwVWGPxklDnME5ANrEGetvYw4i2GCRlppWXXE4QD66j7pwb8HelZwS6LnqEChhrSOGCXpbiu6MQ== "@ampproject/remapping@^2.2.0": version "2.3.0" @@ -27,15 +22,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" - integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== - dependencies: - "@babel/highlight" "^7.24.2" - picocolors "^1.0.0" - -"@babel/code-frame@^7.24.7": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== @@ -43,59 +30,42 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" - integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0", "@babel/core@^7.23.9": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" - integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.2" - "@babel/generator" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.24.4" - "@babel/parser" "^7.24.4" - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.20.0", "@babel/generator@^7.20.5", "@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498" - integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw== +"@babel/generator@^7.20.0", "@babel/generator@^7.20.5", "@babel/generator@^7.25.0", "@babel/generator@^7.7.2": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== dependencies: - "@babel/types" "^7.24.0" + "@babel/types" "^7.25.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" - integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== - dependencies: - "@babel/types" "^7.24.7" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-annotate-as-pure@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" @@ -103,60 +73,43 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz#c806f73788a6800a5cfbbc04d2df7ee4d927cce3" - integrity sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" - integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.24.7", "@babel/helper-create-class-features-plugin@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz#a109bf9c3d58dfed83aaf42e85633c89f43a6253" + integrity sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-replace-supers" "^7.25.0" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/traverse" "^7.25.0" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== +"@babel/helper-create-regexp-features-plugin@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz#24c75974ed74183797ffd5f134169316cd1808d9" + integrity sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1": - version "0.6.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.1.tgz#fadc63f0c2ff3c8d02ed905dcea747c5b0fb74fd" - integrity sha512-o7SDgTJuvx5vLKD6SFvkydkSMBvahDKGiNJzG22IZYXhiqoe9efY7zocICBgzHV4IRg5wdgl2nEL/tulKIEIbA== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -164,69 +117,20 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-environment-visitor@^7.24.7": +"@babel/helper-environment-visitor@^7.18.9": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== dependencies: "@babel/types" "^7.24.7" -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== +"@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-member-expression-to-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" - integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.24.3": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128" - integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg== - dependencies: - "@babel/types" "^7.24.0" + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" "@babel/helper-module-imports@^7.24.7": version "7.24.7" @@ -236,34 +140,15 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-module-transforms@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" - integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== +"@babel/helper-module-transforms@^7.24.8", "@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" "@babel/helper-module-imports" "^7.24.7" "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.25.2" "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" @@ -272,49 +157,28 @@ dependencies: "@babel/types" "^7.24.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a" - integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w== - -"@babel/helper-plugin-utils@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" - integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== - -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz#7085bd19d4a0b7ed8f405c1ed73ccb70f323abc1" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.24.7": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz#d2f0fbba059a42d68e5e378feaf181ef6055365e" + integrity sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-wrap-function" "^7.25.0" + "@babel/traverse" "^7.25.0" -"@babel/helper-replace-supers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" - integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== +"@babel/helper-replace-supers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz#ff44deac1c9f619523fe2ca1fd650773792000a9" + integrity sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" "@babel/helper-optimise-call-expression" "^7.24.7" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.25.0" "@babel/helper-simple-access@^7.24.7": version "7.24.7" @@ -324,14 +188,7 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== @@ -339,79 +196,39 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.23.4": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e" - integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ== - -"@babel/helper-string-parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" - integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helper-validator-option@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" - integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== +"@babel/helper-wrap-function@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz#dab12f0f593d6ca48c0062c28bcfb14ebe812f81" + integrity sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ== dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.0" + "@babel/types" "^7.25.0" -"@babel/helpers@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6" - integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw== +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== dependencies: - "@babel/template" "^7.24.0" - "@babel/traverse" "^7.24.1" - "@babel/types" "^7.24.0" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2": - version "7.24.2" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" - integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/highlight@^7.24.7": +"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== @@ -421,15 +238,12 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88" - integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg== - -"@babel/parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" "@babel/plugin-proposal-async-generator-functions@^7.0.0": version "7.20.7" @@ -450,21 +264,21 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.12.9": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.1.tgz#bab2b9e174a2680f0a80f341f3ec70f809f8bb4b" - integrity sha512-zPEvzFijn+hRvJuX2Vu3KbEBN39LN3f7tW3MQO2LsIs57B26KU+kUc82BdAktS1VCM6libzh45eKGI65lg0cpA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz#7e2dcfeda4a42596b57c4c9de1f5176bbfc532e3" + integrity sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-decorators" "^7.24.1" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-decorators" "^7.24.7" "@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.1.tgz#d242019488277c9a5a8035e5b70de54402644b89" - integrity sha512-+0hrgGGV3xyYIjOrD/bUZk/iUwOIGuoANfRfVg1cPhYBxF+TIXSEcc42DqzBICmWsnAQ+SfKedY0bj8QD+LuMg== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.24.7.tgz#0b539c46b8ac804f694e338f803c8354c0f788b6" + integrity sha512-CcmFwUJ3tKhLjPdt4NP+SHMshebytF8ZTYOv5ZDpkzq2sin80Wb5vJrGt8fhPrORQCfoSa0LAxC/DW+GAC5+Hw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-export-default-from" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-default-from" "^7.24.7" "@babel/plugin-proposal-logical-assignment-operators@^7.18.0": version "7.20.7" @@ -539,12 +353,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-decorators@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz#71d9ad06063a6ac5430db126b5df48c70ee885fa" - integrity sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw== +"@babel/plugin-syntax-decorators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz#e4f8a0a8778ccec669611cd5aed1ed8e6e3a6fcf" + integrity sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" @@ -553,12 +367,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz#a92852e694910ae4295e6e51e87b83507ed5e6e8" - integrity sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.7.tgz#85dae9098933573aae137fb52141dd3ca52ae7ac" + integrity sha512-bTPz4/635WQ9WhwsyPdxUJDVpsi/X9BMmy/8Rf/UAlOO4jSql4CxUCjWI5PiM+jG+c4LVPTScoTw80geFj9+Bw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -567,12 +381,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.1.tgz#875c25e3428d7896c87589765fc8b9d32f24bd8d" - integrity sha512-sxi2kLTI5DeW5vDtMUsk4mTPwvlUDbjOnoWayhynCwrw4QXRld4QEYwqzY8JmQXaJUtgUuCIurtSRH5sn4c7mA== +"@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz#d1759e84dd4b437cf9fae69b4c06c41d7625bfb7" + integrity sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -588,14 +402,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.24.1", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-jsx@^7.24.7": +"@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== @@ -658,28 +465,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.1", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-typescript@^7.24.7": +"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz#2bf263617060c9cc45bcdbf492b8cc805082bf27" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-arrow-functions@^7.0.0-0": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== @@ -687,107 +480,96 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-async-to-generator@^7.20.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz#0e220703b89f2216800ce7b1c53cb0cf521c37f4" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" "@babel/plugin-transform-block-scoping@^7.0.0": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.4.tgz#28f5c010b66fbb8ccdeef853bef1935c434d7012" - integrity sha512-nIFUZIpGKDf9O9ttyRXpHFpKC+X3Y5mtshZONuEUYBomAKoM4y029Jr+uB1bHGPhNmK8YXHevDtKDOLmtRrp6g== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz#23a6ed92e6b006d26b1869b1c91d1b917c2ea2ac" + integrity sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-classes@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.1.tgz#5bc8fc160ed96378184bc10042af47f50884dcb1" - integrity sha512-ZTIe3W7UejJd3/3R4p7ScyyOoafetUShSf4kCqV0O7F/RiHxVj/wRaRnQlrGwflvcehNA8M42HkAiEDYZu2F1Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.22.6" + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz#63122366527d88e0ef61b612554fe3f8c793991e" + integrity sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.25.0" + "@babel/traverse" "^7.25.0" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz#bc7e787f8e021eccfb677af5f13c29a9934ed8a7" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" "@babel/plugin-transform-destructuring@^7.20.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.1.tgz#b1e8243af4a0206841973786292b8c8dd8447345" - integrity sha512-ow8jciWqNxR3RYbSNVuF4U2Jx130nwnBnhRw6N6h1bOejNkABmcI5X5oz29K4alWX7vf1C+o6gtKXikzRKkVdw== + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz#f033541fc036e3efb2dcb58eedafd4f6b8078acd" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.1.tgz#fa8d0a146506ea195da1671d38eed459242b2dcc" - integrity sha512-iIYPIWt3dUmUKKE10s3W+jsQ3icFkw0JyRVyY1B7G4yK/nngAOHLVx8xlhA6b/Jzl/Y0nis8gjqhqKtRDQqHWQ== +"@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz#b3aa251db44959b7a7c82abcd6b4225dec7d2258" + integrity sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-flow" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-flow" "^7.24.7" "@babel/plugin-transform-function-name@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz#8cba6f7730626cc4dfe4ca2fa516215a0592b361" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== + version "7.25.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz#b85e773097526c1a4fc4ba27322748643f26fc37" + integrity sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/traverse" "^7.25.1" "@babel/plugin-transform-literals@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz#0a1982297af83e6b3c94972686067df588c5c096" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz#e71ba1d0d69e049a22bf90b3867e263823d3f1b9" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz#deb1ad14fc5490b9a65ed830e025bca849d8b5f3" + integrity sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-modules-commonjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" - integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.24.7": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-simple-access" "^7.24.7" "@babel/plugin-transform-named-capturing-groups-regex@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0": version "7.24.7" @@ -798,116 +580,109 @@ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-transform-object-rest-spread@^7.12.13": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.1.tgz#5a3ce73caf0e7871a02e1c31e8b473093af241ff" - integrity sha512-XjD5f0YqOtebto4HGISLNfiNMTTs6tbkFf2TOqJlYKYmbo+mN9Dnpl4SRoofiziuOWMIyq3sZEUqLo3hLITFEA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.1" + "@babel/plugin-transform-parameters" "^7.24.7" "@babel/plugin-transform-optional-chaining@^7.0.0-0": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454" - integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ== + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.1.tgz#983c15d114da190506c75b616ceb0f817afcc510" - integrity sha512-8Jl6V24g+Uw5OGPeWNKrKqXPDw2YDjLc53ojwfMcKwlEoETKU9rU0mHUtcg9JntWI/QYzGAXNWEcVHZ+fR+XXg== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15", "@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-private-methods@^7.22.5": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz#a0faa1ae87eff077e1e47a5ec81c3aef383dc15a" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.1.tgz#756443d400274f8fb7896742962cc1b9f25c1f6a" - integrity sha512-pTHxDVa0BpUbvAgX3Gat+7cSciXqUcY9j2VZKTbSB6+VQGpNgNO9ailxTGHSXlqOnX1Hcx1Enme2+yv7VqP9bg== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz#554e3e1a25d181f040cf698b93fd289a03bfdcdb" - integrity sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw== +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.24.7" "@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz#a21d866d8167e752c6a7c4555dba8afcdfce6268" - integrity sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz#66bff0248ea0b549972e733516ffad577477bdab" + integrity sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz#a2dedb12b09532846721b5df99e52ef8dc3351d0" - integrity sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz#1198aab2548ad19582013815c938d3ebd8291ee3" + integrity sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.22.5", "@babel/plugin-transform-react-jsx@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.24.7": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.2.tgz#e37e8ebfa77e9f0b16ba07fadcb6adb47412227a" + integrity sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.25.2" -"@babel/plugin-transform-react-pure-annotations@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz#c86bce22a53956331210d268e49a0ff06e392470" - integrity sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA== +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-runtime@^7.0.0": - version "7.24.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.3.tgz#dc58ad4a31810a890550365cc922e1ff5acb5d7f" - integrity sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz#00a5bfaf8c43cf5c8703a8a6e82b59d9c58f38ca" + integrity sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw== dependencies: - "@babel/helper-module-imports" "^7.24.3" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" babel-plugin-polyfill-corejs2 "^0.4.10" babel-plugin-polyfill-corejs3 "^0.10.1" babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz#ba9a09144cf55d35ec6b93a32253becad8ee5b55" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-shorthand-properties@^7.0.0-0": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== @@ -915,19 +690,19 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-spread@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz#a1acf9152cbf690e4da0ba10790b3ac7d2b2b391" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-sticky-regex@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz#f03e672912c6e203ed8d6e0271d9c2113dc031b9" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-template-literals@^7.0.0-0": version "7.24.7" @@ -936,67 +711,47 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-typescript@^7.24.1", "@babel/plugin-transform-typescript@^7.5.0": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.4.tgz#03e0492537a4b953e491f53f2bc88245574ebd15" - integrity sha512-79t3CQ8+oBGk/80SQ8MN3Bs3obf83zJ0YZjDmDaEZN8MqhMI760apl5z6a20kFeMXBwJX99VpKT8CKxEBp5H1g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-typescript" "^7.24.1" - -"@babel/plugin-transform-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" - integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== +"@babel/plugin-transform-typescript@^7.24.7", "@babel/plugin-transform-typescript@^7.5.0": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz#237c5d10de6d493be31637c6b9fa30b6c5461add" + integrity sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A== dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.0" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-typescript" "^7.24.7" "@babel/plugin-transform-unicode-regex@^7.0.0": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz#57c3c191d68f998ac46b708380c1ce4d13536385" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/preset-flow@^7.13.13": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.1.tgz#da7196c20c2d7dd4e98cfd8b192fe53b5eb6f0bb" - integrity sha512-sWCV2G9pcqZf+JHyv/RyqEIpFypxdCSxWIxQjpdaQxenNog7cN1pr76hg8u0Fz8Qgg0H4ETkGcJnXL8d4j0PPA== + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.24.7.tgz#eef5cb8e05e97a448fc50c16826f5612fe512c06" + integrity sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-transform-flow-strip-types" "^7.24.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-flow-strip-types" "^7.24.7" "@babel/preset-react@^7.22.15": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.1.tgz#2450c2ac5cc498ef6101a6ca5474de251e33aa95" - integrity sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-transform-react-display-name" "^7.24.1" - "@babel/plugin-transform-react-jsx" "^7.23.4" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.24.1" - -"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.21.5": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz#89bdf13a3149a17b3b2a2c9c62547f06db8845ec" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" - -"@babel/preset-typescript@^7.23.0": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7", "@babel/preset-typescript@^7.21.5", "@babel/preset-typescript@^7.23.0": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== @@ -1008,9 +763,9 @@ "@babel/plugin-transform-typescript" "^7.24.7" "@babel/register@^7.13.16": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.23.7.tgz#485a5e7951939d21304cae4af1719fdb887bc038" - integrity sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ== + version "7.24.6" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.24.6.tgz#59e21dcc79e1d04eed5377633b0f88029a6bef9e" + integrity sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1023,78 +778,48 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.23.2": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" + integrity sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.0.0", "@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50" - integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA== +"@babel/runtime@^7.25.0": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/parser" "^7.24.0" - "@babel/types" "^7.24.0" + regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== +"@babel/template@^7.0.0", "@babel/template@^7.24.7", "@babel/template@^7.25.0", "@babel/template@^7.3.3": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/traverse@^7.20.0", "@babel/traverse@^7.24.1": - version "7.24.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" - integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ== - dependencies: - "@babel/code-frame" "^7.24.1" - "@babel/generator" "^7.24.1" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.24.1" - "@babel/types" "^7.24.0" - debug "^4.3.1" - globals "^11.1.0" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" -"@babel/traverse@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" - integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== +"@babel/traverse@^7.20.0", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== dependencies: "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.0", "@babel/types@^7.3.3": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" - integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w== +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.3.3": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@babel/types@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" - integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== - dependencies: - "@babel/helper-string-parser" "^7.24.7" + "@babel/helper-string-parser" "^7.24.8" "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" @@ -1104,14 +829,14 @@ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@commitlint/cli@^19.3.0": - version "19.3.0" - resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.3.0.tgz#44e6da9823a01f0cdcc43054bbefdd2c6c5ddf39" - integrity sha512-LgYWOwuDR7BSTQ9OLZ12m7F/qhNY+NpAyPBgo4YNMkACE7lGuUnuQq1yi9hz1KA4+3VqpOYl8H1rY/LYK43v7g== + version "19.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.4.0.tgz#9f93d3ed07e531fcfa371015c8c87e0aa26d974f" + integrity sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg== dependencies: "@commitlint/format" "^19.3.0" "@commitlint/lint" "^19.2.2" - "@commitlint/load" "^19.2.0" - "@commitlint/read" "^19.2.1" + "@commitlint/load" "^19.4.0" + "@commitlint/read" "^19.4.0" "@commitlint/types" "^19.0.3" execa "^8.0.1" yargs "^17.0.0" @@ -1175,10 +900,10 @@ "@commitlint/rules" "^19.0.3" "@commitlint/types" "^19.0.3" -"@commitlint/load@^19.2.0": - version "19.2.0" - resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.2.0.tgz#3ca51fdead4f1e1e09c9c7df343306412b1ef295" - integrity sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ== +"@commitlint/load@^19.4.0": + version "19.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-19.4.0.tgz#7df034e226e300fd577d3f63a72d790d5c821f53" + integrity sha512-I4lCWaEZYQJ1y+Y+gdvbGAx9pYPavqZAZ3/7/8BpWh+QjscAn8AjsUpLV2PycBsEx7gupq5gM4BViV9xwTIJuw== dependencies: "@commitlint/config-validator" "^19.0.3" "@commitlint/execute-rule" "^19.0.0" @@ -1205,10 +930,10 @@ conventional-changelog-angular "^7.0.0" conventional-commits-parser "^5.0.0" -"@commitlint/read@^19.2.1": - version "19.2.1" - resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.2.1.tgz#7296b99c9a989e60e5927fff8388a1dd44299c2f" - integrity sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw== +"@commitlint/read@^19.4.0": + version "19.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-19.4.0.tgz#3866b1f9a272ef6a388986efa349d24228fc8b00" + integrity sha512-r95jLOEZzKDakXtnQub+zR3xjdnrl2XzerPwm7ch1/cc5JGq04tyaNpa6ty0CRCWdVrk4CZHhqHozb8yZwy2+g== dependencies: "@commitlint/top-level" "^19.0.0" "@commitlint/types" "^19.0.3" @@ -1286,9 +1011,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.11.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" + integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1311,37 +1036,34 @@ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@expo/bunyan@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@expo/bunyan/-/bunyan-4.0.0.tgz#be0c1de943c7987a9fbd309ea0b1acd605890c7b" - integrity sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@expo/bunyan/-/bunyan-4.0.1.tgz#ab9e17e36c71c704a0ce72168378a487368da736" + integrity sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg== dependencies: uuid "^8.0.0" - optionalDependencies: - mv "~2" - safe-json-stringify "~1" -"@expo/cli@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.18.19.tgz#ae342bae82cd2c78b24986522aa7d1e1b4c51154" - integrity sha512-8Rj18cTofpLl+7D++auMVS71KungldHbrArR44fpE8loMVAvYZA+U932lmd0K2lOYBASPhm7SVP9wzls//ESFQ== +"@expo/cli@0.18.29": + version "0.18.29" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.18.29.tgz#108682e28ccf3beab34938501d6dfc079683b82c" + integrity sha512-X810C48Ss+67RdZU39YEO1khNYo1RmjouRV+vVe0QhMoTe8R6OA3t+XYEdwaNbJ5p/DJN7szfHfNmX2glpC7xg== dependencies: "@babel/runtime" "^7.20.0" "@expo/code-signing-certificates" "0.0.5" "@expo/config" "~9.0.0-beta.0" - "@expo/config-plugins" "~8.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" "@expo/devcert" "^1.0.0" "@expo/env" "~0.3.0" "@expo/image-utils" "^0.5.0" "@expo/json-file" "^8.3.0" - "@expo/metro-config" "~0.18.6" + "@expo/metro-config" "0.18.11" "@expo/osascript" "^2.0.31" "@expo/package-manager" "^1.5.0" "@expo/plist" "^0.1.0" - "@expo/prebuild-config" "7.0.6" + "@expo/prebuild-config" "7.0.8" "@expo/rudder-sdk-node" "1.1.1" "@expo/spawn-async" "^1.7.2" "@expo/xcpretty" "^4.3.0" - "@react-native/dev-middleware" "0.74.84" + "@react-native/dev-middleware" "0.74.85" "@urql/core" "2.3.6" "@urql/exchange-retry" "0.3.0" accepts "^1.3.8" @@ -1411,10 +1133,10 @@ node-forge "^1.2.1" nullthrows "^1.1.1" -"@expo/config-plugins@8.0.5", "@expo/config-plugins@~8.0.0", "@expo/config-plugins@~8.0.0-beta.0": - version "8.0.5" - resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.5.tgz#fc165e59786e399dd4694aae2a7cd716ab8a496c" - integrity sha512-VGseKX1dYvaf2qHUDGzIQwSOJrO5fomH0gE5cKSQyi6wn+Q6rcV2Dj2E5aga+9aKNPL6FxZ0dqRFC3t2sbhaSA== +"@expo/config-plugins@8.0.9": + version "8.0.9" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.9.tgz#c3b05dbed0c690a4912c1b9f4420f2c6ad4b00cc" + integrity sha512-dNCG45C7BbDPV9MdWvCbsFtJtVn4w/TJbb5b7Yr6FA8HYIlaaVM0wqUMzTPmGj54iYXw8X/Vge8uCPxg7RWgeA== dependencies: "@expo/config-types" "^51.0.0-unreleased" "@expo/json-file" "~8.3.0" @@ -1432,35 +1154,39 @@ xcode "^3.0.1" xml2js "0.6.0" -"@expo/config-types@^51.0.0-unreleased": - version "51.0.1" - resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-51.0.1.tgz#39f490f97e1ede70ed7e88edc28f073880637a76" - integrity sha512-5JuzUFobFImrUgnq93LeucP44ZMxq8WMXmCtIUf3ZC3mJSwjvvHJBMO2fS/sIlmgvvQk9eq4VnX06/7tgDFMSg== - -"@expo/config@9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-9.0.1.tgz#e7b79de5af29d5ab2a98a62c3cda31f03bd75827" - integrity sha512-0tjaXBstTbXmD4z+UMFBkh2SZFwilizSQhW6DlaTMnPG5ezuw93zSFEWAuEC3YzkpVtNQTmYzxAYjxwh6seOGg== +"@expo/config-plugins@~8.0.8": + version "8.0.8" + resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-8.0.8.tgz#294a71905a498ea02c8b79bea950b5e37ab5d748" + integrity sha512-Fvu6IO13EUw0R9WeqxUO37FkM62YJBNcZb9DyJAOgMz7Ez/vaKQGEjKt9cwT+Q6uirtCATMgaq6VWAW7YW8xXw== dependencies: - "@babel/code-frame" "~7.10.4" - "@expo/config-plugins" "~8.0.0-beta.0" "@expo/config-types" "^51.0.0-unreleased" - "@expo/json-file" "^8.3.0" + "@expo/json-file" "~8.3.0" + "@expo/plist" "^0.1.0" + "@expo/sdk-runtime-versions" "^1.0.0" + chalk "^4.1.2" + debug "^4.3.1" + find-up "~5.0.0" getenv "^1.0.0" glob "7.1.6" - require-from-string "^2.0.2" resolve-from "^5.0.0" - semver "^7.6.0" - slugify "^1.3.4" - sucrase "3.34.0" + semver "^7.5.4" + slash "^3.0.0" + slugify "^1.6.6" + xcode "^3.0.1" + xml2js "0.6.0" -"@expo/config@~9.0.0", "@expo/config@~9.0.0-beta.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@expo/config/-/config-9.0.2.tgz#112b93436dbca8aa3da73a46329e5b58fdd435d2" - integrity sha512-BKQ4/qBf3OLT8hHp5kjObk2vxwoRQ1yYQBbG/OM9Jdz32yYtrU8opTbKRAxfZEWH5i3ZHdLrPdC1rO0I6WxtTw== +"@expo/config-types@^51.0.0-unreleased": + version "51.0.2" + resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-51.0.2.tgz#7385451b180d34d8f2a4eeb5feabe1fe3c5d4f32" + integrity sha512-IglkIoiDwJMY01lYkF/ZSBoe/5cR+O3+Gx6fpLFjLfgZGBTdyPkKa1g8NWoWQCk+D3cKL2MDbszT2DyRRB0YqQ== + +"@expo/config@9.0.3", "@expo/config@~9.0.0", "@expo/config@~9.0.0-beta.0": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@expo/config/-/config-9.0.3.tgz#4bc2ec654145e6242f4b1964db2962ee0fee1270" + integrity sha512-eOTNM8eOC8gZNHgenySRlc/lwmYY1NOgvjwA8LHuvPT7/eUwD93zrxu3lPD1Cc/P6C/2BcVdfH4hf0tLmDxnsg== dependencies: "@babel/code-frame" "~7.10.4" - "@expo/config-plugins" "~8.0.0" + "@expo/config-plugins" "~8.0.8" "@expo/config-types" "^51.0.0-unreleased" "@expo/json-file" "^8.3.0" getenv "^1.0.0" @@ -1472,20 +1198,19 @@ sucrase "3.34.0" "@expo/devcert@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.1.0.tgz#d148eb9180db6753c438192e73a123fb13b662ac" - integrity sha512-ghUVhNJQOCTdQckSGTHctNp/0jzvVoMMkVh+6SHn+TZj8sU15U/npXIDt8NtQp0HedlPaCgkVdMu8Sacne0aEA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@expo/devcert/-/devcert-1.1.4.tgz#d98807802a541847cc42791a606bfdc26e641277" + integrity sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw== dependencies: application-config-path "^0.1.0" command-exists "^1.2.4" debug "^3.1.0" eol "^0.9.1" get-port "^3.2.0" - glob "^7.1.2" - lodash "^4.17.4" + glob "^10.4.2" + lodash "^4.17.21" mkdirp "^0.5.1" password-prompt "^1.0.4" - rimraf "^2.6.2" sudo-prompt "^8.2.0" tmp "^0.0.33" tslib "^2.4.0" @@ -1517,7 +1242,7 @@ semver "^7.6.0" tempy "0.3.0" -"@expo/json-file@^8.3.0": +"@expo/json-file@^8.3.0", "@expo/json-file@~8.3.0": version "8.3.3" resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.3.3.tgz#7926e3592f76030ce63d6b1308ac8f5d4d9341f4" integrity sha512-eZ5dld9AD0PrVRiIWpRkm5aIoWBw3kAyd8VkuWEy92sEthBKDDDHAnK2a0dw0Eil6j7rK7lS/Qaq/Zzngv2h5A== @@ -1526,19 +1251,10 @@ json5 "^2.2.2" write-file-atomic "^2.3.0" -"@expo/json-file@~8.3.0": - version "8.3.0" - resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.3.0.tgz#fc84af77b532a4e9bfb5beafd0e3b7f692b6bd7e" - integrity sha512-yROUeXJXR5goagB8c3muFLCzLmdGOvoPpR5yDNaXrnTp4euNykr9yW0wWhJx4YVRTNOPtGBnEbbJBW+a9q+S6g== - dependencies: - "@babel/code-frame" "~7.10.4" - json5 "^2.2.2" - write-file-atomic "^2.3.0" - -"@expo/metro-config@0.18.7", "@expo/metro-config@~0.18.6": - version "0.18.7" - resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.18.7.tgz#f64a0299761a2f90bf2686b59306847620f91e92" - integrity sha512-MzAyFP0fvoyj9IUc6SPnpy6/HLT23j/p5J+yWjGug2ddOpSuKNDHOOqlwWZbJp5KfZCEIVWNHeUoE+TaC/yhaQ== +"@expo/metro-config@0.18.11": + version "0.18.11" + resolved "https://registry.yarnpkg.com/@expo/metro-config/-/metro-config-0.18.11.tgz#22e82d92fb9d94ac760cc8b3bff48e6f32b4f032" + integrity sha512-/uOq55VbSf9yMbUO1BudkUM2SsGW1c5hr9BnhIqYqcsFv0Jp5D3DtJ4rljDKaUeNLbwr6m7pqIrkSMq5NrYf4Q== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.5" @@ -1560,11 +1276,11 @@ resolve-from "^5.0.0" "@expo/osascript@^2.0.31": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.1.0.tgz#c407dfe839b5e898829d31e6accd962f91adac1c" - integrity sha512-bOhuFnlRaS7CU33+rFFIWdcET/Vkyn1vsN8BYFwCDEF5P1fVVvYN7bFOsQLTMD3nvi35C1AGmtqUr/Wfv8Xaow== + version "2.1.3" + resolved "https://registry.yarnpkg.com/@expo/osascript/-/osascript-2.1.3.tgz#912b74825cb83f3b958cad81034df9e19f1f2808" + integrity sha512-aOEkhPzDsaAfolSswObGiYW0Pf0ROfR9J2NBRLQACdQ6uJlyAMiPF45DVEVknAU9juKh0y8ZyvC9LXqLEJYohA== dependencies: - "@expo/spawn-async" "^1.5.0" + "@expo/spawn-async" "^1.7.2" exec-async "^2.2.0" "@expo/package-manager@^1.5.0": @@ -1586,25 +1302,25 @@ sudo-prompt "9.1.1" "@expo/plist@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.1.0.tgz#eabc95f951d14e10c87fd0443ee01d567371f058" - integrity sha512-xWD+8vIFif0wKyuqe3fmnmnSouXYucciZXFzS0ZD5OV9eSAS1RGQI5FaGGJ6zxJ4mpdy/4QzbLdBjnYE5vxA0g== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@expo/plist/-/plist-0.1.3.tgz#b4fbee2c4f7a88512a4853d85319f4d95713c529" + integrity sha512-GW/7hVlAylYg1tUrEASclw1MMk9FP4ZwyFAY/SUTJIhPDQHtfOlXREyWV3hhrHdX/K+pS73GNgdfT6E/e+kBbg== dependencies: "@xmldom/xmldom" "~0.7.7" base64-js "^1.2.3" xmlbuilder "^14.0.0" -"@expo/prebuild-config@7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.6.tgz#b9c2c36ee564244da8073ce7bea22ebe57743615" - integrity sha512-Hts+iGBaG6OQ+N8IEMMgwQElzJeSTb7iUJ26xADEHkaexsucAK+V52dM8M4ceicvbZR9q8M+ebJEGj0MCNA3dQ== +"@expo/prebuild-config@7.0.8": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-7.0.8.tgz#8af72b19c92f05f1ab6c6c70d31f33159dacac39" + integrity sha512-wH9NVg6HiwF5y9x0TxiMEeBF+ITPGDXy5/i6OUheSrKpPgb0lF1Mwzl/f2fLPXBEpl+ZXOQ8LlLW32b7K9lrNg== dependencies: "@expo/config" "~9.0.0-beta.0" - "@expo/config-plugins" "~8.0.0-beta.0" + "@expo/config-plugins" "~8.0.8" "@expo/config-types" "^51.0.0-unreleased" "@expo/image-utils" "^0.5.0" "@expo/json-file" "^8.3.0" - "@react-native/normalize-colors" "0.74.84" + "@react-native/normalize-colors" "0.74.85" debug "^4.3.1" fs-extra "^9.0.0" resolve-from "^5.0.0" @@ -1629,17 +1345,19 @@ resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== -"@expo/spawn-async@^1.5.0", "@expo/spawn-async@^1.7.2": +"@expo/spawn-async@^1.7.2": version "1.7.2" resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.7.2.tgz#fcfe66c3e387245e72154b1a7eae8cada6a47f58" integrity sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew== dependencies: cross-spawn "^7.0.3" -"@expo/vector-icons@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.0.0.tgz#48ce0aa5c05873b07c0c78bfe16c870388f4de9a" - integrity sha512-5orm59pdnBQlovhU9k4DbjMUZBHNlku7IRgFY56f7pcaaCnXq9yaLJoOQl9sMwNdFzf4gnkTyHmR5uN10mI9rA== +"@expo/vector-icons@^14.0.3": + version "14.0.3" + resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-14.0.3.tgz#2e095118dadc0dac80a230bfa659949776b16d74" + integrity sha512-UJAKOXPPi6ez/1QZfoFVopCH3+c12Sw+T+IIVkvONCEN7zjN1fLxxWHkZ7Spz4WO5EH2ObtaJfCe/k4rw+ftxA== + dependencies: + prop-types "^15.8.1" "@expo/xcpretty@^4.3.0": version "4.3.1" @@ -1958,9 +1676,9 @@ "@jridgewell/trace-mapping" "^0.3.25" "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" @@ -1971,13 +1689,13 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@motionone/animation@^10.12.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.17.0.tgz#7633c6f684b5fee2b61c405881b8c24662c68fca" - integrity sha512-ANfIN9+iq1kGgsZxs+Nz96uiNcPLGTXwfNo2Xz/fcJXniPYpaz/Uyrfa+7I5BPLxCP82sh7quVDudf1GABqHbg== + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.18.0.tgz#868d00b447191816d5d5cf24b1cafa144017922b" + integrity sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw== dependencies: - "@motionone/easing" "^10.17.0" - "@motionone/types" "^10.17.0" - "@motionone/utils" "^10.17.0" + "@motionone/easing" "^10.18.0" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" tslib "^2.3.1" "@motionone/dom@10.12.0": @@ -1992,34 +1710,34 @@ hey-listen "^1.0.8" tslib "^2.3.1" -"@motionone/easing@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.17.0.tgz#d66cecf7e3ee30104ad00389fb3f0b2282d81aa9" - integrity sha512-Bxe2wSuLu/qxqW4rBFS5m9tMLOw+QBh8v5A7Z5k4Ul4sTj5jAOfZG5R0bn5ywmk+Fs92Ij1feZ5pmC4TeXA8Tg== +"@motionone/easing@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.18.0.tgz#7b82f6010dfee3a1bb0ee83abfbaff6edae0c708" + integrity sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg== dependencies: - "@motionone/utils" "^10.17.0" + "@motionone/utils" "^10.18.0" tslib "^2.3.1" "@motionone/generators@^10.12.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.17.0.tgz#878d292539c41434c13310d5f863a87a94e6e689" - integrity sha512-T6Uo5bDHrZWhIfxG/2Aut7qyWQyJIWehk6OB4qNvr/jwA/SRmixwbd7SOrxZi1z5rH3LIeFFBKK1xHnSbGPZSQ== + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.18.0.tgz#fe09ab5cfa0fb9a8884097feb7eb60abeb600762" + integrity sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg== dependencies: - "@motionone/types" "^10.17.0" - "@motionone/utils" "^10.17.0" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" tslib "^2.3.1" -"@motionone/types@^10.12.0", "@motionone/types@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.17.0.tgz#179571ce98851bac78e19a1c3974767227f08ba3" - integrity sha512-EgeeqOZVdRUTEHq95Z3t8Rsirc7chN5xFAPMYFobx8TPubkEfRSm5xihmMUkbaR2ErKJTUw3347QDPTHIW12IA== +"@motionone/types@^10.12.0", "@motionone/types@^10.17.1": + version "10.17.1" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.17.1.tgz#cf487badbbdc9da0c2cb86ffc1e5d11147c6e6fb" + integrity sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A== -"@motionone/utils@^10.12.0", "@motionone/utils@^10.17.0": - version "10.17.0" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.17.0.tgz#cc0ba8acdc6848ff48d8c1f2d0d3e7602f4f942e" - integrity sha512-bGwrki4896apMWIj9yp5rAS2m0xyhxblg6gTB/leWDPt+pb410W8lYWsxyurX+DH+gO1zsQsfx2su/c1/LtTpg== +"@motionone/utils@^10.12.0", "@motionone/utils@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.18.0.tgz#a59ff8932ed9009624bca07c56b28ef2bb2f885e" + integrity sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw== dependencies: - "@motionone/types" "^10.17.0" + "@motionone/types" "^10.17.1" hey-listen "^1.0.8" tslib "^2.3.1" @@ -2063,95 +1781,45 @@ dependencies: merge-options "^3.0.4" -"@react-native-community/cli-clean@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-12.3.6.tgz#e8a7910bebc97266fd5068649013a03958021fc4" - integrity sha512-gUU29ep8xM0BbnZjwz9MyID74KKwutq9x5iv4BCr2im6nly4UMf1B1D+V225wR7VcDGzbgWjaezsJShLLhC5ig== +"@react-native-community/cli-clean@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.9.tgz#b6754f39c2b877c9d730feb848945150e1d52209" + integrity sha512-7Dj5+4p9JggxuVNOjPbduZBAP1SUgNhLKVw5noBUzT/3ZpUZkDM+RCSwyoyg8xKWoE4OrdUAXwAFlMcFDPKykA== dependencies: - "@react-native-community/cli-tools" "12.3.6" - chalk "^4.1.2" - execa "^5.0.0" - -"@react-native-community/cli-clean@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-clean/-/cli-clean-13.6.8.tgz#95ce964047f005152ac100394b6dcd5d2cc2a474" - integrity sha512-B1uxlm1N4BQuWFvBL3yRl3LVvydjswsdbTi7tMrHMtSxfRio1p9HjcmDzlzKco09Y+8qBGgakm3jcMZGLbhXQQ== - dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" -"@react-native-community/cli-config@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-12.3.6.tgz#5f0be68270217908a739c32e3155a0e354773251" - integrity sha512-JGWSYQ9EAK6m2v0abXwFLEfsqJ1zkhzZ4CV261QZF9MoUNB6h57a274h1MLQR9mG6Tsh38wBUuNfEPUvS1vYew== +"@react-native-community/cli-config@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.9.tgz#d609a64d40a173c89bd7d24e31807bb7dcba69f9" + integrity sha512-rFfVBcNojcMm+KKHE/xqpqXg8HoKl4EC7bFHUrahMJ+y/tZll55+oX/PGG37rzB8QzP2UbMQ19DYQKC1G7kXeg== dependencies: - "@react-native-community/cli-tools" "12.3.6" - chalk "^4.1.2" - cosmiconfig "^5.1.0" - deepmerge "^4.3.0" - glob "^7.1.3" - joi "^17.2.1" - -"@react-native-community/cli-config@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-config/-/cli-config-13.6.8.tgz#6829ea7cdc237776c300be06f84c222bf17cf4c5" - integrity sha512-RabCkIsWdP4Ex/sf1uSP9qxc30utm+0uIJAjrZkNQynm7T4Lyqn/kT3LKm4yM6M0Qk61YxGguiaXF4601vAduw== - dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" cosmiconfig "^5.1.0" deepmerge "^4.3.0" fast-glob "^3.3.2" joi "^17.2.1" -"@react-native-community/cli-debugger-ui@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-12.3.6.tgz#418027a1ae76850079684d309a732eb378c7f690" - integrity sha512-SjUKKsx5FmcK9G6Pb6UBFT0s9JexVStK5WInmANw75Hm7YokVvHEgtprQDz2Uvy5znX5g2ujzrkIU//T15KQzA== +"@react-native-community/cli-debugger-ui@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.9.tgz#bc5727c51964206a00d417e5148b46331a81d5a5" + integrity sha512-TkN7IdFmGPPvTpAo3nCAH9uwGCPxWBEAwpqEZDrq0NWllI7Tdie8vDpGdrcuCcKalmhq6OYnkXzeBah7O1Ztpw== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-debugger-ui@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-13.6.8.tgz#d52fccd4b3e0860d96d75ff5b0ebb128bdc93dfd" - integrity sha512-2cS+MX/Su6sVSjqpDftFOXbK7EuPg98xzsPkdPhkQnkZwvXqodK9CAMuDMbx3lBHHtrPrpMbBCpFmPN8iVOnlA== - dependencies: - serve-static "^1.13.1" - -"@react-native-community/cli-doctor@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-12.3.6.tgz#f68b51bbc6554ff4837269d98e9e405044e6f1b9" - integrity sha512-fvBDv2lTthfw4WOQKkdTop2PlE9GtfrlNnpjB818MhcdEnPjfQw5YaTUcnNEGsvGomdCs1MVRMgYXXwPSN6OvQ== - dependencies: - "@react-native-community/cli-config" "12.3.6" - "@react-native-community/cli-platform-android" "12.3.6" - "@react-native-community/cli-platform-ios" "12.3.6" - "@react-native-community/cli-tools" "12.3.6" - chalk "^4.1.2" - command-exists "^1.2.8" - deepmerge "^4.3.0" - envinfo "^7.10.0" - execa "^5.0.0" - hermes-profile-transformer "^0.0.6" - node-stream-zip "^1.9.1" - ora "^5.4.1" - semver "^7.5.2" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - yaml "^2.2.1" - -"@react-native-community/cli-doctor@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.8.tgz#05f696d94e975e4dcf7f9a1fde32fb43e4bb8a5f" - integrity sha512-/3Vdy9J3hyiu0y3nd/CU3kBqPlTRxnLXg7V6jrA1jbTOlZAMyV9imEkrqEaGK0SMOyMhh9Pipf98Ozhk0Nl4QA== +"@react-native-community/cli-doctor@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-doctor/-/cli-doctor-13.6.9.tgz#f1d4eeff427ddc8a9d19851042621c10939c35cb" + integrity sha512-5quFaLdWFQB+677GXh5dGU9I5eg2z6Vg4jOX9vKnc9IffwyIFAyJfCZHrxLSRPDGNXD7biDQUdoezXYGwb6P/A== dependencies: - "@react-native-community/cli-config" "13.6.8" - "@react-native-community/cli-platform-android" "13.6.8" - "@react-native-community/cli-platform-apple" "13.6.8" - "@react-native-community/cli-platform-ios" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-apple" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" command-exists "^1.2.8" deepmerge "^4.3.0" @@ -2165,108 +1833,54 @@ wcwidth "^1.0.1" yaml "^2.2.1" -"@react-native-community/cli-hermes@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-12.3.6.tgz#5ac2c9ee26c69e1ce6b5047ba0f399984a6dea16" - integrity sha512-sNGwfOCl8OAIjWCkwuLpP8NZbuO0dhDI/2W7NeOGDzIBsf4/c4MptTrULWtGIH9okVPLSPX0NnRyGQ+mSwWyuQ== - dependencies: - "@react-native-community/cli-platform-android" "12.3.6" - "@react-native-community/cli-tools" "12.3.6" - chalk "^4.1.2" - hermes-profile-transformer "^0.0.6" - -"@react-native-community/cli-hermes@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.8.tgz#85f10f663bc79f299146e749c48c06ebc4da9e29" - integrity sha512-lZi/OBFuZUj5cLK94oEgtrtmxGoqeYVRcnHXl/R5c4put9PDl+qH2bEMlGZkFiw57ae3UZKr3TMk+1s4jh3FYQ== +"@react-native-community/cli-hermes@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-13.6.9.tgz#88c8dfe936a0d4272efc54429eda9ccc3fca3ad8" + integrity sha512-GvwiwgvFw4Ws+krg2+gYj8sR3g05evmNjAHkKIKMkDTJjZ8EdyxbkifRUs1ZCq3TMZy2oeblZBXCJVOH4W7ZbA== dependencies: - "@react-native-community/cli-platform-android" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" hermes-profile-transformer "^0.0.6" -"@react-native-community/cli-platform-android@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-12.3.6.tgz#e1103692c659ff0b72ee6f00b7c72578db7376ec" - integrity sha512-DeDDAB8lHpuGIAPXeeD9Qu2+/wDTFPo99c8uSW49L0hkmZJixzvvvffbGQAYk32H0TmaI7rzvzH+qzu7z3891g== - dependencies: - "@react-native-community/cli-tools" "12.3.6" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.2.4" - glob "^7.1.3" - logkitty "^0.7.1" - -"@react-native-community/cli-platform-android@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.8.tgz#a3672512a9b844f93d6050537c59dd58e1b12f17" - integrity sha512-vWrqeLRRTwp2kO33nbrAgbYn8HR2c2CpIfyVJY9Ckk7HGUSwDyxdcSu7YBvt2ShdfLZH0HctWFNXsgGrfg6BDw== +"@react-native-community/cli-platform-android@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-13.6.9.tgz#b175b9b11334fc90da3f395432678bd53c30fae4" + integrity sha512-9KsYGdr08QhdvT3Ht7e8phQB3gDX9Fs427NJe0xnoBh+PDPTI2BD5ks5ttsH8CzEw8/P6H8tJCHq6hf2nxd9cw== dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" fast-xml-parser "^4.2.4" logkitty "^0.7.1" -"@react-native-community/cli-platform-apple@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.8.tgz#4d46a2d6678a7b3264768f97393f082ed9afb264" - integrity sha512-1JPohnlXPqU44zns3ALEzIbH2cKRw6JtEDJERgLuEUbs2r2NeJgqDbKyZ7fTTO8o+pegDnn6+Rr7qGVVOuUzzg== +"@react-native-community/cli-platform-apple@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-apple/-/cli-platform-apple-13.6.9.tgz#02fb5dc47d62acd85f4d7a852e93216927a772fa" + integrity sha512-KoeIHfhxMhKXZPXmhQdl6EE+jGKWwoO9jUVWgBvibpVmsNjo7woaG/tfJMEWfWF3najX1EkQAoJWpCDBMYWtlA== dependencies: - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-tools" "13.6.9" chalk "^4.1.2" execa "^5.0.0" fast-glob "^3.3.2" fast-xml-parser "^4.0.12" ora "^5.4.1" -"@react-native-community/cli-platform-ios@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-12.3.6.tgz#e7decb5ee764f5fdc7a6ad1ba5e15de8929d54a5" - integrity sha512-3eZ0jMCkKUO58wzPWlvAPRqezVKm9EPZyaPyHbRPWU8qw7JqkvnRlWIaYDGpjCJgVW4k2hKsEursLtYKb188tg== - dependencies: - "@react-native-community/cli-tools" "12.3.6" - chalk "^4.1.2" - execa "^5.0.0" - fast-xml-parser "^4.0.12" - glob "^7.1.3" - ora "^5.4.1" - -"@react-native-community/cli-platform-ios@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.8.tgz#2de1bd8529825781108c1cbba4f5b25cb062581c" - integrity sha512-/IIcIRM8qaoD7iZqsvtf6Qq1AwtChWYfB9sTn3mTiolZ5Zd5bXH37g+6liPfAICRkj2Ptq3iXmjrDVUQAxrOXw== - dependencies: - "@react-native-community/cli-platform-apple" "13.6.8" - -"@react-native-community/cli-plugin-metro@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-12.3.6.tgz#ae62de18e998478db60a3fe10dc746162c272dbd" - integrity sha512-3jxSBQt4fkS+KtHCPSyB5auIT+KKIrPCv9Dk14FbvOaEh9erUWEm/5PZWmtboW1z7CYeNbFMeXm9fM2xwtVOpg== - -"@react-native-community/cli-server-api@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-12.3.6.tgz#cd78122954a02d22c7821c365938635b51ddd1bd" - integrity sha512-80NIMzo8b2W+PL0Jd7NjiJW9mgaT8Y8wsIT/lh6mAvYH7mK0ecDJUYUTAAv79Tbo1iCGPAr3T295DlVtS8s4yQ== +"@react-native-community/cli-platform-ios@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-13.6.9.tgz#f37ceab41c2302e8f0d4bcbd3bf58b3353db4306" + integrity sha512-CiUcHlGs8vE0CAB4oi1f+dzniqfGuhWPNrDvae2nm8dewlahTBwIcK5CawyGezjcJoeQhjBflh9vloska+nlnw== dependencies: - "@react-native-community/cli-debugger-ui" "12.3.6" - "@react-native-community/cli-tools" "12.3.6" - compression "^1.7.1" - connect "^3.6.5" - errorhandler "^1.5.1" - nocache "^3.0.1" - pretty-format "^26.6.2" - serve-static "^1.13.1" - ws "^7.5.1" + "@react-native-community/cli-platform-apple" "13.6.9" -"@react-native-community/cli-server-api@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.8.tgz#fc654a2990a5f0b6f0b67ef04b25f699bee63f63" - integrity sha512-Lx664oWTzpVfbKUTy+3GIX7e+Mt5Zn+zdkM4ehllNdik/lbB3tM9Nrg8PSvOfI+tTXs2w55+nIydLfH+0FqJVg== +"@react-native-community/cli-server-api@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-13.6.9.tgz#269e666bc26e9d0b2f42c7f6099559b5f9259e9d" + integrity sha512-W8FSlCPWymO+tlQfM3E0JmM8Oei5HZsIk5S0COOl0MRi8h0NmHI4WSTF2GCfbFZkcr2VI/fRsocoN8Au4EZAug== dependencies: - "@react-native-community/cli-debugger-ui" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.1" @@ -2275,26 +1889,10 @@ serve-static "^1.13.1" ws "^6.2.2" -"@react-native-community/cli-tools@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-12.3.6.tgz#c39965982347635dfaf1daa7b3c0133b3bd45e64" - integrity sha512-FPEvZn19UTMMXUp/piwKZSh8cMEfO8G3KDtOwo53O347GTcwNrKjgZGtLSPELBX2gr+YlzEft3CoRv2Qmo83fQ== - dependencies: - appdirsjs "^1.2.4" - chalk "^4.1.2" - find-up "^5.0.0" - mime "^2.4.1" - node-fetch "^2.6.0" - open "^6.2.0" - ora "^5.4.1" - semver "^7.5.2" - shell-quote "^1.7.3" - sudo-prompt "^9.0.0" - -"@react-native-community/cli-tools@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.8.tgz#65a9f49ce66f0e639d855e745c8dfa7ae7b6c142" - integrity sha512-1MYlae9EkbjC7DBYOGMH5xF9yDoeNYUKgEdDjL6WAUBoF2gtwiZPM6igLKi/+dhb5sCtC7fiLrLi0Oevdf+RmQ== +"@react-native-community/cli-tools@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-13.6.9.tgz#2baee279358ba1a863e737b2fa9f45659ad91929" + integrity sha512-OXaSjoN0mZVw3nrAwcY1PC0uMfyTd9fz7Cy06dh+EJc+h0wikABsVRzV8cIOPrVV+PPEEXE0DBrH20T2puZzgQ== dependencies: appdirsjs "^1.2.4" chalk "^4.1.2" @@ -2308,57 +1906,26 @@ shell-quote "^1.7.3" sudo-prompt "^9.0.0" -"@react-native-community/cli-types@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-12.3.6.tgz#239de348800fe1ffba3eb1fe0edbeb9306981e57" - integrity sha512-xPqTgcUtZowQ8WKOkI9TLGBwH2bGggOC4d2FFaIRST3gTcjrEeGRNeR5aXCzJFIgItIft8sd7p2oKEdy90+01Q== +"@react-native-community/cli-types@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.9.tgz#08bfb796eacf0daeb31e2de516e81e78a36a1a55" + integrity sha512-RLxDppvRxXfs3hxceW/mShi+6o5yS+kFPnPqZTaMKKR5aSg7LwDpLQW4K2D22irEG8e6RKDkZUeH9aL3vO2O0w== dependencies: joi "^17.2.1" -"@react-native-community/cli-types@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-13.6.8.tgz#1c357d3290a48232e3e639d48e43e31e422ce436" - integrity sha512-C4mVByy0i+/NPuPhdMLBR7ubEVkjVS1VwoQu/BoG1crJFNE+167QXAzH01eFbXndsjZaMWmD4Gerx7TYc6lHfA== - dependencies: - joi "^17.2.1" - -"@react-native-community/cli@12.3.6": - version "12.3.6" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-12.3.6.tgz#7a323b78725b959bb8a31cca1145918263ff3c8d" - integrity sha512-647OSi6xBb8FbwFqX9zsJxOzu685AWtrOUWHfOkbKD+5LOpGORw+GQo0F9rWZnB68rLQyfKUZWJeaD00pGv5fw== - dependencies: - "@react-native-community/cli-clean" "12.3.6" - "@react-native-community/cli-config" "12.3.6" - "@react-native-community/cli-debugger-ui" "12.3.6" - "@react-native-community/cli-doctor" "12.3.6" - "@react-native-community/cli-hermes" "12.3.6" - "@react-native-community/cli-plugin-metro" "12.3.6" - "@react-native-community/cli-server-api" "12.3.6" - "@react-native-community/cli-tools" "12.3.6" - "@react-native-community/cli-types" "12.3.6" - chalk "^4.1.2" - commander "^9.4.1" - deepmerge "^4.3.0" - execa "^5.0.0" - find-up "^4.1.0" - fs-extra "^8.1.0" - graceful-fs "^4.1.3" - prompts "^2.4.2" - semver "^7.5.2" - -"@react-native-community/cli@13.6.8": - version "13.6.8" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.8.tgz#d52c22620242e161bddcd2e0b6dbacd8743ca09b" - integrity sha512-0lRdgLNaXixWY4BfFRl1J6Ao9Lapo2z+++iE7TD4GAbuxOWJSyFi+KUA8XNfSDyML4jFO02MZgyBPxAWdaminQ== - dependencies: - "@react-native-community/cli-clean" "13.6.8" - "@react-native-community/cli-config" "13.6.8" - "@react-native-community/cli-debugger-ui" "13.6.8" - "@react-native-community/cli-doctor" "13.6.8" - "@react-native-community/cli-hermes" "13.6.8" - "@react-native-community/cli-server-api" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" - "@react-native-community/cli-types" "13.6.8" +"@react-native-community/cli@13.6.9": + version "13.6.9" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-13.6.9.tgz#ba6360b94e0aba9c4001bda256cf7e57e2ecb02c" + integrity sha512-hFJL4cgLPxncJJd/epQ4dHnMg5Jy/7Q56jFvA3MHViuKpzzfTCJCB+pGY54maZbtym53UJON9WTGpM3S81UfjQ== + dependencies: + "@react-native-community/cli-clean" "13.6.9" + "@react-native-community/cli-config" "13.6.9" + "@react-native-community/cli-debugger-ui" "13.6.9" + "@react-native-community/cli-doctor" "13.6.9" + "@react-native-community/cli-hermes" "13.6.9" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native-community/cli-types" "13.6.9" chalk "^4.1.2" commander "^9.4.1" deepmerge "^4.3.0" @@ -2374,82 +1941,22 @@ resolved "https://registry.yarnpkg.com/@react-native-community/netinfo/-/netinfo-11.3.1.tgz#4539371a2f4bd402d932031be82c2449ed63a1a5" integrity sha512-UBnJxyV0b7i9Moa97Av+HKho1ByzX0DtbJXzUQS5E3xhQs6P2D/Os0iw3ouy7joY1TVd6uIhplPbr7l1SJNaNQ== -"@react-native/assets-registry@0.73.1": - version "0.73.1" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.73.1.tgz#e2a6b73b16c183a270f338dc69c36039b3946e85" - integrity sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg== - -"@react-native/assets-registry@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.84.tgz#aa472f82c1b7d8a30098c8ba22fad7b3dbb5be5f" - integrity sha512-dzUhwyaX04QosWZ8zyaaNB/WYZIdeDN1lcpfQbqiOhZJShRH+FLTDVONE/dqlMQrP+EO7lDqF0RrlIt9lnOCQQ== - -"@react-native/babel-plugin-codegen@0.73.4": - version "0.73.4" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.73.4.tgz#8a2037d5585b41877611498ae66adbf1dddfec1b" - integrity sha512-XzRd8MJGo4Zc5KsphDHBYJzS1ryOHg8I2gOZDAUCGcwLFhdyGu1zBNDJYH2GFyDrInn9TzAbRIf3d4O+eltXQQ== - dependencies: - "@react-native/codegen" "0.73.3" +"@react-native/assets-registry@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.74.87.tgz#7dda64e48db14597e19e15f679e31abbb1c1fb4d" + integrity sha512-1XmRhqQchN+pXPKEKYdpJlwESxVomJOxtEnIkbo7GAlaN2sym84fHEGDXAjLilih5GVPpcpSmFzTy8jx3LtaFg== -"@react-native/babel-plugin-codegen@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.84.tgz#a3a72c188d875601704a421e395f6909fdec40f3" - integrity sha512-UR4uiii5szIJA84mSC6GJOfYKDq7/ThyetOQT62+BBcyGeHVtHlNLNRzgaMeLqIQaT8Fq4pccMI+7QqLOMXzdw== +"@react-native/babel-plugin-codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.74.87.tgz#44457f4de69911f37a6ac308a7783203a757574a" + integrity sha512-+vJYpMnENFrwtgvDfUj+CtVJRJuUnzAUYT0/Pb68Sq9RfcZ5xdcCuUgyf7JO+akW2VTBoJY427wkcxU30qrWWw== dependencies: - "@react-native/codegen" "0.74.84" + "@react-native/codegen" "0.74.87" -"@react-native/babel-preset@0.73.21": - version "0.73.21" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.73.21.tgz#174c16493fa4e311b2f5f0c58d4f3c6a5a68bbea" - integrity sha512-WlFttNnySKQMeujN09fRmrdWqh46QyJluM5jdtDNrkl/2Hx6N4XeDUGhABvConeK95OidVO7sFFf7sNebVXogA== - dependencies: - "@babel/core" "^7.20.0" - "@babel/plugin-proposal-async-generator-functions" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.18.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-object-rest-spread" "^7.20.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-default-from" "^7.0.0" - "@babel/plugin-syntax-flow" "^7.18.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-syntax-optional-chaining" "^7.0.0" - "@babel/plugin-transform-arrow-functions" "^7.0.0" - "@babel/plugin-transform-async-to-generator" "^7.20.0" - "@babel/plugin-transform-block-scoping" "^7.0.0" - "@babel/plugin-transform-classes" "^7.0.0" - "@babel/plugin-transform-computed-properties" "^7.0.0" - "@babel/plugin-transform-destructuring" "^7.20.0" - "@babel/plugin-transform-flow-strip-types" "^7.20.0" - "@babel/plugin-transform-function-name" "^7.0.0" - "@babel/plugin-transform-literals" "^7.0.0" - "@babel/plugin-transform-modules-commonjs" "^7.0.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" - "@babel/plugin-transform-parameters" "^7.0.0" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-react-display-name" "^7.0.0" - "@babel/plugin-transform-react-jsx" "^7.0.0" - "@babel/plugin-transform-react-jsx-self" "^7.0.0" - "@babel/plugin-transform-react-jsx-source" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.0.0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0" - "@babel/plugin-transform-spread" "^7.0.0" - "@babel/plugin-transform-sticky-regex" "^7.0.0" - "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.73.4" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.14.0" - -"@react-native/babel-preset@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.84.tgz#703ebfc810d82c9f51f033352abd5f9fa70d492b" - integrity sha512-WUfu6Y4aGuVdocQZvx33BJiQWFH6kRCHYbZfBn2psgFrSRLgQWEQrDCxqPFObNAVSayM0rNhp2FvI5K/Eyeqlg== +"@react-native/babel-preset@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.74.87.tgz#3d74517d2ea8898f83b5106027033607d5bda50d" + integrity sha512-hyKpfqzN2nxZmYYJ0tQIHG99FQO0OWXp/gVggAfEUgiT+yNKas1C60LuofUsK7cd+2o9jrpqgqW4WzEDZoBlTg== dependencies: "@babel/core" "^7.20.0" "@babel/plugin-proposal-async-generator-functions" "^7.0.0" @@ -2489,29 +1996,16 @@ "@babel/plugin-transform-spread" "^7.0.0" "@babel/plugin-transform-sticky-regex" "^7.0.0" "@babel/plugin-transform-typescript" "^7.5.0" - "@babel/plugin-transform-unicode-regex" "^7.0.0" - "@babel/template" "^7.0.0" - "@react-native/babel-plugin-codegen" "0.74.84" - babel-plugin-transform-flow-enums "^0.0.2" - react-refresh "^0.14.0" - -"@react-native/codegen@0.73.3": - version "0.73.3" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.73.3.tgz#cc984a8b17334d986cc600254a0d4b7fa7d68a94" - integrity sha512-sxslCAAb8kM06vGy9Jyh4TtvjhcP36k/rvj2QE2Jdhdm61KvfafCATSIsOfc0QvnduWFcpXUPvAVyYwuv7PYDg== - dependencies: - "@babel/parser" "^7.20.0" - flow-parser "^0.206.0" - glob "^7.1.1" - invariant "^2.2.4" - jscodeshift "^0.14.0" - mkdirp "^0.5.1" - nullthrows "^1.1.1" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + "@react-native/babel-plugin-codegen" "0.74.87" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.14.0" -"@react-native/codegen@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.84.tgz#d3425a510b7da558ef5088d9b0aa5e0b1c05c783" - integrity sha512-0hXlnu9i0o8v+gXKQi+x6T471L85kCDwW4WrJiYAeOheWrQdNNW6rC3g8+LL7HXAf7QcHGU/8/d57iYfdVK2BQ== +"@react-native/codegen@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.74.87.tgz#47f07a627d0294c8270a03aee098991ed91f8ae9" + integrity sha512-GMSYDiD+86zLKgMMgz9z0k6FxmRn+z6cimYZKkucW4soGbxWsbjUAZoZ56sJwt2FJ3XVRgXCrnOCgXoH/Bkhcg== dependencies: "@babel/parser" "^7.20.0" glob "^7.1.1" @@ -2521,32 +2015,15 @@ mkdirp "^0.5.1" nullthrows "^1.1.1" -"@react-native/community-cli-plugin@0.73.17": - version "0.73.17" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.73.17.tgz#37b381a8b503a3296eaa6727e0c52ea8835add28" - integrity sha512-F3PXZkcHg+1ARIr6FRQCQiB7ZAA+MQXGmq051metRscoLvgYJwj7dgC8pvgy0kexzUkHu5BNKrZeySzUft3xuQ== - dependencies: - "@react-native-community/cli-server-api" "12.3.6" - "@react-native-community/cli-tools" "12.3.6" - "@react-native/dev-middleware" "0.73.8" - "@react-native/metro-babel-transformer" "0.73.15" - chalk "^4.0.0" - execa "^5.1.1" - metro "^0.80.3" - metro-config "^0.80.3" - metro-core "^0.80.3" - node-fetch "^2.2.0" - readline "^1.3.0" - -"@react-native/community-cli-plugin@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.84.tgz#223a0defe8118dc57c8ac852ddd13517ea10c4e2" - integrity sha512-GBKE+1sUh86fS2XXV46gMCNHMc1KetshMbYJ0AhDhldpaILZHqRBX50mdVsiYVvkzp4QjM0nmYqefuJ9NVwicQ== +"@react-native/community-cli-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.74.87.tgz#4d9798d51381912f3771acded9b6b2804987e952" + integrity sha512-EgJG9lSr8x3X67dHQKQvU6EkO+3ksVlJHYIVv6U/AmW9dN80BEFxgYbSJ7icXS4wri7m4kHdgeq2PQ7/3vvrTQ== dependencies: - "@react-native-community/cli-server-api" "13.6.8" - "@react-native-community/cli-tools" "13.6.8" - "@react-native/dev-middleware" "0.74.84" - "@react-native/metro-babel-transformer" "0.74.84" + "@react-native-community/cli-server-api" "13.6.9" + "@react-native-community/cli-tools" "13.6.9" + "@react-native/dev-middleware" "0.74.87" + "@react-native/metro-babel-transformer" "0.74.87" chalk "^4.0.0" execa "^5.1.1" metro "^0.80.3" @@ -2556,40 +2033,42 @@ querystring "^0.2.1" readline "^1.3.0" -"@react-native/debugger-frontend@0.73.3": - version "0.73.3" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.73.3.tgz#033757614d2ada994c68a1deae78c1dd2ad33c2b" - integrity sha512-RgEKnWuoo54dh7gQhV7kvzKhXZEhpF9LlMdZolyhGxHsBqZ2gXdibfDlfcARFFifPIiaZ3lXuOVVa4ei+uPgTw== +"@react-native/debugger-frontend@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.85.tgz#a7af94a7b81cb59f241fd1771d1b083445329700" + integrity sha512-gUIhhpsYLUTYWlWw4vGztyHaX/kNlgVspSvKe2XaPA7o3jYKUoNLc3Ov7u70u/MBWfKdcEffWq44eSe3j3s5JQ== -"@react-native/debugger-frontend@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.84.tgz#0bde122a988916b6a50f05a7c3ab1c5db029b149" - integrity sha512-YUEA03UNFbiYzHpYxlcS2D9+3eNT5YLGkl5yRg3nOSN6KbCc/OttGnNZme+tuSOJwjMN/vcvtDKYkTqjJw8U0A== +"@react-native/debugger-frontend@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.74.87.tgz#0bb4f4f54365d04fc975349d5f635cb575f6a5d8" + integrity sha512-MN95DJLYTv4EqJc+9JajA3AJZSBYJz2QEJ3uWlHrOky2vKrbbRVaW1ityTmaZa2OXIvNc6CZwSRSE7xCoHbXhQ== -"@react-native/dev-middleware@0.73.8": - version "0.73.8" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.73.8.tgz#2e43722a00c7b8db753f747f40267cbad6caba4d" - integrity sha512-oph4NamCIxkMfUL/fYtSsE+JbGOnrlawfQ0kKtDQ5xbOjPKotKoXqrs1eGwozNKv7FfQ393stk1by9a6DyASSg== +"@react-native/dev-middleware@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.85.tgz#eca35aceb882b1111385f7c20f1aad7a33a2734e" + integrity sha512-BRmgCK5vnMmHaKRO+h8PKJmHHH3E6JFuerrcfE3wG2eZ1bcSr+QTu8DAlpxsDWvJvHpCi8tRJGauxd+Ssj/c7w== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.73.3" + "@react-native/debugger-frontend" "0.74.85" + "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" - chromium-edge-launcher "^1.0.0" connect "^3.6.5" debug "^2.2.0" node-fetch "^2.2.0" + nullthrows "^1.1.1" open "^7.0.3" + selfsigned "^2.4.1" serve-static "^1.13.1" temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/dev-middleware@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.84.tgz#19ccfece791742f83f4c0a22a8c14593a45562a2" - integrity sha512-veYw/WmyrAOQHUiIeULzn2duJQnXDPiKq2jZ/lcmDo6jsLirpp+Q73lx09TYgy/oVoPRuV0nfmU3x9B6EV/7qQ== +"@react-native/dev-middleware@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.74.87.tgz#254807b579a3015ced659a14c374dbf029a9c04e" + integrity sha512-7TmZ3hTHwooYgIHqc/z87BMe1ryrIqAUi+AF7vsD+EHCGxHFdMjSpf1BZ2SUPXuLnF2cTiTfV2RwhbPzx0tYIA== dependencies: "@isaacs/ttlcache" "^1.4.1" - "@react-native/debugger-frontend" "0.74.84" + "@react-native/debugger-frontend" "0.74.87" "@rnx-kit/chromium-edge-launcher" "^1.0.0" chrome-launcher "^0.15.2" connect "^3.6.5" @@ -2602,104 +2081,76 @@ temp-dir "^2.0.0" ws "^6.2.2" -"@react-native/gradle-plugin@0.73.4": - version "0.73.4" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.73.4.tgz#aa55784a8c2b471aa89934db38c090d331baf23b" - integrity sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg== +"@react-native/gradle-plugin@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.87.tgz#a66c01fda7a938a116dc27447f0ccce285796b2a" + integrity sha512-T+VX0N1qP+U9V4oAtn7FTX7pfsoVkd1ocyw9swYXgJqU2fK7hC9famW7b3s3ZiufPGPr1VPJe2TVGtSopBjL6A== -"@react-native/gradle-plugin@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.74.84.tgz#6ff25fad5f78c276afde96ffc42e04e92d6d92b1" - integrity sha512-wYWC5WWXqzCCe4PDogz9pNc4xH5ZamahW5XGSbrrYJ5V3walZ+7z43V6iEBJkZbLjj9YBcSttkXYGr1Xh4veAg== +"@react-native/js-polyfills@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.87.tgz#d28090a4dae417a2e9ad14e065fcf8cf52cc482c" + integrity sha512-M5Evdn76CuVEF0GsaXiGi95CBZ4IWubHqwXxV9vG9CC9kq0PSkoM2Pn7Lx7dgyp4vT7ccJ8a3IwHbe+5KJRnpw== -"@react-native/js-polyfills@0.73.1": - version "0.73.1" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.73.1.tgz#730b0a7aaab947ae6f8e5aa9d995e788977191ed" - integrity sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g== - -"@react-native/js-polyfills@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.74.84.tgz#edf0e8463616a2683269bbfe3957590f7ebd910c" - integrity sha512-+PgxuUjBw9JVlz6m4ECsIJMLbDopnr4rpLmsG32hQaJrg0wMuvHtsgAY/J/aVCSG2GNUXexfjrnhc+O9yGOZXQ== - -"@react-native/metro-babel-transformer@0.73.15": - version "0.73.15" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.73.15.tgz#c516584dde62d65a46668074084359c03e6a50f1" - integrity sha512-LlkSGaXCz+xdxc9819plmpsl4P4gZndoFtpjN3GMBIu6f7TBV0GVbyJAU4GE8fuAWPVSVL5ArOcdkWKSbI1klw== - dependencies: - "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.73.21" - hermes-parser "0.15.0" - nullthrows "^1.1.1" - -"@react-native/metro-babel-transformer@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.84.tgz#6c2c1632bdf557f176c9d489fbb676522ffb222a" - integrity sha512-YtVGq7jkgyUECv5yt4BOFbOXyW4ddUn8+dnwGGpJKdfhXYL5o5++AxNdE+2x+SZdkj3JUVekGKPwRabFECABaw== +"@react-native/metro-babel-transformer@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.74.87.tgz#f60958f5e7eb39008a2c01dc5248ab60240bdc01" + integrity sha512-UsJCO24sNax2NSPBmV1zLEVVNkS88kcgAiYrZHtYSwSjpl4WZ656tIeedBfiySdJ94Hr3kQmBYLipV5zk0NI1A== dependencies: "@babel/core" "^7.20.0" - "@react-native/babel-preset" "0.74.84" + "@react-native/babel-preset" "0.74.87" hermes-parser "0.19.1" nullthrows "^1.1.1" -"@react-native/normalize-colors@0.73.2", "@react-native/normalize-colors@^0.73.0": - version "0.73.2" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz#cc8e48fbae2bbfff53e12f209369e8d2e4cf34ec" - integrity sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w== +"@react-native/normalize-colors@0.74.85": + version "0.74.85" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.85.tgz#62bcb9ab1b10b822ca0278fdfdf23d3b18e125da" + integrity sha512-pcE4i0X7y3hsAE0SpIl7t6dUc0B0NZLd1yv7ssm4FrLhWG+CGyIq4eFDXpmPU1XHmL5PPySxTAjEMiwv6tAmOw== -"@react-native/normalize-colors@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.84.tgz#4764d59775c17a6ed193509cb01ae2f42dd5c045" - integrity sha512-Y5W6x8cC5RuakUcTVUFNAIhUZ/tYpuqHZlRBoAuakrTwVuoNHXfQki8lj1KsYU7rW6e3VWgdEx33AfOQpdNp6A== - -"@react-native/virtualized-lists@0.73.4": - version "0.73.4" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.73.4.tgz#640e594775806f63685435b5d9c3d05c378ccd8c" - integrity sha512-HpmLg1FrEiDtrtAbXiwCgXFYyloK/dOIPIuWW3fsqukwJEWAiTzm1nXGJ7xPU5XTHiWZ4sKup5Ebaj8z7iyWog== - dependencies: - invariant "^2.2.4" - nullthrows "^1.1.1" +"@react-native/normalize-colors@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.87.tgz#a814169d0ce4ce13ffebcda0a3a5a3f780ccd772" + integrity sha512-Xh7Nyk/MPefkb0Itl5Z+3oOobeG9lfLb7ZOY2DKpFnoCE1TzBmib9vMNdFaLdSxLIP+Ec6icgKtdzYg8QUPYzA== -"@react-native/virtualized-lists@0.74.84": - version "0.74.84" - resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.84.tgz#cf32fffc93072942532c9c81bd7e4c01a2949626" - integrity sha512-XcV+qdqt2WihaY4iRm/M1FdSy+18lecU9mRXNmy9YK8g9Th/8XbNtmmKI0qWBx3KxyuXMH/zd0ps05YTrX16kw== +"@react-native/virtualized-lists@0.74.87": + version "0.74.87" + resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.74.87.tgz#31bc44d62617df7d893df22c4c57094f576677a0" + integrity sha512-lsGxoFMb0lyK/MiplNKJpD+A1EoEUumkLrCjH4Ht+ZlG8S0BfCxmskLZ6qXn3BiDSkLjfjI/qyZ3pnxNBvkXpQ== dependencies: invariant "^2.2.4" nullthrows "^1.1.1" "@react-navigation/bottom-tabs@^6.5.11": - version "6.5.20" - resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.20.tgz#5335e75b02c527ef0569bd97d4f9185d65616e49" - integrity sha512-ow6Z06iS4VqBO8d7FP+HsGjJLWt2xTWIvuWjpoCvsM/uQXzCRDIjBv9HaKcXbF0yTW7IMir0oDAbU5PFzEDdgA== + version "6.6.1" + resolved "https://registry.yarnpkg.com/@react-navigation/bottom-tabs/-/bottom-tabs-6.6.1.tgz#589edc9c8fbf652c485b3c37d344faafe3cd4cc4" + integrity sha512-9oD4cypEBjPuaMiu9tevWGiQ4w/d6l3HNhcJ1IjXZ24xvYDSs0mqjUcdt8SWUolCvRrYc/DmNBLlT83bk0bHTw== dependencies: - "@react-navigation/elements" "^1.3.30" + "@react-navigation/elements" "^1.3.31" color "^4.2.3" warn-once "^0.1.0" -"@react-navigation/core@^6.4.16": - version "6.4.16" - resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.16.tgz#f9369a134805174536b9aa0f0f483b930511caf9" - integrity sha512-UDTJBsHxnzgFETR3ZxhctP+RWr4SkyeZpbhpkQoIGOuwSCkt1SE0qjU48/u6r6w6XlX8OqVudn1Ab0QFXTHxuQ== +"@react-navigation/core@^6.4.17": + version "6.4.17" + resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.17.tgz#f277a196b578c8a456efcc563d1c9bd87eb4ab04" + integrity sha512-Nd76EpomzChWAosGqWOYE3ItayhDzIEzzZsT7PfGcRFDgW5miHV2t4MZcq9YIK4tzxZjVVpYbIynOOQQd1e0Cg== dependencies: "@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.9" + use-latest-callback "^0.2.1" -"@react-navigation/elements@^1.3.30": - version "1.3.30" - resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.30.tgz#a81371f599af1070b12014f05d6c09b1a611fd9a" - integrity sha512-plhc8UvCZs0UkV+sI+3bisIyn78wz9O/BiWZXpounu72k/R/Sj5PuZYFJ1fi6psvriUveMCGh4LeZckAZu2qiQ== +"@react-navigation/elements@^1.3.31": + version "1.3.31" + resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.31.tgz#28dd802a0787bb03fc0e5be296daf1804dbebbcf" + integrity sha512-bUzP4Awlljx5RKEExw8WYtif8EuQni2glDaieYROKTnaxsu9kEIA515sXQgUDZU4Ob12VoL7+z70uO3qrlfXcQ== "@react-navigation/native@^6.1.9": - version "6.1.17" - resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.17.tgz#439f15a99809d26ea4682d2a3766081cf2ca31cf" - integrity sha512-mer3OvfwWOHoUSMJyLa4vnBH3zpFmCwuzrBPlw7feXklurr/ZDiLjLxUScOot6jLRMz/67GyilEYMmP99LL0RQ== + version "6.1.18" + resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.18.tgz#338fa9afa2c89feec1d3eac41c963840d8d6f106" + integrity sha512-mIT9MiL/vMm4eirLcmw2h6h/Nm5FICtnYSdohq4vTLA2FF/6PNhByM7s8ffqoVfE5L0uAa6Xda1B7oddolUiGg== dependencies: - "@react-navigation/core" "^6.4.16" + "@react-navigation/core" "^6.4.17" escape-string-regexp "^4.0.0" fast-deep-equal "^3.1.3" nanoid "^3.1.23" @@ -2712,11 +2163,11 @@ nanoid "^3.1.23" "@react-navigation/stack@^6.3.20": - version "6.3.29" - resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.3.29.tgz#b03b2f2baa36c06e4c9e8c7da80d62f83ad0b835" - integrity sha512-tzlGkoRgB6P7vgw7rHuWo3TL7Gzu6xh5LMf+zSdCuEiKp/qASzxYfnTEr9tOLbVs/gf+qeukEDheCSAJKVpBXw== + version "6.4.1" + resolved "https://registry.yarnpkg.com/@react-navigation/stack/-/stack-6.4.1.tgz#a158350637f5298292202ce854e5c5c9688f23f9" + integrity sha512-upMEHOKMtuMu4c9gmoPlO/JqI6mDlSqwXg1aXKOTQLXAF8H5koOLRfrmi7AkdiE9A7lDXWUAZoGuD9O88cYvDQ== dependencies: - "@react-navigation/elements" "^1.3.30" + "@react-navigation/elements" "^1.3.31" color "^4.2.3" warn-once "^0.1.0" @@ -2788,9 +2239,9 @@ redent "^3.0.0" "@testing-library/react-native@^12.1.2": - version "12.4.5" - resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-12.4.5.tgz#16528aeae7b29238872478f3d1132a2bf821365d" - integrity sha512-SfwFwV1MrnvL//9T4C4UyusnZfWy2IOftNU7mG+bspk23bDM9HH1TxsMvec7JVZleraicDO7tP1odFqwb4KPcg== + version "12.5.3" + resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-12.5.3.tgz#0ea753efed505698a79ba4a0d42d4b79cd272abc" + integrity sha512-wSaplzjx51OVJI7MU8Mi2kxwfW0dYETn3jqSVHxtIXmEnmlWXk6f69sEaBbzdp6iDzhFB5E6rDWveqf5V/ap2A== dependencies: jest-matcher-utils "^29.7.0" pretty-format "^29.7.0" @@ -2828,9 +2279,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: "@babel/types" "^7.20.7" @@ -2938,16 +2389,16 @@ "@types/node" "*" "@types/node@*": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + version "22.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.2.0.tgz#7cf046a99f0ba4d628ad3088cb21f790df9b0c5b" + integrity sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ== dependencies: - undici-types "~5.26.4" + undici-types "~6.13.0" "@types/node@^18.0.0": - version "18.19.34" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.34.tgz#c3fae2bbbdb94b4a52fe2d229d0dccce02ef3d27" - integrity sha512-eXF4pfBNV5DAMKGbI02NnDtWrQ40hAN558/2vvS4gMpMIxaf6JmD7YjnZbq0Q9TDSSkKBamime8ewRoomHdt4g== + version "18.19.44" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.44.tgz#875a8322d17ff12bf82b3af8c07b9310a00e72f8" + integrity sha512-ZsbGerYg72WMXUIE9fYxtvfzLEuq6q8mKERdWFnqTmOvudMxnz+CBNRoOwJ2kNpFOncrKjT1hZwxjlFgQ9qvQA== dependencies: undici-types "~5.26.4" @@ -2968,16 +2419,16 @@ react-native-svg "^6.2.1" "@types/react-test-renderer@^18.0.0": - version "18.0.7" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.7.tgz#2cfe657adb3688cdf543995eceb2e062b5a68728" - integrity sha512-1+ANPOWc6rB3IkSnElhjv6VLlKg2dSv/OWClUyZimbLsQyBn8Js9Vtdsi3UICJ2rIQ3k2la06dkB+C92QfhKmg== + version "18.3.0" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz#839502eae70058a4ae161f63385a8e7929cef4c0" + integrity sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw== dependencies: "@types/react" "*" "@types/react@*": - version "18.2.75" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.75.tgz#45d18f384939306d35312def1bf532eb38a68562" - integrity sha512-+DNnF7yc5y0bHkBTiLKqXFe+L4B3nvOphiMY3tuA5X10esmjqk7smyBZzbGTy2vsiy/Bnzj8yFIBL8xhRacoOg== + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -3018,9 +2469,9 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" @@ -3122,9 +2573,9 @@ wonka "^4.0.14" "@urql/core@>=2.3.1": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.0.0.tgz#690e664cf66f733077c558bf685adbdac2b25823" - integrity sha512-kFkZxusq/VBQKEUcQFtf7AilMotLO+oGpE4WFhCiminZm8ZU2aulXSDWla50TaD0pj704FnWlXts6lRm0uHdDg== + version "5.0.5" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-5.0.5.tgz#8b7d864c40ca30c3ad29bbda93ad718f78a3d055" + integrity sha512-KmWRlN8dJz+XU21wmhcHcTV11n1K7zxaMtVwOhkH7b8H5Z5nuFKY5EkUsWqPlZl53YPiKwTtOMpptz5hamVVNQ== dependencies: "@0no-co/graphql.web" "^1.0.5" wonka "^6.3.2" @@ -3189,14 +2640,16 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.0.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" -acorn@^8.1.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.1.0, acorn@^8.11.0, acorn@^8.8.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== agent-base@6: version "6.0.2" @@ -3224,14 +2677,14 @@ ajv@^6.12.4: uri-js "^4.2.2" ajv@^8.11.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.14.0.tgz#f514ddfd4756abb200e1704414963620a625ebbb" - integrity sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.4.1" anser@^1.4.9: version "1.4.10" @@ -3351,7 +2804,7 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -3368,7 +2821,7 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlast@^1.2.4: +array.prototype.findlast@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== @@ -3400,25 +2853,15 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.toreversed@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz#b989a6bf35c4c5051e1dc0325151bf8088954eba" - integrity sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.tosorted@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" + es-abstract "^1.23.3" + es-errors "^1.3.0" es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.3: @@ -3474,10 +2917,10 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^1.6.8: - version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== +axios@^1.7.7: + version "1.7.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -3523,28 +2966,33 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.10" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.10.tgz#276f41710b03a64f6467433cab72cbc2653c38b1" - integrity sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ== + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.1.tgz#4f08ef4c62c7a7f66a35ed4c0d75e30506acc6be" - integrity sha512-JfTApdE++cgcTWjsiCQlLyFBMbTUft9ja17saCc93lgV33h4tuCVj7tlvu//qpLwaG+3yEz7/KhahGrUMkVq9g== + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" + "@babel/helper-define-polyfill-provider" "^0.6.2" + +babel-plugin-react-compiler@^0.0.0-experimental-592953e-20240517: + version "0.0.0" + resolved "https://registry.yarnpkg.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-0.0.0.tgz#1a1f9867fad83f217f0b3fe6f1b94cca0b77b68b" + integrity sha512-Kigl0V36a/6hLVH7+CCe1CCtU3mFBqBd829V//VtuG7I/pyq+B2QZJqOefd63snQmdfCryNhO9XW1FbGPBvYDA== babel-plugin-react-native-web@~0.19.10: version "0.19.12" @@ -3576,10 +3024,10 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-expo@~11.0.10: - version "11.0.10" - resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-11.0.10.tgz#408ea00f5336f079987146e1a3d9048facb47ce5" - integrity sha512-YBg40Om31gw9IPlRw5v8elzgtPUtNEh4GSibBi5MsmmYddGg4VPjWtCZIFJChN543qRmbGb/fa/kejvLX567hQ== +babel-preset-expo@~11.0.14: + version "11.0.14" + resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-11.0.14.tgz#ca0884e82d89e49cd216ad3497e3d7ad93657d51" + integrity sha512-4BVYR0Sc2sSNxYTiE/OLSnPiOp+weFNy8eV+hX3aD6YAIbBnw+VubKRWqJV/sOJauzOLz0SgYAYyFciYMqizRA== dependencies: "@babel/plugin-proposal-decorators" "^7.12.9" "@babel/plugin-transform-export-namespace-from" "^7.22.11" @@ -3587,7 +3035,8 @@ babel-preset-expo@~11.0.10: "@babel/plugin-transform-parameters" "^7.22.15" "@babel/preset-react" "^7.22.15" "@babel/preset-typescript" "^7.23.0" - "@react-native/babel-preset" "0.74.84" + "@react-native/babel-preset" "0.74.87" + babel-plugin-react-compiler "^0.0.0-experimental-592953e-20240517" babel-plugin-react-native-web "~0.19.10" react-refresh "^0.14.2" @@ -3678,22 +3127,22 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" -browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== +browserslist@^4.23.1, browserslist@^4.23.3: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" bser@2.1.1: version "2.1.1" @@ -3744,9 +3193,9 @@ bytes@3.0.0: integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== cacache@^18.0.2: - version "18.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.3.tgz#864e2c18414e1e141ae8763f31e46c2cb96d1b21" - integrity sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg== + version "18.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.4.tgz#4601d7578dadb59c66044e157d02a3314682d6a5" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== dependencies: "@npmcli/fs" "^3.1.0" fs-minipass "^3.0.0" @@ -3806,10 +3255,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001587: - version "1.0.30001608" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz#7ae6e92ffb300e4b4ec2f795e0abab456ec06cc0" - integrity sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA== +caniuse-lite@^1.0.30001646: + version "1.0.30001651" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" + integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" @@ -3871,18 +3320,6 @@ chrome-launcher@^0.15.2: is-wsl "^2.2.0" lighthouse-logger "^1.0.0" -chromium-edge-launcher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/chromium-edge-launcher/-/chromium-edge-launcher-1.0.0.tgz#0443083074715a13c669530b35df7bfea33b1509" - integrity sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA== - dependencies: - "@types/node" "*" - escape-string-regexp "^4.0.0" - is-wsl "^2.2.0" - lighthouse-logger "^1.0.0" - mkdirp "^1.0.4" - rimraf "^3.0.2" - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -3894,9 +3331,9 @@ ci-info@^3.2.0, ci-info@^3.3.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + version "1.3.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== clean-stack@^2.0.0: version "2.2.0" @@ -4136,12 +3573,12 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -core-js-compat@^3.36.1: - version "3.36.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.1.tgz#1818695d72c99c25d621dca94e6883e190cea3c8" - integrity sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA== +core-js-compat@^3.38.0: + version "3.38.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.0.tgz#d93393b1aa346b6ee683377b0c31172ccfe607aa" + integrity sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A== dependencies: - browserslist "^4.23.0" + browserslist "^4.23.3" core-util-is@~1.0.0: version "1.0.3" @@ -4399,9 +3836,9 @@ data-view-byte-offset@^1.0.0: is-data-view "^1.0.1" dayjs@^1.8.15: - version "1.11.10" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" - integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + version "1.11.12" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" + integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== debug@2.6.9, debug@^2.2.0, debug@^2.6.9: version "2.6.9" @@ -4411,9 +3848,9 @@ debug@2.6.9, debug@^2.2.0, debug@^2.6.9: ms "2.0.0" debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" @@ -4440,9 +3877,9 @@ decode-uri-component@^0.2.2: integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + version "1.5.3" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" + integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== deep-extend@^0.6.0: version "0.6.0" @@ -4526,15 +3963,6 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -deprecated-react-native-prop-types@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/deprecated-react-native-prop-types/-/deprecated-react-native-prop-types-5.0.0.tgz#02a12f090da7bd9e8c3ac53c31cf786a1315d302" - integrity sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ== - dependencies: - "@react-native/normalize-colors" "^0.73.0" - invariant "^2.2.4" - prop-types "^15.8.1" - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4642,10 +4070,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.668: - version "1.4.731" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.731.tgz#d3dc19f359045b750a1fb0bc42315a502d950187" - integrity sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw== +electron-to-chromium@^1.5.4: + version "1.5.6" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz#c81d9938b5a877314ad370feb73b4e5409b36abd" + integrity sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw== emittery@^0.13.1: version "0.13.1" @@ -4690,9 +4118,9 @@ env-paths@^2.2.1: integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== envinfo@^7.10.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.12.0.tgz#b56723b39c2053d67ea5714f026d05d4f5cc7acd" - integrity sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg== + version "7.13.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" + integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== eol@^0.9.1: version "0.9.1" @@ -4721,7 +4149,7 @@ errorhandler@^1.5.1: accepts "~1.3.7" escape-html "~1.0.3" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2: +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -4780,19 +4208,19 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.0.17: - version "1.0.18" - resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" - integrity sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA== +es-iterator-helpers@^1.0.19: + version "1.0.19" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" + integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== dependencies: call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.23.0" + es-abstract "^1.23.3" es-errors "^1.3.0" es-set-tostringtag "^2.0.3" function-bind "^1.1.2" @@ -4837,7 +4265,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -escalade@^3.1.1: +escalade@^3.1.1, escalade@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== @@ -4874,28 +4302,28 @@ escodegen@^2.0.0: source-map "~0.6.1" eslint-plugin-react@^7.32.2: - version "7.34.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz#6806b70c97796f5bbfb235a5d3379ece5f4da997" - integrity sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw== + version "7.35.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz#00b1e4559896710e58af6358898f2ff917ea4c41" + integrity sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA== dependencies: - array-includes "^3.1.7" - array.prototype.findlast "^1.2.4" + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" array.prototype.flatmap "^1.3.2" - array.prototype.toreversed "^1.1.2" - array.prototype.tosorted "^1.1.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" - es-iterator-helpers "^1.0.17" + es-iterator-helpers "^1.0.19" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" - object.hasown "^1.1.3" - object.values "^1.1.7" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.0" prop-types "^15.8.1" resolve "^2.0.0-next.5" semver "^6.3.1" - string.prototype.matchall "^4.0.10" + string.prototype.matchall "^4.0.11" + string.prototype.repeat "^1.0.0" eslint-plugin-simple-import-sort@^10.0.0: version "10.0.0" @@ -4982,9 +4410,9 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -5084,10 +4512,10 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" -expo-asset@~10.0.9: - version "10.0.9" - resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-10.0.9.tgz#cf765b785f3d37b905520c0903172781142f8cbe" - integrity sha512-KX7LPtVf9eeMidUvYZafXZldrVdzfjZNKKFAjFvDy2twg7sTa2R0L4VdCXp32eGLWZyk+i/rpOUSbyD1YFyJnA== +expo-asset@~10.0.10: + version "10.0.10" + resolved "https://registry.yarnpkg.com/expo-asset/-/expo-asset-10.0.10.tgz#9e6e02c1a6ec3d19b50d5e615e4dd8e5cc30e857" + integrity sha512-0qoTIihB79k+wGus9wy0JMKq7DdenziVx3iUkGvMAy2azscSgWH6bd2gJ9CGnhC6JRd3qTMFBL0ou/fx7WZl7A== dependencies: expo-constants "~16.0.0" invariant "^2.2.4" @@ -5123,10 +4551,10 @@ expo-file-system@~17.0.1: resolved "https://registry.yarnpkg.com/expo-file-system/-/expo-file-system-17.0.1.tgz#b9f8af8c1c06ec71d96fd7a0d2567fa9e1c88f15" integrity sha512-dYpnZJqTGj6HCYJyXAgpFkQWsiCH3HY1ek2cFZVHFoEc5tLz9gmdEgTF6nFHurvmvfmXqxi7a5CXyVm0aFYJBw== -expo-font@~12.0.7: - version "12.0.7" - resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-12.0.7.tgz#4e81a90c72262f64d8a18ecc2f7a0da4446048bb" - integrity sha512-rbSdpjtT/A3M+u9xchR9tdD+5VGSxptUis7ngX5zfAVp3O5atOcPNSA82Jeo15HkrQE+w/upfFBOvi56lsGdsQ== +expo-font@~12.0.10: + version "12.0.10" + resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-12.0.10.tgz#62deaf1f46159d7839f01305f44079268781b1db" + integrity sha512-Q1i2NuYri3jy32zdnBaHHCya1wH1yMAsI+3CCmj9zlQzlhsS9Bdwcj2W3c5eU5FvH2hsNQy4O+O1NnM6o/pDaQ== dependencies: fontfaceobserver "^2.1.0" @@ -5162,21 +4590,23 @@ expo-localization@~15.0.3: dependencies: rtl-detect "^1.0.2" -expo-modules-autolinking@1.11.1: - version "1.11.1" - resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.11.1.tgz#4a867f727d9dfde07de8dde14b333a3cbf82ce3c" - integrity sha512-2dy3lTz76adOl7QUvbreMCrXyzUiF8lygI7iFJLjgIQIVH+43KnFWE5zBumpPbkiaq0f0uaFpN9U0RGQbnKiMw== +expo-modules-autolinking@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-1.11.2.tgz#98245eb66f157bbfebebd2d576256ea7c683c605" + integrity sha512-fdcaNO8ucHA3yLNY52ZUENBcAG7KEx8QyMmnVNavO1JVBGRMZG8JyVcbrhYQDtVtpxkbai5YzwvLutINvbDZDQ== dependencies: chalk "^4.1.0" commander "^7.2.0" fast-glob "^3.2.5" find-up "^5.0.0" fs-extra "^9.1.0" + require-from-string "^2.0.2" + resolve-from "^5.0.0" -expo-modules-core@1.12.15: - version "1.12.15" - resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.12.15.tgz#62cd2aa46762f29c4c2271a1dfee5f8e3f651130" - integrity sha512-VjDPIgUyhCZzf692NF4p2iFTsKAQMcU3jc0pg33eNvN/kdrJqkeucqCDuuwoNxg0vIBKtoqAJDuPnWiemldsTg== +expo-modules-core@1.12.24: + version "1.12.24" + resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-1.12.24.tgz#8c35a16ed6ecb8997f6bd527fc95a8c22f343602" + integrity sha512-3geIe2ecizlp7l26iY8Nmc59z2d1RUC5nQZtI9iJoi5uHEUV/zut8e4zRLFVnZb8KOcMcEDsrvaBL5DPnqdfpg== dependencies: invariant "^2.2.4" @@ -5190,44 +4620,49 @@ expo-screen-orientation@~7.0.5: resolved "https://registry.yarnpkg.com/expo-screen-orientation/-/expo-screen-orientation-7.0.5.tgz#0a517982151c6519fa4b10ce27047de39c1f92cf" integrity sha512-1j0MzVzYpjKQo4BWowQ3ZYwC3OnddX/8k06C8VYTAxMyd8ou1k+rG4tm+GIV2n2RSzc3g7cfPlQwSYr3/SGmbg== -expo-secure-store@~13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/expo-secure-store/-/expo-secure-store-13.0.1.tgz#fc886d3e0ed12890c8dd74e7cc44e35b03f2d79b" - integrity sha512-5DTKjbv98X7yPbm+1jER/sOEIlt2Ih7qwabTvkWDXry5bPcQGoulxH5zIX9+JvVH7of8GI4t7NSEbpAO3P7FZA== +expo-secure-store@~13.0.2: + version "13.0.2" + resolved "https://registry.yarnpkg.com/expo-secure-store/-/expo-secure-store-13.0.2.tgz#ba8f6076fc38062a28bb2ce5edab9cd28ef88598" + integrity sha512-3QYgoneo8p8yeeBPBiAfokNNc2xq6+n8+Ob4fAlErEcf4H7Y72LH+K/dx0nQyWau2ZKZUXBxyyfuHFyVKrEVLg== -expo-splash-screen@~0.27.5: - version "0.27.5" - resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.27.5.tgz#bcc1ebb4e761e19a1f2112469f3d424a36fb1e2c" - integrity sha512-9rdZuLkFCfgJBxrheUsOEOIW6Rp+9NVlpSE0hgXQwbTCLTncf00IHSE8/L2NbFyeDLNjof1yZBppaV7tXHRUzA== +expo-splash-screen@~0.27.6: + version "0.27.6" + resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.27.6.tgz#d57f3f80d22f4ada90fd2edf573bbc148f956f67" + integrity sha512-joUwZQS48k3VMnucQ0Y8Dle1t1FyIvluQA4kjuPx2x7l2dRrfctbo34ahTnC0p1o2go5oN2iEnSTOElY4wRQHw== dependencies: - "@expo/prebuild-config" "7.0.6" + "@expo/prebuild-config" "7.0.8" expo-status-bar@~1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.12.1.tgz#52ce594aab5064a0511d14375364d718ab78aa66" integrity sha512-/t3xdbS8KB0prj5KG5w7z+wZPFlPtkgs95BsmrP/E7Q0xHXTcDcQ6Cu2FkFuRM+PKTb17cJDnLkawyS5vDLxMA== -expo@~51.0.14: - version "51.0.14" - resolved "https://registry.yarnpkg.com/expo/-/expo-51.0.14.tgz#98769b090a0b5c7d7c7028fdb9c21904f56cd9fa" - integrity sha512-99BAMSYBH1aq1TIEJqM03kRpsZjN8OqZXDqYHRq9/PXT67axRUOvRjwMMLprnCmqkAVM7m7FpiECNWN4U0gvLQ== +expo@~51.0.34: + version "51.0.34" + resolved "https://registry.yarnpkg.com/expo/-/expo-51.0.34.tgz#7b5c47f6bb4402e7f781f03918274b4194391706" + integrity sha512-l2oi+hIj/ph3qGcvM54Nyd2uF3Zq5caVmSg7AXfBUgtvcdv5Pj1EI/2xCXP9tfMNQo351CWyOwBkTGjv+GdrLg== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.18.19" - "@expo/config" "9.0.1" - "@expo/config-plugins" "8.0.5" - "@expo/metro-config" "0.18.7" - "@expo/vector-icons" "^14.0.0" - babel-preset-expo "~11.0.10" - expo-asset "~10.0.9" + "@expo/cli" "0.18.29" + "@expo/config" "9.0.3" + "@expo/config-plugins" "8.0.9" + "@expo/metro-config" "0.18.11" + "@expo/vector-icons" "^14.0.3" + babel-preset-expo "~11.0.14" + expo-asset "~10.0.10" expo-file-system "~17.0.1" - expo-font "~12.0.7" + expo-font "~12.0.10" expo-keep-awake "~13.0.2" - expo-modules-autolinking "1.11.1" - expo-modules-core "1.12.15" + expo-modules-autolinking "1.11.2" + expo-modules-core "1.12.24" fbemitter "^3.0.0" whatwg-url-without-unicode "8.0.0-3" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5254,10 +4689,15 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +fast-uri@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.1.tgz#cddd2eecfc83a71c1be2cc2ef2061331be8a7134" + integrity sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw== + fast-xml-parser@^4.0.12, fast-xml-parser@^4.2.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz#190f9d99097f0c8f2d3a0e681a10404afca052ff" - integrity sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw== + version "4.4.1" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== dependencies: strnum "^1.0.5" @@ -5312,10 +4752,10 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" @@ -5405,14 +4845,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.233.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.233.0.tgz#b983e65812d5ecae79f08ae3ed8ad2e131a9b966" - integrity sha512-E/mv51GYJfLuRX6fZnw4M52gBxYa8pkHUOgNEZOcQK2RTXS8YXeU5rlalkTcY99UpwbeNVCSUFKaavpOksi/pQ== - -flow-parser@^0.206.0: - version "0.206.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.206.0.tgz#f4f794f8026535278393308e01ea72f31000bfef" - integrity sha512-HVzoK3r6Vsg+lKvlIZzaWNBVai+FXTX1wdYhz/wVlH13tb/gOdLXmlTqy6odmTBhT5UoWUbq0k8263Qhr9d88w== + version "0.243.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.243.0.tgz#4a55047035a4fa0fa7215348b9d7b4ea276abb04" + integrity sha512-HCDBfH+kZcY5etWYeAqatjW78gkIryzb9XixRsA8lGI1uyYc7aCpElkkO4H+KIpoyQMiY0VAZPI4cyac3wQe8w== follow-redirects@^1.15.6: version "1.15.6" @@ -5432,9 +4867,9 @@ for-each@^0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -5546,7 +4981,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -5658,29 +5093,19 @@ glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2: - version "10.4.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" - integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== +glob@^10.2.2, glob@^10.4.2: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" minimatch "^9.0.4" minipass "^7.1.2" + package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.3: +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -5712,11 +5137,12 @@ globals@^13.19.0: type-fest "^0.20.2" globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.0.1, globby@^11.1.0: version "11.1.0" @@ -5805,27 +5231,15 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -hermes-estree@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.15.0.tgz#e32f6210ab18c7b705bdcb375f7700f2db15d6ba" - integrity sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ== - hermes-estree@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.19.1.tgz#d5924f5fac2bf0532547ae9f506d6db8f3c96392" integrity sha512-daLGV3Q2MKk8w4evNMKwS8zBE/rcpA800nu1Q5kM08IKijoSnPe9Uo1iIxzPKRkn95IxxsgBMPeYHt3VG4ej2g== -hermes-estree@0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.20.1.tgz#0b9a544cf883a779a8e1444b915fa365bef7f72d" - integrity sha512-SQpZK4BzR48kuOg0v4pb3EAGNclzIlqMj3Opu/mu7bbAoFw6oig6cEt/RAi0zTFW/iW6Iz9X9ggGuZTAZ/yZHg== - -hermes-parser@0.15.0: - version "0.15.0" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.15.0.tgz#f611a297c2a2dbbfbce8af8543242254f604c382" - integrity sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q== - dependencies: - hermes-estree "0.15.0" +hermes-estree@0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/hermes-estree/-/hermes-estree-0.23.0.tgz#89c5419877b9d6bce4bb616821f496f5c5daddbc" + integrity sha512-Rkp0PNLGpORw4ktsttkVbpYJbrYKS3hAnkxu8D9nvQi6LvSbuPa+tYw/t2u3Gjc35lYd/k95YkjqyTcN4zspag== hermes-parser@0.19.1: version "0.19.1" @@ -5834,12 +5248,12 @@ hermes-parser@0.19.1: dependencies: hermes-estree "0.19.1" -hermes-parser@0.20.1: - version "0.20.1" - resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.20.1.tgz#ad10597b99f718b91e283f81cbe636c50c3cff92" - integrity sha512-BL5P83cwCogI8D7rrDCgsFY0tdYUtmFP9XaXtl2IQjC+2Xo+4okjfXintlTxcIwl4qeGddEl28Z11kbVIw0aNA== +hermes-parser@0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.23.0.tgz#3541907b77ca9e94fd093e8ef0ff97ca5340dee8" + integrity sha512-xLwM4ylfHGwrm+2qXfO1JT/fnqEDGSnpS/9hQ4VLtqTexSviu2ZpBgz07U8jVtndq67qdb/ps0qvaWDZ3fkTyg== dependencies: - hermes-estree "0.20.1" + hermes-estree "0.23.0" hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -5925,14 +5339,14 @@ human-signals@^5.0.0: integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== husky@^9.0.11: - version "9.0.11" - resolved "https://registry.yarnpkg.com/husky/-/husky-9.0.11.tgz#fc91df4c756050de41b3e478b2158b87c1e79af9" - integrity sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw== + version "9.1.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.4.tgz#926fd19c18d345add5eab0a42b2b6d9a80259b34" + integrity sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA== -i18next@^23.11.1: - version "23.11.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.1.tgz#8e384b6ad7d6ba70c40cb86e020438251a5ff8b1" - integrity sha512-mXw4A24BiPZKRsbb9ewgSvjYd6fxFCNwJyfK6nYfSTIAX2GkCWcb598m3DFkDZmqADatvuASrKo6qwORz3VwTQ== +i18next@^23.15.1: + version "23.15.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.15.1.tgz#c50de337bf12ca5195e697cc0fbe5f32304871d9" + integrity sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA== dependencies: "@babel/runtime" "^7.23.2" @@ -5977,9 +5391,9 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: resolve-from "^4.0.0" import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -6107,11 +5521,11 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + version "2.15.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.0.tgz#71c72ec5442ace7e76b306e9d48db361f22699ea" + integrity sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" is-data-view@^1.0.1: version "1.0.1" @@ -6400,9 +5814,9 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1" - integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw== + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== dependencies: "@babel/core" "^7.23.9" "@babel/parser" "^7.23.9" @@ -6448,9 +5862,9 @@ iterator.prototype@^1.1.2: set-function-name "^2.0.1" jackspeak@^3.1.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" - integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -6590,12 +6004,12 @@ jest-environment-node@^29.6.3, jest-environment-node@^29.7.0: jest-mock "^29.7.0" jest-util "^29.7.0" -jest-expo@~51.0.1: - version "51.0.2" - resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-51.0.2.tgz#9c06ed5e890acf835a84200deb0969738e9f8721" - integrity sha512-ijIcjEASh2uORA3DBubOiIJTrPZXp8J3FedaEdnZPT09FkyTH8tZXp/ZRv37LKUomGA5XEHDYR2FY3UMfdIa7g== +jest-expo@~51.0.4: + version "51.0.4" + resolved "https://registry.yarnpkg.com/jest-expo/-/jest-expo-51.0.4.tgz#a780e5a2f7d3c54534f799666fd00a5a11de0ac7" + integrity sha512-WmlR4rUur1TNF/F14brKCmPdX3TWf7Bno/6A1PuxnflN79LEIXpXuPKMlMWwCCChTohGB5FRniknRibblWu1ug== dependencies: - "@expo/config" "~9.0.0" + "@expo/config" "~9.0.0-beta.0" "@expo/json-file" "^8.3.0" "@jest/create-cache-key-function" "^29.2.1" babel-jest "^29.2.1" @@ -6874,14 +6288,14 @@ jimp-compact@0.16.1: integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww== jiti@^1.19.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== joi@^17.2.1: - version "17.12.3" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.3.tgz#944646979cd3b460178547b12ba37aca8482f63d" - integrity sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g== + version "17.13.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -7254,7 +6668,7 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== -lodash@^4.16.6, lodash@^4.17.13, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.17.4: +lodash@^4.16.6, lodash@^4.17.13, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7291,9 +6705,9 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: js-tokens "^3.0.0 || ^4.0.0" lru-cache@^10.0.1, lru-cache@^10.2.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" - integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== lru-cache@^5.1.1: version "5.1.1" @@ -7403,57 +6817,64 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -metro-babel-transformer@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.80.8.tgz#2951eeab76630b3c59f3874d04f4f12a6e73b2bd" - integrity sha512-TTzNwRZb2xxyv4J/+yqgtDAP2qVqH3sahsnFu6Xv4SkLqzrivtlnyUbaeTdJ9JjtADJUEjCbgbFgUVafrXdR9Q== +metro-babel-transformer@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.80.10.tgz#a8d204ae51872b1024715e2c545363d7a3acdca3" + integrity sha512-GXHueUzgzcazfzORDxDzWS9jVVRV6u+cR6TGvHOfGdfLzJCj7/D0PretLfyq+MwN20twHxLW+BUXkoaB8sCQBg== dependencies: "@babel/core" "^7.20.0" - hermes-parser "0.20.1" + flow-enums-runtime "^0.0.6" + hermes-parser "0.23.0" nullthrows "^1.1.1" -metro-cache-key@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.80.8.tgz#d57af9c25f9fe7e755644594d602ef89124ee06b" - integrity sha512-qWKzxrLsRQK5m3oH8ePecqCc+7PEhR03cJE6Z6AxAj0idi99dHOSitTmY0dclXVB9vP2tQIAE8uTd8xkYGk8fA== +metro-cache-key@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.80.10.tgz#7b2505c16ac333af857cedb20bde0373e1855944" + integrity sha512-57qBhO3zQfoU/hP4ZlLW5hVej2jVfBX6B4NcSfMj4LgDPL3YknWg80IJBxzQfjQY/m+fmMLmPy8aUMHzUp/guA== + dependencies: + flow-enums-runtime "^0.0.6" -metro-cache@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.80.8.tgz#bc7d38611e4f31686a99045d4f2956c0bff4dd3b" - integrity sha512-5svz+89wSyLo7BxdiPDlwDTgcB9kwhNMfNhiBZPNQQs1vLFXxOkILwQiV5F2EwYT9DEr6OPZ0hnJkZfRQ8lDYQ== +metro-cache@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.80.10.tgz#3110af31ee8d77397965d6c3e7afadb778bdc8a3" + integrity sha512-8CBtDJwMguIE5RvV3PU1QtxUG8oSSX54mIuAbRZmcQ0MYiOl9JdrMd4JCBvIyhiZLoSStph425SMyCSnjtJsdA== dependencies: - metro-core "0.80.8" - rimraf "^3.0.2" + exponential-backoff "^3.1.1" + flow-enums-runtime "^0.0.6" + metro-core "0.80.10" -metro-config@0.80.8, metro-config@^0.80.3: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.8.tgz#1961feed6334601951ea72600901dafade56a973" - integrity sha512-VGQJpfJawtwRzGzGXVUoohpIkB0iPom4DmSbAppKfumdhtLA8uVeEPp2GM61kL9hRvdbMhdWA7T+hZFDlo4mJA== +metro-config@0.80.10, metro-config@^0.80.3: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.80.10.tgz#86c7a5e2665fb8b4c7ffd08976803c88fd6ce962" + integrity sha512-0GYAw0LkmGbmA81FepKQepL1KU/85Cyv7sAiWm6QWeV6AcVCpsKg6jGLqGHJ0LLPL60rWzA4TV1DQAlzdJAEtA== dependencies: connect "^3.6.5" cosmiconfig "^5.0.5" + flow-enums-runtime "^0.0.6" jest-validate "^29.6.3" - metro "0.80.8" - metro-cache "0.80.8" - metro-core "0.80.8" - metro-runtime "0.80.8" + metro "0.80.10" + metro-cache "0.80.10" + metro-core "0.80.10" + metro-runtime "0.80.10" -metro-core@0.80.8, metro-core@^0.80.3: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.8.tgz#85cf9745e767a33fe96bc5f166b71e213a482978" - integrity sha512-g6lud55TXeISRTleW6SHuPFZHtYrpwNqbyFIVd9j9Ofrb5IReiHp9Zl8xkAfZQp8v6ZVgyXD7c130QTsCz+vBw== +metro-core@0.80.10, metro-core@^0.80.3: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.80.10.tgz#a3a7986ca8b635ada250149efdcd9b69bfefca85" + integrity sha512-nwBB6HbpGlNsZMuzxVqxqGIOsn5F3JKpsp8PziS7Z4mV8a/jA1d44mVOgYmDa2q5WlH5iJfRIIhdz24XRNDlLA== dependencies: + flow-enums-runtime "^0.0.6" lodash.throttle "^4.1.1" - metro-resolver "0.80.8" + metro-resolver "0.80.10" -metro-file-map@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.80.8.tgz#216e54db4dc8496815bd38bb806d469c5f5b66fd" - integrity sha512-eQXMFM9ogTfDs2POq7DT2dnG7rayZcoEgRbHPXvhUWkVwiKkro2ngcBE++ck/7A36Cj5Ljo79SOkYwHaWUDYDw== +metro-file-map@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-file-map/-/metro-file-map-0.80.10.tgz#7eef9e5ef96a5aad93e4f9680fadb6c1e1ca34bc" + integrity sha512-ytsUq8coneaN7ZCVk1IogojcGhLIbzWyiI2dNmw2nnBgV/0A+M5WaTTgZ6dJEz3dzjObPryDnkqWPvIGLCPtiw== dependencies: anymatch "^3.0.3" debug "^2.2.0" fb-watchman "^2.0.0" + flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" invariant "^2.2.4" jest-worker "^29.6.3" @@ -7464,11 +6885,12 @@ metro-file-map@0.80.8: optionalDependencies: fsevents "^2.3.2" -metro-minify-terser@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.80.8.tgz#166413d2286900e7fd764aa30497a1596bc18c00" - integrity sha512-y8sUFjVvdeUIINDuW1sejnIjkZfEF+7SmQo0EIpYbWmwh+kq/WMj74yVaBWuqNjirmUp1YNfi3alT67wlbBWBQ== +metro-minify-terser@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-minify-terser/-/metro-minify-terser-0.80.10.tgz#21e10cdd52b05cc95c195b8c22bb09afc1b45347" + integrity sha512-Xyv9pEYpOsAerrld7cSLIcnCCpv8ItwysOmTA+AKf1q4KyE9cxrH2O2SA0FzMCkPzwxzBWmXwHUr+A89BpEM6g== dependencies: + flow-enums-runtime "^0.0.6" terser "^5.15.0" metro-react-native-babel-preset@^0.76.4: @@ -7516,77 +6938,84 @@ metro-react-native-babel-preset@^0.76.4: babel-plugin-transform-flow-enums "^0.0.2" react-refresh "^0.4.0" -metro-resolver@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.80.8.tgz#bcc8f8d7f874a9c5fee9ebbde8541d6dc88783df" - integrity sha512-JdtoJkP27GGoZ2HJlEsxs+zO7jnDUCRrmwXJozTlIuzLHMRrxgIRRby9fTCbMhaxq+iA9c+wzm3iFb4NhPmLbQ== +metro-resolver@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.80.10.tgz#d335e1daed29124d7f96dabe48f9c94a56176bac" + integrity sha512-EYC5CL7f+bSzrqdk1bylKqFNGabfiI5PDctxoPx70jFt89Jz+ThcOscENog8Jb4LEQFG6GkOYlwmPpsi7kx3QA== + dependencies: + flow-enums-runtime "^0.0.6" -metro-runtime@0.80.8, metro-runtime@^0.80.3: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.8.tgz#8f265369c05d9a3f05f9915842fac5d4e93f44bd" - integrity sha512-2oScjfv6Yb79PelU1+p8SVrCMW9ZjgEiipxq7jMRn8mbbtWzyv3g8Mkwr+KwOoDFI/61hYPUbY8cUnu278+x1g== +metro-runtime@0.80.10, metro-runtime@^0.80.3: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.80.10.tgz#3fbca798586fa3771018e1d2bd0ef7ac445805ba" + integrity sha512-Xh0N589ZmSIgJYAM+oYwlzTXEHfASZac9TYPCNbvjNTn0EHKqpoJ/+Im5G3MZT4oZzYv4YnvzRtjqS5k0tK94A== dependencies: "@babel/runtime" "^7.0.0" + flow-enums-runtime "^0.0.6" -metro-source-map@0.80.8, metro-source-map@^0.80.3: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.8.tgz#fe92c2b82739c34cf46372a2be07d4e9cac8eb09" - integrity sha512-+OVISBkPNxjD4eEKhblRpBf463nTMk3KMEeYS8Z4xM/z3qujGJGSsWUGRtH27+c6zElaSGtZFiDMshEb8mMKQg== +metro-source-map@0.80.10, metro-source-map@^0.80.3: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.80.10.tgz#95bc0c1edccd3e0b53af4126deda7fbbe104ef15" + integrity sha512-EyZswqJW8Uukv/HcQr6K19vkMXW1nzHAZPWJSEyJFKIbgp708QfRZ6vnZGmrtFxeJEaFdNup4bGnu8/mIOYlyA== dependencies: "@babel/traverse" "^7.20.0" "@babel/types" "^7.20.0" + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-symbolicate "0.80.8" + metro-symbolicate "0.80.10" nullthrows "^1.1.1" - ob1 "0.80.8" + ob1 "0.80.10" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.80.8.tgz#881afc90453450208bf519b22e54962fc909d432" - integrity sha512-nwhYySk79jQhwjL9QmOUo4wS+/0Au9joEryDWw7uj4kz2yvw1uBjwmlql3BprQCBzRdB3fcqOP8kO8Es+vE31g== +metro-symbolicate@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.80.10.tgz#441121d97408c5a3da25c49c3ce8ae7b034eadf7" + integrity sha512-qAoVUoSxpfZ2DwZV7IdnQGXCSsf2cAUExUcZyuCqGlY5kaWBb0mx2BL/xbMFDJ4wBp3sVvSBPtK/rt4J7a0xBA== dependencies: + flow-enums-runtime "^0.0.6" invariant "^2.2.4" - metro-source-map "0.80.8" + metro-source-map "0.80.10" nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro-transform-plugins@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.80.8.tgz#2ed3162cec7fa7549279a6031e6d910198332a77" - integrity sha512-sSu8VPL9Od7w98MftCOkQ1UDeySWbsIAS5I54rW22BVpPnI3fQ42srvqMLaJUQPjLehUanq8St6OMBCBgH/UWw== +metro-transform-plugins@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.80.10.tgz#df8f44396154ad0bf151533b9bbcdfdf90fccebb" + integrity sha512-leAx9gtA+2MHLsCeWK6XTLBbv2fBnNFu/QiYhWzMq8HsOAP4u1xQAU0tSgPs8+1vYO34Plyn79xTLUtQCRSSUQ== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.0" "@babel/template" "^7.0.0" "@babel/traverse" "^7.20.0" + flow-enums-runtime "^0.0.6" nullthrows "^1.1.1" -metro-transform-worker@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.80.8.tgz#df3bc21928e1c99b077cd1e2feec9f13d6c351c6" - integrity sha512-+4FG3TQk3BTbNqGkFb2uCaxYTfsbuFOCKMMURbwu0ehCP8ZJuTUramkaNZoATS49NSAkRgUltgmBa4YaKZ5mqw== +metro-transform-worker@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.80.10.tgz#aa083673653d5555b2eb34fec316759e57aa97ab" + integrity sha512-zNfNLD8Rz99U+JdOTqtF2o7iTjcDMMYdVS90z6+81Tzd2D0lDWVpls7R1hadS6xwM+ymgXFQTjM6V6wFoZaC0g== dependencies: "@babel/core" "^7.20.0" "@babel/generator" "^7.20.0" "@babel/parser" "^7.20.0" "@babel/types" "^7.20.0" - metro "0.80.8" - metro-babel-transformer "0.80.8" - metro-cache "0.80.8" - metro-cache-key "0.80.8" - metro-minify-terser "0.80.8" - metro-source-map "0.80.8" - metro-transform-plugins "0.80.8" + flow-enums-runtime "^0.0.6" + metro "0.80.10" + metro-babel-transformer "0.80.10" + metro-cache "0.80.10" + metro-cache-key "0.80.10" + metro-minify-terser "0.80.10" + metro-source-map "0.80.10" + metro-transform-plugins "0.80.10" nullthrows "^1.1.1" -metro@0.80.8, metro@^0.80.3: - version "0.80.8" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.8.tgz#42faa80ea8f1c43bea022b55baa3162e90878868" - integrity sha512-in7S0W11mg+RNmcXw+2d9S3zBGmCARDxIwoXJAmLUQOQoYsRP3cpGzyJtc7WOw8+FXfpgXvceD0u+PZIHXEL7g== +metro@0.80.10, metro@^0.80.3: + version "0.80.10" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.80.10.tgz#522f1ad7435632f0d9eac67f732083cf45205fbc" + integrity sha512-FDPi0X7wpafmDREXe1lgg3WzETxtXh6Kpq8+IwsG35R2tMyp2kFIqDdshdohuvDt1J/qDARcEPq7V/jElTb1kA== dependencies: "@babel/code-frame" "^7.0.0" "@babel/core" "^7.20.0" @@ -7602,49 +7031,54 @@ metro@0.80.8, metro@^0.80.3: debug "^2.2.0" denodeify "^1.2.1" error-stack-parser "^2.0.6" + flow-enums-runtime "^0.0.6" graceful-fs "^4.2.4" - hermes-parser "0.20.1" + hermes-parser "0.23.0" image-size "^1.0.2" invariant "^2.2.4" jest-worker "^29.6.3" jsc-safe-url "^0.2.2" lodash.throttle "^4.1.1" - metro-babel-transformer "0.80.8" - metro-cache "0.80.8" - metro-cache-key "0.80.8" - metro-config "0.80.8" - metro-core "0.80.8" - metro-file-map "0.80.8" - metro-resolver "0.80.8" - metro-runtime "0.80.8" - metro-source-map "0.80.8" - metro-symbolicate "0.80.8" - metro-transform-plugins "0.80.8" - metro-transform-worker "0.80.8" + metro-babel-transformer "0.80.10" + metro-cache "0.80.10" + metro-cache-key "0.80.10" + metro-config "0.80.10" + metro-core "0.80.10" + metro-file-map "0.80.10" + metro-resolver "0.80.10" + metro-runtime "0.80.10" + metro-source-map "0.80.10" + metro-symbolicate "0.80.10" + metro-transform-plugins "0.80.10" + metro-transform-worker "0.80.10" mime-types "^2.1.27" node-fetch "^2.2.0" nullthrows "^1.1.1" - rimraf "^3.0.2" serialize-error "^2.1.0" source-map "^0.5.6" strip-ansi "^6.0.0" throat "^5.0.0" - ws "^7.5.1" + ws "^7.5.10" yargs "^17.6.2" micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@>= 1.43.0 < 2": + version "1.53.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" + integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -7682,7 +7116,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7690,9 +7124,9 @@ min-indent@^1.0.0: brace-expansion "^1.1.7" minimatch@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" - integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" @@ -7747,7 +7181,7 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@^0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -7764,10 +7198,10 @@ moment@^2.30.1: resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== -moti@^0.28.1: - version "0.28.1" - resolved "https://registry.yarnpkg.com/moti/-/moti-0.28.1.tgz#0dc9dc180d3f8b949b72bdb923813a9c7da75b6f" - integrity sha512-DRlb/3k5GMgb2HIgPsjsKS7k2TAIcCTSaV4KFb4/J+WqJtPgywTz0O2byPsxNqUHImvDkf04fKXW5PcpXvC9zA== +moti@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/moti/-/moti-0.29.0.tgz#bd8820749bbaae61ef28298b53fabb84fe4ad171" + integrity sha512-o/blVE3lm0i/6E5X0RLK59SVWEGxo7pQh8dTm+JykVCYY9bcz0lWyZFCO1s+MMNq+nMsSZBX8lkp4im/AZmhyw== dependencies: framer-motion "^6.5.1" @@ -7786,15 +7220,6 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -mv@~2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" - integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== - dependencies: - mkdirp "~0.5.1" - ncp "~2.0.0" - rimraf "~2.4.0" - mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -7819,11 +7244,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -ncp@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" @@ -7878,10 +7298,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== node-stream-zip@^1.9.1: version "1.15.0" @@ -7937,14 +7357,16 @@ nullthrows@^1.1.1: integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== nwsapi@^2.2.2: - version "2.2.7" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.7.tgz#738e0707d3128cb750dddcfe90e4610482df0f30" - integrity sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ== + version "2.2.12" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.12.tgz#fb6af5c0ec35b27b4581eb3bbad34ec9e5c696f8" + integrity sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w== -ob1@0.80.8: - version "0.80.8" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.80.8.tgz#08be1b8398d004719074ad702c975a5c7e1b29f2" - integrity sha512-QHJQk/lXMmAW8I7AIM3in1MSlwe1umR72Chhi8B7Xnq6mzjhBKkA6Fy/zAhQnGkA4S912EPCEvTij5yh+EQTAA== +ob1@0.80.10: + version "0.80.10" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.80.10.tgz#30dc7e4619cf591d46d7e16db5d4aed3e2674172" + integrity sha512-dJHyB0S6JkMorUSfSGcYGkkg9kmq3qDUu3ygZUKIfkr47XOPuG35r2Sk6tbwtHXbdKIXmcMvM8DF2CwgdyaHfQ== + dependencies: + flow-enums-runtime "^0.0.6" object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -7952,9 +7374,9 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== object-keys@^1.1.1: version "1.1.1" @@ -7971,7 +7393,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.7: +object.entries@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== @@ -7980,7 +7402,7 @@ object.entries@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: +object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -7990,16 +7412,7 @@ object.fromentries@^2.0.7: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.hasown@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.4.tgz#e270ae377e4c120cdcb7656ce66884a6218283dc" - integrity sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg== - dependencies: - define-properties "^1.2.1" - es-abstract "^1.23.2" - es-object-atoms "^1.0.0" - -object.values@^1.1.6, object.values@^1.1.7: +object.values@^1.1.6, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -8080,16 +7493,16 @@ open@^8.0.4, open@^8.3.0: is-wsl "^2.2.0" optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" + word-wrap "^1.2.5" ora@3.4.0, ora@^3.4.0: version "3.4.0" @@ -8202,6 +7615,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -8312,10 +7730,10 @@ pegjs@^0.10.0: resolved "https://registry.yarnpkg.com/pegjs/-/pegjs-0.10.0.tgz#cf8bafae6eddff4b5a7efb185269eaaf4610ddbd" integrity sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.0, picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -8381,12 +7799,12 @@ possible-typed-array-names@^1.0.0: integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== postcss@~8.4.32: - version "8.4.38" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + version "8.4.41" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.41.tgz#d6104d3ba272d882fe18fc07d15dc2da62fa2681" + integrity sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.0" + picocolors "^1.0.1" source-map-js "^1.2.0" prelude-ls@^1.2.1: @@ -8544,18 +7962,10 @@ rc@~1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-devtools-core@^4.27.7: - version "4.28.5" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.5.tgz#c8442b91f068cdf0c899c543907f7f27d79c2508" - integrity sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA== - dependencies: - shell-quote "^1.6.1" - ws "^7" - react-devtools-core@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.2.0.tgz#072ecd2d84d3653817cc11e4b16f60a3c2b705f9" - integrity sha512-vZK+/gvxxsieAoAyYaiRIVFxlajb7KXhgBDV7OsoMzaAE+IqGpoxusBjIgq5ibqA2IloKu0p9n7tE68z1xs18A== + version "5.3.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-5.3.1.tgz#d57f5b8f74f16e622bd6a7bc270161e4ba162666" + integrity sha512-7FSb9meX0btdBQLwdFOwt6bGqvRPabmVMMslv8fgoSPqXyuGpgQe36kx8gR86XPw7aV1yVouTp6fyZ0EH+NfUw== dependencies: shell-quote "^1.6.1" ws "^7" @@ -8565,18 +7975,18 @@ react-freeze@^1.0.0: resolved "https://registry.yarnpkg.com/react-freeze/-/react-freeze-1.0.4.tgz#cbbea2762b0368b05cbe407ddc9d518c57c6f3ad" integrity sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA== -react-i18next@^14.1.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.0.tgz#44da74fbffd416f5d0c5307ef31735cf10cc91d9" - integrity sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ== +react-i18next@^15.0.2: + version "15.0.2" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-15.0.2.tgz#8b7f3c0e66cb4f99f95e2c507353398c41a68cc2" + integrity sha512-z0W3/RES9Idv3MmJUcf0mDNeeMOUXe+xoL0kPfQPbDoZHmni/XsIoq5zgT2MCFUiau283GuBUK578uD/mkAbLQ== dependencies: - "@babel/runtime" "^7.23.9" + "@babel/runtime" "^7.25.0" html-parse-stringify "^3.0.1" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0, react-is@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== react-is@^16.13.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" @@ -8600,9 +8010,9 @@ react-native-gesture-handler@~2.16.1: prop-types "^15.7.2" react-native-localize@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-3.1.0.tgz#1b322c05af21fd3d78d44e9b747d872ab5155b10" - integrity sha512-A7Rrxl8vuAr5FAqtMFrM5ELLdmszohK6FoHL6qlgxx4HScyOnadoZksbvKHbn+zV5nE8kud2Z4kJM10cN120Zg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-3.2.1.tgz#ce83bfbbceab1216048b2a6529d9151297c8f97f" + integrity sha512-XZsK9+V98XygBkutaPVxTIrwV48wXKk4AQfbjUOmrrsGCqa8WzWsBuEafwWVCMOEQ5coQt0SfM3XKT0Qg7DFXw== react-native-reanimated@~3.10.1: version "3.10.1" @@ -8623,10 +8033,10 @@ react-native-responsive-screen@^1.4.2: resolved "https://registry.yarnpkg.com/react-native-responsive-screen/-/react-native-responsive-screen-1.4.2.tgz#45280826d24f9accbfdf46a36cb8e6d780f76f28" integrity sha512-BLYz0UUpeohrib7jbz6wDmtBD5OmiuMRko4IT8kIF63taXPod/c5iZgmWnr5qOnK8hMuKiGMvsM3sC+eHX/lEQ== -react-native-safe-area-context@4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.1.tgz#29fb27395ff7dfa2fa38788a27226330d73a81cc" - integrity sha512-w8tCuowDorUkPoWPXmhqosovBr33YsukkwYCDERZFHAxIkx6qBadYxfeoaJ91nCQKjkNzGrK5qhoNOeSIcYSpA== +react-native-safe-area-context@4.10.5: + version "4.10.5" + resolved "https://registry.yarnpkg.com/react-native-safe-area-context/-/react-native-safe-area-context-4.10.5.tgz#a9c677a48bd273afa6876772062ce08e8af1f18d" + integrity sha512-Wyb0Nqw2XJ6oZxW/cK8k5q7/UAhg/wbEG6UVf89rQqecDZTDA5ic//P9J6VvJRVZerzGmxWQpVuM7f+PRYUM4g== react-native-screens@3.31.1: version "3.31.1" @@ -8664,66 +8074,22 @@ react-native-svg@^6.2.1: lodash "^4.16.6" pegjs "^0.10.0" -react-native@*: - version "0.73.6" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.73.6.tgz#ed4c675e205a34bd62c4ce8b9bd1ca5c85126d5b" - integrity sha512-oqmZe8D2/VolIzSPZw+oUd6j/bEmeRHwsLn1xLA5wllEYsZ5zNuMsDus235ONOnCRwexqof/J3aztyQswSmiaA== - dependencies: - "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "12.3.6" - "@react-native-community/cli-platform-android" "12.3.6" - "@react-native-community/cli-platform-ios" "12.3.6" - "@react-native/assets-registry" "0.73.1" - "@react-native/codegen" "0.73.3" - "@react-native/community-cli-plugin" "0.73.17" - "@react-native/gradle-plugin" "0.73.4" - "@react-native/js-polyfills" "0.73.1" - "@react-native/normalize-colors" "0.73.2" - "@react-native/virtualized-lists" "0.73.4" - abort-controller "^3.0.0" - anser "^1.4.9" - ansi-regex "^5.0.0" - base64-js "^1.5.1" - chalk "^4.0.0" - deprecated-react-native-prop-types "^5.0.0" - event-target-shim "^5.0.1" - flow-enums-runtime "^0.0.6" - invariant "^2.2.4" - jest-environment-node "^29.6.3" - jsc-android "^250231.0.0" - memoize-one "^5.0.0" - metro-runtime "^0.80.3" - metro-source-map "^0.80.3" - mkdirp "^0.5.1" - nullthrows "^1.1.1" - pretty-format "^26.5.2" - promise "^8.3.0" - react-devtools-core "^4.27.7" - react-refresh "^0.14.0" - react-shallow-renderer "^16.15.0" - regenerator-runtime "^0.13.2" - scheduler "0.24.0-canary-efb381bbf-20230505" - stacktrace-parser "^0.1.10" - whatwg-fetch "^3.0.0" - ws "^6.2.2" - yargs "^17.6.2" - -react-native@0.74.2: - version "0.74.2" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.2.tgz#172e64e4e79861e2b3da99b86999e4a4c55b8321" - integrity sha512-EBMBjPPL4/GjHMP4NqsZabT3gI5WU9cSmduABGAGrd8uIcmTZ5F2Ng9k6gFmRm7n8e8CULxDNu98ZpQfBjl7Bw== +react-native@*, react-native@0.74.5: + version "0.74.5" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.74.5.tgz#80e556690fc2583d46714d5618ecd30d93c24e81" + integrity sha512-Bgg2WvxaGODukJMTZFTZBNMKVaROHLwSb8VAGEdrlvKwfb1hHg/3aXTUICYk7dwgAnb+INbGMwnF8yeAgIUmqw== dependencies: "@jest/create-cache-key-function" "^29.6.3" - "@react-native-community/cli" "13.6.8" - "@react-native-community/cli-platform-android" "13.6.8" - "@react-native-community/cli-platform-ios" "13.6.8" - "@react-native/assets-registry" "0.74.84" - "@react-native/codegen" "0.74.84" - "@react-native/community-cli-plugin" "0.74.84" - "@react-native/gradle-plugin" "0.74.84" - "@react-native/js-polyfills" "0.74.84" - "@react-native/normalize-colors" "0.74.84" - "@react-native/virtualized-lists" "0.74.84" + "@react-native-community/cli" "13.6.9" + "@react-native-community/cli-platform-android" "13.6.9" + "@react-native-community/cli-platform-ios" "13.6.9" + "@react-native/assets-registry" "0.74.87" + "@react-native/codegen" "0.74.87" + "@react-native/community-cli-plugin" "0.74.87" + "@react-native/gradle-plugin" "0.74.87" + "@react-native/js-polyfills" "0.74.87" + "@react-native/normalize-colors" "0.74.87" + "@react-native/virtualized-lists" "0.74.87" abort-controller "^3.0.0" anser "^1.4.9" ansi-regex "^5.0.0" @@ -8751,12 +8117,7 @@ react-native@0.74.2: ws "^6.2.2" yargs "^17.6.2" -react-refresh@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" - integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== - -react-refresh@^0.14.2: +react-refresh@^0.14.0, react-refresh@^0.14.2: version "0.14.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== @@ -8774,7 +8135,7 @@ react-shallow-renderer@^16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@18.2.0, react-test-renderer@^18.2.0: +react-test-renderer@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA== @@ -8783,6 +8144,15 @@ react-test-renderer@18.2.0, react-test-renderer@^18.2.0: react-shallow-renderer "^16.15.0" scheduler "^0.23.0" +react-test-renderer@^18.2.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.3.1.tgz#e693608a1f96283400d4a3afead6893f958b80b4" + integrity sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA== + dependencies: + react-is "^18.3.1" + react-shallow-renderer "^16.15.0" + scheduler "^0.23.2" + react@18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" @@ -9006,13 +8376,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -9020,13 +8383,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rimraf@~2.4.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" - integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== - dependencies: - glob "^6.0.1" - rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -9066,11 +8422,6 @@ safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-json-stringify@~1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" - integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== - safe-regex-test@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" @@ -9086,9 +8437,9 @@ safe-regex-test@^1.0.3: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@>=0.6.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.3.0.tgz#a5dbe77db3be05c9d1ee7785dbd3ea9de51593d0" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== saxes@^6.0.0: version "6.0.0" @@ -9104,10 +8455,10 @@ scheduler@0.24.0-canary-efb381bbf-20230505: dependencies: loose-envify "^1.1.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.0, scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -9129,17 +8480,10 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.18.0, send@^0.18.0: version "0.18.0" @@ -9462,7 +8806,16 @@ string-length@^5.0.1: char-regex "^2.0.0" strip-ansi "^7.0.1" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9480,7 +8833,7 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.10: +string.prototype.matchall@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" integrity sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg== @@ -9498,6 +8851,14 @@ string.prototype.matchall@^4.0.10: set-function-name "^2.0.2" side-channel "^1.0.6" +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trim@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" @@ -9540,7 +8901,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9554,6 +8915,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -9741,9 +9109,9 @@ terminal-link@^2.1.1: supports-hyperlinks "^2.0.0" terser@^5.15.0: - version "5.30.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.3.tgz#f1bb68ded42408c316b548e3ec2526d7dd03f4d2" - integrity sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA== + version "5.31.5" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.5.tgz#e48b7c65f32d2808e7dad803e4586a0bc3829b87" + integrity sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -9831,9 +9199,9 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -9872,9 +9240,9 @@ tslib@^1.8.1: integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tsutils@^3.21.0: version "3.21.0" @@ -9982,14 +9350,14 @@ typescript@~5.3.3: integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== ua-parser-js@^0.7.33: - version "0.7.37" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.37.tgz#e464e66dac2d33a7a1251d7d7a99d6157ec27832" - integrity sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA== + version "0.7.38" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.38.tgz#f497d8a4dc1fec6e854e5caa4b2f9913422ef054" + integrity sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA== ua-parser-js@^1.0.35: - version "1.0.37" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" - integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== + version "1.0.38" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.38.tgz#66bb0c4c0e322fe48edfe6d446df6042e62f25e2" + integrity sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -10006,6 +9374,11 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.13.0.tgz#e3e79220ab8c81ed1496b5812471afd7cf075ea5" + integrity sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -10087,15 +9460,15 @@ unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.1.2" + picocolors "^1.0.1" -uri-js@^4.2.2, uri-js@^4.4.1: +uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -10115,15 +9488,10 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -use-latest-callback@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a" - integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw== - -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== +use-latest-callback@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.2.1.tgz#4d4e6a9e4817b13142834850dcfa8d24ca4569cf" + integrity sha512-QWlq8Is8BGWBf883QOEQP5HWYX/kMI+JTbJ5rdtvJLmXTIh9XoHIO3PQcmQl8BU44VKxow1kbQUHa6mQSMALDQ== util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" @@ -10146,9 +9514,9 @@ uuid@^8.0.0, uuid@^8.3.2: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" @@ -10276,12 +9644,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -10290,10 +9658,10 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-collection "^1.0.2" + which-typed-array "^1.1.15" -which-collection@^1.0.1: +which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -10308,7 +9676,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -10343,7 +9711,12 @@ wonka@^6.3.2: resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -10361,6 +9734,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -10393,21 +9775,21 @@ write-file-atomic@^4.0.2: signal-exit "^3.0.7" ws@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" - integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + version "6.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" + integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== dependencies: async-limiter "~1.0.0" -ws@^7, ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== +ws@^7, ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== ws@^8.11.0, ws@^8.12.1: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== xcode@^3.0.1: version "3.0.1" @@ -10476,9 +9858,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.2.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" - integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== + version "2.5.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.0.tgz#c6165a721cf8000e91c36490a41d7be25176cf5d" + integrity sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw== yargs-parser@^18.1.2: version "18.1.3" @@ -10529,13 +9911,11 @@ yocto-queue@^0.1.0: integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110" + integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== -zustand@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.2.tgz#fddbe7cac1e71d45413b3682cdb47b48034c3848" - integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g== - dependencies: - use-sync-external-store "1.2.0" +zustand@^5.0.0-rc.2: + version "5.0.0-rc.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-5.0.0-rc.2.tgz#d28d95ffb6f0b20cadbaea39210f18446a5bf989" + integrity sha512-o2Nwuvnk8vQBX7CcHL8WfFkZNJdxB/VKeWw0tNglw8p4cypsZ3tRT7rTRTDNeUPFS0qaMBRSKe+fVwL5xpcE3A==