diff --git a/.node-version b/.node-version index b6a7d89..3c03207 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -16 +18 diff --git a/android/app/build.gradle b/android/app/build.gradle index 7480750..312e411 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -95,8 +95,8 @@ android { applicationId "com.razinj.context_launcher" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 12 - versionName "1.4.8" + versionCode 13 + versionName "1.5.0" archivesBaseName = "context-launcher-v$versionName-$versionCode" } @@ -176,7 +176,7 @@ dependencies { apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) project.ext.vectoricons = [ - iconFontNames: ['MaterialIcons.ttf', 'MaterialCommunityIcons.ttf'] + iconFontNames: ['MaterialCommunityIcons.ttf'] ] apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" diff --git a/build.sh b/build.sh index 2d579f0..6a62b9b 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -cd ./android +cd ./android || exit echo "[!] Current directory $(pwd)" diff --git a/jest.config.js b/jest.config.js index e1acb63..6c774fa 100644 --- a/jest.config.js +++ b/jest.config.js @@ -17,9 +17,7 @@ module.exports = { testPathIgnorePatterns: ['\\.snap$', '/node_modules/'], transformIgnorePatterns: ['node_modules/(?!(@react-native|react-native|react-native-vector-icons))'], cacheDirectory: '.jest/cache', - setupFiles: [ - './jest-setup.js', - ], + setupFiles: ['./jest-setup.js'], setupFilesAfterEnv: [ './jest-tests-setup.ts', './node_modules/react-native-gesture-handler/jestSetup.js', // src: https://docs.swmansion.com/react-native-gesture-handler/docs/guides/testing diff --git a/package-lock.json b/package-lock.json index 5bbcbf8..bfdec5b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "context_launcher", - "version": "1.4.8", + "version": "1.5.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "context_launcher", - "version": "1.4.8", + "version": "1.5.0", "dependencies": { "@gorhom/bottom-sheet": "^4.4.5", "@react-native-async-storage/async-storage": "^1.17.11", + "@react-native-community/datetimepicker": "^6.7.5", "@reduxjs/toolkit": "^1.9.1", "react": "18.2.0", - "react-native": "0.71.1", + "react-native": "0.71.4", "react-native-draggable-flatlist": "^4.0.0", "react-native-gesture-handler": "^2.9.0", "react-native-reanimated": "^2.14.4", @@ -41,7 +42,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-react-native": "^4.0.0", "jest": "^29.2.1", - "metro-react-native-babel-preset": "0.74.1", + "metro-react-native-babel-preset": "0.73.8", "prettier": "^2.4.1", "ts-jest": "^29.0.5", "typescript": "4.9.4" @@ -71,28 +72,28 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.0", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -108,12 +109,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dependencies": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -175,14 +177,14 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", - "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -196,12 +198,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", + "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -246,12 +248,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -269,11 +271,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -291,9 +293,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -301,8 +303,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" }, "engines": { "node": ">=6.9.0" @@ -410,9 +412,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } @@ -432,13 +434,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dependencies": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -458,9 +460,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", - "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -531,11 +533,11 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -685,9 +687,9 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -716,12 +718,12 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1049,9 +1051,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz", - "integrity": "sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1063,14 +1065,14 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-replace-supers": "^7.20.7", @@ -1158,11 +1160,11 @@ } }, "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", + "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-flow": "^7.18.6" }, "engines": { @@ -1173,11 +1175,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1246,11 +1248,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-module-transforms": "^7.21.2", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-simple-access": "^7.20.2" }, @@ -1394,15 +1396,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", - "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1412,11 +1414,11 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", + "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1469,12 +1471,12 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", + "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -1559,11 +1561,11 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.12", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-typescript": "^7.20.0" }, @@ -1723,13 +1725,13 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", + "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1739,9 +1741,9 @@ } }, "node_modules/@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", + "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -1785,10 +1787,15 @@ "source-map": "^0.6.0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -1810,18 +1817,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1830,9 +1837,9 @@ } }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -1859,6 +1866,30 @@ "node": ">=0.8.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -2001,16 +2032,16 @@ } }, "node_modules/@jest/console": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.1.tgz", - "integrity": "sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0" }, "engines": { @@ -2088,37 +2119,37 @@ } }, "node_modules/@jest/core": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.1.tgz", - "integrity": "sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", "dev": true, "dependencies": { - "@jest/console": "^29.4.1", - "@jest/reporters": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.0", - "jest-config": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-resolve-dependencies": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "jest-watcher": "^29.4.1", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -2205,47 +2236,47 @@ } }, "node_modules/@jest/create-cache-key-function": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.4.1.tgz", - "integrity": "sha512-ioKzAGdBQZ2BK44ZP7Gs1Mxvx3yuo3yFnvjCp4qk9Vn1Zmcu20fweX+GyU1e5CuVoHx1rsKrapyDCVk6yoRwUQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.5.0.tgz", + "integrity": "sha512-LIDZyZgnZss7uikvBKBB/USWwG+GO8+GnwRWT+YkCGDGsqLQlhm9BC3z6+7+eMs1kUlvXQIWEzBR8Q2Pnvx6lg==", "dependencies": { - "@jest/types": "^29.4.1" + "@jest/types": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", "dependencies": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", "dev": true, "dependencies": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3" @@ -2255,47 +2286,47 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.1.tgz", - "integrity": "sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -2308,9 +2339,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -2410,9 +2441,9 @@ } }, "node_modules/@jest/source-map": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz", - "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.15", @@ -2424,13 +2455,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.1.tgz", - "integrity": "sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", "dev": true, "dependencies": { - "@jest/console": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -2439,14 +2470,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.1.tgz", - "integrity": "sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", "dev": true, "dependencies": { - "@jest/test-result": "^29.4.1", + "@jest/test-result": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", + "jest-haste-map": "^29.5.0", "slash": "^3.0.0" }, "engines": { @@ -2454,22 +2485,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -2556,9 +2587,9 @@ } }, "node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "dependencies": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -2746,16 +2777,16 @@ } }, "node_modules/@react-native-community/cli": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.1.3.tgz", - "integrity": "sha512-kzh6bYLGN1q1q0IiczKSP1LTrovFeVzppYRTKohPI9VdyZwp7b5JOgaQMB/Ijtwm3MxBDrZgV9AveH/eUmUcKQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.2.0.tgz", + "integrity": "sha512-QH7AFBz5FX2zTZRH/o3XehHrZ0aZZEL5Sh+23nSEFgSj3bLFfvjjZhuoiRSAo7iiBdvAoXrfxQ8TXgg4Xf/7fw==", "dependencies": { "@react-native-community/cli-clean": "^10.1.1", "@react-native-community/cli-config": "^10.1.1", "@react-native-community/cli-debugger-ui": "^10.0.0", - "@react-native-community/cli-doctor": "^10.1.1", - "@react-native-community/cli-hermes": "^10.1.3", - "@react-native-community/cli-plugin-metro": "^10.1.1", + "@react-native-community/cli-doctor": "^10.2.0", + "@react-native-community/cli-hermes": "^10.2.0", + "@react-native-community/cli-plugin-metro": "^10.2.0", "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "@react-native-community/cli-types": "^10.0.0", @@ -3052,12 +3083,12 @@ } }, "node_modules/@react-native-community/cli-doctor": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.1.1.tgz", - "integrity": "sha512-9uvUhr6aJu4C7pCTsD9iRS/38tx1mzIrWuEQoh2JffTXg9MOq4jesvobkyKFRD90nOvqunEvfpnWnRdWcZO0Wg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.2.0.tgz", + "integrity": "sha512-yLxJazUmNSPslHxeeev0gLvsK0nQan8BmGWbtqPz2WwbIbD89vbytC7G96OxiQXr46iWEWAwEJiTTdgA7jlA5Q==", "dependencies": { "@react-native-community/cli-config": "^10.1.1", - "@react-native-community/cli-platform-ios": "^10.1.1", + "@react-native-community/cli-platform-ios": "^10.2.0", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "command-exists": "^1.2.8", @@ -3266,11 +3297,11 @@ } }, "node_modules/@react-native-community/cli-hermes": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.1.3.tgz", - "integrity": "sha512-uYl8MLBtuu6bj0tDUzVGf30nK5i9haBv7F0u+NCOq31+zVjcwiUplrCuLorb2dMLMF+Fno9wDxi66W9MxoW4nA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.2.0.tgz", + "integrity": "sha512-urfmvNeR8IiO/Sd92UU3xPO+/qI2lwCWQnxOkWaU/i2EITFekE47MD6MZrfVulRVYRi5cuaFqKZO/ccOdOB/vQ==", "dependencies": { - "@react-native-community/cli-platform-android": "^10.1.3", + "@react-native-community/cli-platform-android": "^10.2.0", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", @@ -3342,9 +3373,9 @@ } }, "node_modules/@react-native-community/cli-platform-android": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.1.3.tgz", - "integrity": "sha512-8YZEpBL6yd9l4CIoFcLOgrV8x2GDujdqrdWrNsNERDAbsiFwqAQvfjyyb57GAZVuEPEJCoqUlGlMCwOh3XQb9A==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.2.0.tgz", + "integrity": "sha512-CBenYwGxwFdObZTn1lgxWtMGA5ms2G/ALQhkS+XTAD7KHDrCxFF9yT/fnAjFZKM6vX/1TqGI1RflruXih3kAhw==", "dependencies": { "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", @@ -3526,13 +3557,14 @@ } }, "node_modules/@react-native-community/cli-platform-ios": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.1.1.tgz", - "integrity": "sha512-EB9/L8j1LqrqyfJtLRixU+d8FIP6Pr83rEgUgXgya/u8wk3h/bvX70w+Ff2skwjdPLr5dLUQ/n5KFX4r3bsNmA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.0.tgz", + "integrity": "sha512-hIPK3iL/mL+0ChXmQ9uqqzNOKA48H+TAzg+hrxQLll/6dNMxDeK9/wZpktcsh8w+CyhqzKqVernGcQs7tPeKGw==", "dependencies": { "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "execa": "^1.0.0", + "fast-xml-parser": "^4.0.12", "glob": "^7.1.3", "ora": "^5.4.1" } @@ -3710,20 +3742,20 @@ } }, "node_modules/@react-native-community/cli-plugin-metro": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.1.1.tgz", - "integrity": "sha512-wEp47le4mzlelDF5sfkaaujUDYcuLep5HZqlcMx7PkL7BA3/fSHdDo1SblqaLgZ1ca6vFU+kfbHueLDct+xwFg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.2.0.tgz", + "integrity": "sha512-9eiJrKYuauEDkQLCrjJUh7tS9T0oaMQqVUSSSuyDG6du7HQcfaR4mSf21wK75jvhKiwcQLpsFmMdctAb+0v+Cg==", "dependencies": { "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "execa": "^1.0.0", - "metro": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-react-native-babel-transformer": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", + "metro": "0.73.8", + "metro-config": "0.73.8", + "metro-core": "0.73.8", + "metro-react-native-babel-transformer": "0.73.8", + "metro-resolver": "0.73.8", + "metro-runtime": "0.73.8", "readline": "^1.3.0" } }, @@ -4344,6 +4376,14 @@ "which": "bin/which" } }, + "node_modules/@react-native-community/datetimepicker": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-6.7.5.tgz", + "integrity": "sha512-E2Zh6mwvZ6CFEMKP++rdxxjJiB45fYPpdZhJwdZ2vUVwqovqu1cQRDLZmz4XrcHSyuacgR4WUnkYFf0F2nnNIg==", + "dependencies": { + "invariant": "^2.2.4" + } + }, "node_modules/@react-native-community/eslint-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz", @@ -4575,9 +4615,9 @@ "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "node_modules/@reduxjs/toolkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", - "integrity": "sha512-HikrdY+IDgRfRYlCTGUQaiCxxDDgM1mQrRbZ6S1HFZX5ZYuJ4o8EstNmhTwHdPl2rTmLxzwSu0b3AyeyTlR+RA==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.3.tgz", + "integrity": "sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==", "dependencies": { "immer": "^9.0.16", "redux": "^4.2.0", @@ -4616,9 +4656,9 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { - "version": "0.25.21", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", - "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" }, "node_modules/@sinonjs/commons": { "version": "2.0.0", @@ -4637,9 +4677,9 @@ } }, "node_modules/@testing-library/jest-native": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/jest-native/-/jest-native-5.4.1.tgz", - "integrity": "sha512-VOyJp8LdBpwoG33xjeCcF59Fh9FDUJUjEFdFPbc/3TtVRze+5bSjFMeADEDZ9R2/AM/Qii0q1cPv7Tjk8JkSSw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@testing-library/jest-native/-/jest-native-5.4.2.tgz", + "integrity": "sha512-Vo/CE1uvCVH1H8YPoOEXLXVsm+BjzSQTq35+wkri1fr0O5D+A2WZ+m3ni5g6f1OCzNKNGIAHmisBEWkDs1P1mw==", "dev": true, "dependencies": { "chalk": "^4.1.2", @@ -4725,12 +4765,12 @@ } }, "node_modules/@testing-library/react-native": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-11.5.1.tgz", - "integrity": "sha512-+yIXBQxbAL7ca2J/rKGGonCLMvj11pGoiw4Pp66dlYsKPauYrxesIs3W0UHMNLafSYshnMsrbYx3YOtOFgumiw==", + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-11.5.4.tgz", + "integrity": "sha512-6DRzMHqili5pp1JRm7fh80SAP48aR25b37gohlLoKbqGBpDw8BbZTad7Luzktm9MU5DQUm7xyzg07Z1CyveVFA==", "dev": true, "dependencies": { - "pretty-format": "^29.4.0" + "pretty-format": "^29.0.0" }, "peerDependencies": { "jest": ">=28.0.0", @@ -4842,9 +4882,9 @@ } }, "node_modules/@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.1.tgz", + "integrity": "sha512-zDQSWXG+ZkEvs2zFFMszePhx4euKz+Yt3Gg1P+RHjfJBinTTr6L2DEyovO4V/WrKXuF0Dgn56GWGZPDa6TW9eQ==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -4858,9 +4898,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + "version": "18.15.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.2.tgz", + "integrity": "sha512-sDPHm2wfx2QhrMDK0pOt2J4KLJMAcerqWNvnED0itPRJWvI+bK+uNHzcH1dFsBlf7G3u8tqXmRF3wkvL9yUwMw==" }, "node_modules/@types/prettier": { "version": "2.7.2", @@ -4903,9 +4943,9 @@ } }, "node_modules/@types/react-native-vector-icons/node_modules/@types/react-native": { - "version": "0.70.9", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.9.tgz", - "integrity": "sha512-0C6sIo13ztzM2llaWdTq0Vpscx3VdU0T8F45kEurWv3l5n+BHm/Mkr8Z+N29eXDYGhTvCz5y2jegB8JyiVa5kw==", + "version": "0.70.11", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.11.tgz", + "integrity": "sha512-FobPtzoNPNHugBKMfzs4Li0Q9ei4tgU8SI1M5Ayg7+t5/+noCm2sknI8uwij22wMkcHcefv8RFx4q28nNVJtCQ==", "dev": true, "dependencies": { "@types/react": "*" @@ -4933,9 +4973,9 @@ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "node_modules/@types/yargs": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.20.tgz", - "integrity": "sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dependencies": { "@types/yargs-parser": "*" } @@ -4946,18 +4986,19 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", - "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.55.0.tgz", + "integrity": "sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/type-utils": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.55.0", + "@typescript-eslint/type-utils": "5.55.0", + "@typescript-eslint/utils": "5.55.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -5091,21 +5132,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -5149,14 +5175,14 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", - "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.55.0.tgz", + "integrity": "sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.55.0", + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/typescript-estree": "5.55.0", "debug": "^4.3.4" }, "engines": { @@ -5176,13 +5202,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", - "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz", + "integrity": "sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0" + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/visitor-keys": "5.55.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5193,13 +5219,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", - "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.55.0.tgz", + "integrity": "sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/typescript-estree": "5.55.0", + "@typescript-eslint/utils": "5.55.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -5220,9 +5246,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", - "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", + "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5233,13 +5259,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", - "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", + "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0", + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/visitor-keys": "5.55.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5293,18 +5319,18 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", - "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.55.0.tgz", + "integrity": "sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw==", "dev": true, "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.55.0", + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/typescript-estree": "5.55.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -5352,12 +5378,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", - "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", + "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/types": "5.55.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -5559,6 +5585,19 @@ "node": ">=0.10.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", @@ -5730,15 +5769,15 @@ } }, "node_modules/babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", "dev": true, "dependencies": { - "@jest/transform": "^29.4.3", + "@jest/transform": "^29.5.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", + "babel-preset-jest": "^29.5.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -5837,9 +5876,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -5959,12 +5998,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^29.4.3", + "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -6057,9 +6096,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -6071,10 +6110,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -6219,9 +6258,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001449", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz", - "integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==", + "version": "1.0.30001465", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001465.tgz", + "integrity": "sha512-HvjgL3MYAJjceTDCcjRnQGjwUz/5qec9n7JPOzUursUoOTIsYCSDOb1l7RsnZE8mjbxG78zVRCKfrBXyvChBag==", "funding": [ { "type": "opencollective", @@ -6256,9 +6295,9 @@ } }, "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", "funding": [ { "type": "github", @@ -6577,11 +6616,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", - "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.1.tgz", + "integrity": "sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==", "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", @@ -6708,9 +6747,9 @@ "dev": true }, "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true, "engines": { "node": ">=0.10.0" @@ -6728,9 +6767,9 @@ } }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { "has-property-descriptors": "^1.0.0", @@ -6835,9 +6874,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", + "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==" }, "node_modules/emittery": { "version": "0.13.1", @@ -6924,18 +6963,18 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -6943,8 +6982,8 @@ "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", @@ -6952,11 +6991,12 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", "typed-array-length": "^1.0.4", @@ -7089,9 +7129,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", + "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -7163,9 +7203,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz", - "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -7274,30 +7314,27 @@ } }, "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { - "node": ">=10" + "node": ">=4" } }, "node_modules/eslint-visitor-keys": { @@ -7379,30 +7416,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", @@ -7538,9 +7551,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -7752,16 +7765,16 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.4.3", + "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -7867,6 +7880,21 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-xml-parser": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.3.tgz", + "integrity": "sha512-LsNDahCiCcJPe8NO7HijcnukHB24tKbfDDA5IILx9dmW3Frb52lhbeX6MPNUSvyGNfav2VTYpJ/OqkRoVLrh2Q==", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -8356,6 +8384,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -8700,12 +8734,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -8738,13 +8772,13 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" }, "funding": { @@ -9204,15 +9238,15 @@ } }, "node_modules/jest": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz", - "integrity": "sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "dev": true, "dependencies": { - "@jest/core": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", "import-local": "^3.0.2", - "jest-cli": "^29.4.1" + "jest-cli": "^29.5.0" }, "bin": { "jest": "bin/jest.js" @@ -9230,9 +9264,9 @@ } }, "node_modules/jest-changed-files": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.0.tgz", - "integrity": "sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, "dependencies": { "execa": "^5.0.0", @@ -9243,28 +9277,29 @@ } }, "node_modules/jest-circus": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.1.tgz", - "integrity": "sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", "dev": true, "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "p-limit": "^3.1.0", - "pretty-format": "^29.4.1", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -9343,21 +9378,21 @@ } }, "node_modules/jest-cli": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.1.tgz", - "integrity": "sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", "dev": true, "dependencies": { - "@jest/core": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -9447,31 +9482,31 @@ } }, "node_modules/jest-config": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.1.tgz", - "integrity": "sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.1", - "@jest/types": "^29.4.1", - "babel-jest": "^29.4.1", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.1", - "jest-environment-node": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.4.1", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -9562,15 +9597,15 @@ } }, "node_modules/jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9647,9 +9682,9 @@ } }, "node_modules/jest-docblock": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", - "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -9659,16 +9694,16 @@ } }, "node_modules/jest-each": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.1.tgz", - "integrity": "sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", "dev": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "jest-util": "^29.4.1", - "pretty-format": "^29.4.1" + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9745,16 +9780,16 @@ } }, "node_modules/jest-environment-node": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.1.tgz", - "integrity": "sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9770,20 +9805,20 @@ } }, "node_modules/jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", "dev": true, "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -9795,28 +9830,28 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.1.tgz", - "integrity": "sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", "dev": true, "dependencies": { - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -9893,17 +9928,17 @@ } }, "node_modules/jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -9976,13 +10011,13 @@ } }, "node_modules/jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10015,17 +10050,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.1.tgz", - "integrity": "sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", + "jest-haste-map": "^29.5.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -10035,13 +10070,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.1.tgz", - "integrity": "sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", "dev": true, "dependencies": { - "jest-regex-util": "^29.2.0", - "jest-snapshot": "^29.4.1" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10118,30 +10153,30 @@ } }, "node_modules/jest-runner": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.1.tgz", - "integrity": "sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", "dev": true, "dependencies": { - "@jest/console": "^29.4.1", - "@jest/environment": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.2.0", - "jest-environment-node": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-leak-detector": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-resolve": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-util": "^29.4.1", - "jest-watcher": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -10220,32 +10255,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.1.tgz", - "integrity": "sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/globals": "^29.4.1", - "@jest/source-map": "^29.2.0", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "semver": "^7.3.5", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -10311,33 +10345,6 @@ "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-runtime/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10350,12 +10357,6 @@ "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/jest-serializer": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", @@ -10369,9 +10370,9 @@ } }, "node_modules/jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -10380,23 +10381,22 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.4.3", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "engines": { @@ -10507,11 +10507,11 @@ "dev": true }, "node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", "dependencies": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -10587,17 +10587,17 @@ } }, "node_modules/jest-validate": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.1.tgz", - "integrity": "sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", "dev": true, "dependencies": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", + "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.4.1" + "pretty-format": "^29.5.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10686,18 +10686,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.1.tgz", - "integrity": "sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", "dev": true, "dependencies": { - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.4.1", + "jest-util": "^29.5.0", "string-length": "^4.0.1" }, "engines": { @@ -10775,13 +10775,13 @@ } }, "node_modules/jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -10814,14 +10814,14 @@ } }, "node_modules/joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "version": "17.8.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", + "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, @@ -10843,9 +10843,9 @@ } }, "node_modules/jsc-android": { - "version": "250230.2.1", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", - "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==" + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" }, "node_modules/jscodeshift": { "version": "0.13.1", @@ -11535,9 +11535,9 @@ } }, "node_modules/metro": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.7.tgz", - "integrity": "sha512-pkRqFhuGUvkiu8HxKPUQelbCuyy6te6okMssTyLzQwsKilNLK4YMI2uD6PHnypg5SiMJ58lwfqkp/t5w72jEvw==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.8.tgz", + "integrity": "sha512-2EMJME9w5x7Uzn+DnQ4hzWr33u/aASaOBGdpf4lxbrlk6/vl4UBfX1sru6KU535qc/0Z1BMt4Vq9qsP3ZGFmWg==", "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -11561,23 +11561,23 @@ "invariant": "^2.2.4", "jest-worker": "^27.2.0", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-file-map": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-inspector-proxy": "0.73.7", - "metro-minify-terser": "0.73.7", - "metro-minify-uglify": "0.73.7", - "metro-react-native-babel-preset": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", - "metro-source-map": "0.73.7", - "metro-symbolicate": "0.73.7", - "metro-transform-plugins": "0.73.7", - "metro-transform-worker": "0.73.7", + "metro-babel-transformer": "0.73.8", + "metro-cache": "0.73.8", + "metro-cache-key": "0.73.8", + "metro-config": "0.73.8", + "metro-core": "0.73.8", + "metro-file-map": "0.73.8", + "metro-hermes-compiler": "0.73.8", + "metro-inspector-proxy": "0.73.8", + "metro-minify-terser": "0.73.8", + "metro-minify-uglify": "0.73.8", + "metro-react-native-babel-preset": "0.73.8", + "metro-resolver": "0.73.8", + "metro-runtime": "0.73.8", + "metro-source-map": "0.73.8", + "metro-symbolicate": "0.73.8", + "metro-transform-plugins": "0.73.8", + "metro-transform-worker": "0.73.8", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -11595,41 +11595,41 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.7.tgz", - "integrity": "sha512-s7UVkwovGTEXYEQrv5hcmSBbFJ9s9lhCRNMScn4Itgj3UMdqRr9lU8DXKEFlJ7osgRxN6n5+eXqcvhE4B1H1VQ==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.8.tgz", + "integrity": "sha512-GO6H/W2RjZ0/gm1pIvdO9EP34s3XN6kzoeyxqmfqKfYhJmYZf1SzXbyiIHyMbJNwJVrsKuHqu32+GopTlKscWw==", "dependencies": { "@babel/core": "^7.20.0", "hermes-parser": "0.8.0", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.8", "nullthrows": "^1.1.1" } }, "node_modules/metro-cache": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.7.tgz", - "integrity": "sha512-CPPgI+i9yVzOEDCdmEEZ67JgOvZyNDs8kStmGUFgDuLSjj3//HhkqT5XyfWjGeH6KmyGiS8ip3cgLOVn3IsOSA==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.8.tgz", + "integrity": "sha512-/uFbTIw813Rvb8kSAIHvax9gWl41dtgjY2SpJLNIBLdQ6oFZ3CVo3ahZIiEZOrCeHl9xfGn5tmvNb8CEFa/Q5w==", "dependencies": { - "metro-core": "0.73.7", + "metro-core": "0.73.8", "rimraf": "^3.0.2" } }, "node_modules/metro-cache-key": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.7.tgz", - "integrity": "sha512-GngYzrHwZU9U0Xl81H4aq9Tn5cjQyU12v9/flB0hzpeiYO5A89TIeilb4Kg8jtfC6JcmmsdK9nxYIGEq7odHhQ==" + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.8.tgz", + "integrity": "sha512-VzFGu4kJGIkLjyDgVoM2ZxIHlMdCZWMqVIux9N+EeyMVMvGXTiXW8eGROgxzDhVjyR58IjfMsYpRCKz5dR+2ew==" }, "node_modules/metro-config": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.7.tgz", - "integrity": "sha512-pD/F+vK3u37cbj1skYmI6cUsEEscqNRtW2KlDKu1m+n8nooDB2oGTOZatlS5WQa7Ga6jYQRydftlq4CLDexAfA==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.8.tgz", + "integrity": "sha512-sAYq+llL6ZAfro64U99ske8HcKKswxX4wIZbll9niBKG7TkWm7tfMY1jO687XEmE4683rHncZeBRav9pLngIzg==", "dependencies": { "cosmiconfig": "^5.0.5", "jest-validate": "^26.5.2", - "metro": "0.73.7", - "metro-cache": "0.73.7", - "metro-core": "0.73.7", - "metro-runtime": "0.73.7" + "metro": "0.73.8", + "metro-cache": "0.73.8", + "metro-core": "0.73.8", + "metro-runtime": "0.73.8" } }, "node_modules/metro-config/node_modules/@jest/types": { @@ -11774,18 +11774,18 @@ } }, "node_modules/metro-core": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.7.tgz", - "integrity": "sha512-H7j1Egj1VnNnsSYf9ZKv0SRwijgtRKIcaGNQq/T+er73vqqb4kR9H+2VIJYPXi6R8lT+QLIMfs6CWSUHAJUgtg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.8.tgz", + "integrity": "sha512-Aew4dthbZf8bRRjlYGL3cnai3+LKYTf6mc7YS2xLQRWtgGZ1b/H8nQtBvXZpfRYFcS84UeEQ10vwIf5eR3qPdQ==", "dependencies": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.73.7" + "metro-resolver": "0.73.8" } }, "node_modules/metro-file-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.7.tgz", - "integrity": "sha512-BYaCo2e/4FMN4nOajeN+Za5cPfecfikzUYuFWWMyLAmHU6dj7B+PFkaJ4OEJO3vmRoeq5vMOmhpKXgysYbNXJg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.8.tgz", + "integrity": "sha512-CM552hUO9om02jJdLszOCIDADKNaaeVz8CjYXItndvgr5jmFlQYAR+UMvaDzeT8oYdAV1DXAljma2CS2UBymPg==", "dependencies": { "abort-controller": "^3.0.0", "anymatch": "^3.0.3", @@ -11957,14 +11957,14 @@ } }, "node_modules/metro-hermes-compiler": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.7.tgz", - "integrity": "sha512-F8PlJ8mWEEumGNH3eMRA3gjgP70ZvH4Ex5F1KY6ofD/gpn7w5HJHSPTeVw8gtUb1pYLN4nevptpyXGg04Jfcog==" + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.8.tgz", + "integrity": "sha512-2d7t+TEoQLk+jyXgBykmAtPPJK2B46DB3qUYIMKDFDDaKzCljrojyVuGgQq6SM1f95fe6HDAQ3K9ihTjeB90yw==" }, "node_modules/metro-inspector-proxy": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.7.tgz", - "integrity": "sha512-TsAtQeKr9X7NaQHlpshu+ZkGWlPi5fFKNqieLkfqvT1oXN4PQF/4q38INyiZtWLPvoUzTR6PRnm4pcUbJ7+Nzg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.8.tgz", + "integrity": "sha512-F0QxwDTox0TDeXVRN7ZmI7BknBjPDVKQ1ZeKznFBiMa0SXiD1kzoksfpDbZ6hTEKrhVM9Ep0YQmC7avwZouOnA==", "dependencies": { "connect": "^3.6.5", "debug": "^2.2.0", @@ -12009,33 +12009,31 @@ } }, "node_modules/metro-minify-terser": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.7.tgz", - "integrity": "sha512-gbv1fmMOZm6gJ6dQoD+QktlCi2wk6nlTR8j8lQCjeeXGbs6O9e5XLWNPOexHqo7S69bdbohEnfZnLJFcxgHeNw==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.8.tgz", + "integrity": "sha512-pnagyXAoMPhihWrHRIWqCxrP6EJ8Hfugv5RXBb6HbOANmwajn2uQuzeu18+dXaN1yPoDCMCgpg/UA4ibFN5jtQ==", "dependencies": { "terser": "^5.15.0" } }, "node_modules/metro-minify-uglify": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.7.tgz", - "integrity": "sha512-DmDCzfdbaPExQuQ7NQozCNOSOAgp5Ux9kWzmKAT8seQ38/3NtUepW+PTgxXIHmwNjJV4oHsHwlBlTwJmYihKXg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.8.tgz", + "integrity": "sha512-9wZqKfraVfmtMXdOzRyan+6r1woQXqqa4KeXfVh7+Mxl+5+J0Lmw6EvTrWawsaOEpvpn32q9MfoHC1d8plDJwA==", "dependencies": { "uglify-es": "^3.1.9" } }, "node_modules/metro-react-native-babel-preset": { - "version": "0.74.1", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.74.1.tgz", - "integrity": "sha512-DjsG9nqm5C7cjB2SlgbcNJOn9y5MBUd3bRlCfnoj8CxAeGTGkS+yXd183lHR3C1bhmQNjuUE0abzzpE1CFh6JQ==", - "dev": true, + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.8.tgz", + "integrity": "sha512-spNrcQJTbQntEIqJnCA6yL4S+dzV9fXCk7U+Rm7yJasZ4o4Frn7jP23isu7FlZIp1Azx1+6SbP7SgQM+IP5JgQ==", "dependencies": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", "@babel/plugin-proposal-optional-chaining": "^7.0.0", @@ -12064,6 +12062,7 @@ "@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-template-literals": "^7.0.0", "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", @@ -12074,98 +12073,50 @@ } }, "node_modules/metro-react-native-babel-transformer": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz", - "integrity": "sha512-73HW8betjX+VPm3iqsMBe8F/F2Tt+hONO6YJwcF7FonTqQYW1oTz0dOp0dClZGfHUXxpJBz6Vuo7J6TpdzDD+w==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.8.tgz", + "integrity": "sha512-oH/LCCJPauteAE28c0KJAiSrkV+1VJbU0PwA9UwaWnle+qevs/clpKQ8LrIr33YbBj4CiI1kFoVRuNRt5h4NFg==", "dependencies": { "@babel/core": "^7.20.0", "babel-preset-fbjs": "^3.4.0", "hermes-parser": "0.8.0", - "metro-babel-transformer": "0.73.7", - "metro-react-native-babel-preset": "0.73.7", - "metro-source-map": "0.73.7", + "metro-babel-transformer": "0.73.8", + "metro-react-native-babel-preset": "0.73.8", + "metro-source-map": "0.73.8", "nullthrows": "^1.1.1" }, "peerDependencies": { "@babel/core": "*" } }, - "node_modules/metro-react-native-babel-transformer/node_modules/metro-react-native-babel-preset": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz", - "integrity": "sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.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.0.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.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.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-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-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, "node_modules/metro-resolver": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.7.tgz", - "integrity": "sha512-mGW3XPeKBCwZnkHcKo1dhFa9olcx7SyNzG1vb5kjzJYe4Qs3yx04r/qFXIJLcIgLItB69TIGvosznUhpeOOXzg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.8.tgz", + "integrity": "sha512-GiBWont7/OgAftkkj2TiEp+Gf1PYZUk8xV4MbtnQjIKyy3MlGY3GbpMQ1BHih9GUQqlF0n9jsUlC2K5P0almXQ==", "dependencies": { "absolute-path": "^0.0.0" } }, "node_modules/metro-runtime": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.7.tgz", - "integrity": "sha512-2fxRGrF8FyrwwHY0TCitdUljzutfW6CWEpdvPilfrs8p0PI5X8xOWg8ficeYtw+DldHtHIAL2phT59PqzHTyVA==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.8.tgz", + "integrity": "sha512-M+Bg9M4EN5AEpJ8NkiUsawD75ifYvYfHi05w6QzHXaqOrsTeaRbbeLuOGCYxU2f/tPg17wQV97/rqUQzs9qEtA==", "dependencies": { "@babel/runtime": "^7.0.0", "react-refresh": "^0.4.0" } }, "node_modules/metro-source-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.7.tgz", - "integrity": "sha512-gbC/lfUN52TtQhEsTTA+987MaFUpQlufuCI05blLGLosDcFCsARikHsxa65Gtslm/rG2MqvFLiPA5hviONNv9g==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.8.tgz", + "integrity": "sha512-wozFXuBYMAy7b8BCYwC+qoXsvayVJBHWtSTlSLva99t+CoUSG9JO9kg1umzbOz28YYPxKmvb/wbnLMkHdas2cA==", "dependencies": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.73.7", + "metro-symbolicate": "0.73.8", "nullthrows": "^1.1.1", - "ob1": "0.73.7", + "ob1": "0.73.8", "source-map": "^0.5.6", "vlq": "^1.0.0" } @@ -12179,12 +12130,12 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.7.tgz", - "integrity": "sha512-571ThWmX5o8yGNzoXjlcdhmXqpByHU/bSZtWKhtgV2TyIAzYCYt4hawJAS5+/qDazUvjHdm8BbdqFUheM0EKNQ==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.8.tgz", + "integrity": "sha512-xkBAcceYYp0GGdCCuMzkCF1ejHsd0lYlbKBkjSRgM0Nlj80VapPaSwumYoAvSaDxcbkvS7/sCjURGp5DsSFgRQ==", "dependencies": { "invariant": "^2.2.4", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.8", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -12206,9 +12157,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.7.tgz", - "integrity": "sha512-M5isiWEau0jMudb5ezaNBZnYqXxcATMqnAYc+Cu25IahT1NHi5aWwLok9EBmBpN5641IZUZXScf+KnS7fPxPCQ==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.8.tgz", + "integrity": "sha512-IxjlnB5eA49M0WfvPEzvRikK3Rr6bECUUfcZt/rWpSphq/mttgyLYcHQ+VTZZl0zHolC3cTLwgoDod4IIJBn1A==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -12218,22 +12169,22 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.7.tgz", - "integrity": "sha512-gZYIu9JAqEI9Rxi0xGMuMW6QsHGbMSptozlTOwOd7T7yXX3WwYS/I3yLPbLhbZTjOhwMHkTt8Nhm2qBo8nh14g==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.8.tgz", + "integrity": "sha512-B8kR6lmcvyG4UFSF2QDfr/eEnWJvg0ZadooF8Dg6m/3JSm9OAqfSoC0YrWqAuvtWImNDnbeKWN7/+ns44Hv6tg==", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", "babel-preset-fbjs": "^3.4.0", - "metro": "0.73.7", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-source-map": "0.73.7", - "metro-transform-plugins": "0.73.7", + "metro": "0.73.8", + "metro-babel-transformer": "0.73.8", + "metro-cache": "0.73.8", + "metro-cache-key": "0.73.8", + "metro-hermes-compiler": "0.73.8", + "metro-source-map": "0.73.8", + "metro-transform-plugins": "0.73.8", "nullthrows": "^1.1.1" } }, @@ -12330,54 +12281,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/metro/node_modules/metro-react-native-babel-preset": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz", - "integrity": "sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw==", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.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.0.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.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.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-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-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, "node_modules/metro/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -12493,9 +12396,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12610,9 +12513,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -12634,9 +12537,9 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node_modules/node-stream-zip": { "version": "1.15.0", @@ -12676,9 +12579,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "node_modules/ob1": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.7.tgz", - "integrity": "sha512-DfelfvR843KADhSUATGGhuepVMRcf5VQX+6MQLy5AW0BKDLlO7Usj6YZeAAZP7P86QwsoTxB0RXCFiA7t6S1IQ==" + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.8.tgz", + "integrity": "sha512-1F7j+jzD+edS6ohQP7Vg5f3yiIk5i3x1uLrNIHOmLHWzWK1t3zrDpjnoXghccdVlsU+UjbyURnDynm4p0GgXeA==" }, "node_modules/object-assign": { "version": "4.1.1", @@ -13250,9 +13153,9 @@ } }, "node_modules/prettier": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", - "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -13277,9 +13180,9 @@ } }, "node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "dependencies": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -13367,6 +13270,22 @@ "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", + "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -13407,9 +13326,9 @@ } }, "node_modules/react-devtools-core": { - "version": "4.27.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.1.tgz", - "integrity": "sha512-qXhcxxDWiFmFAOq48jts9YQYe1+wVoUXzJTlY4jbaATzyio6dd6CUGu3dXBhREeVgpZ+y4kg6vFJzIOZh6vY2w==", + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.2.tgz", + "integrity": "sha512-8SzmIkpO87alD7Xr6gWIEa1jHkMjawOZ+6egjazlnjB4UUcbnzGDf/vBJ4BzGuWWEM+pzrxuzsPpcMqlQkYK2g==", "dependencies": { "shell-quote": "^1.6.1", "ws": "^7" @@ -13441,14 +13360,14 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-native": { - "version": "0.71.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.71.1.tgz", - "integrity": "sha512-bLP5+IBj2IX6tgF9WnC/UL2ZPYkVUPsU4xqZV1jntTC2TH4xyLrvfKACjGlz5nQ3Mx4BmOFqsnMxithm53+6Aw==", + "version": "0.71.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.71.4.tgz", + "integrity": "sha512-3hSYqvWrOdKhpV3HpEKp1/CkWx8Sr/N/miCrmUIAsVTSJUR7JW0VvIsrV9urDhUj/s6v2WF4n7qIEEJsmTCrPw==", "dependencies": { "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "10.1.3", - "@react-native-community/cli-platform-android": "10.1.3", - "@react-native-community/cli-platform-ios": "10.1.1", + "@react-native-community/cli": "10.2.0", + "@react-native-community/cli-platform-android": "10.2.0", + "@react-native-community/cli-platform-ios": "10.2.0", "@react-native/assets": "1.0.0", "@react-native/normalize-color": "2.1.0", "@react-native/polyfills": "2.0.0", @@ -13459,18 +13378,18 @@ "event-target-shim": "^5.0.1", "invariant": "^2.2.4", "jest-environment-node": "^29.2.1", - "jsc-android": "^250230.2.1", + "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.73.7", - "metro-runtime": "0.73.7", - "metro-source-map": "0.73.7", + "metro-react-native-babel-transformer": "0.73.8", + "metro-runtime": "0.73.8", + "metro-source-map": "0.73.8", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.3.0", "react-devtools-core": "^4.26.1", - "react-native-codegen": "^0.71.3", - "react-native-gradle-plugin": "^0.71.13", + "react-native-codegen": "^0.71.5", + "react-native-gradle-plugin": "^0.71.16", "react-refresh": "^0.4.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", @@ -13491,9 +13410,9 @@ } }, "node_modules/react-native-codegen": { - "version": "0.71.3", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.3.tgz", - "integrity": "sha512-5AvdHVU1sAaXg05i0dG664ZTaCaIFaY1znV5vNsj+wUu6MGxNEUNbDKk9dxKUkkxOyk2KZOK5uhzWL0p5H5yZQ==", + "version": "0.71.5", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.5.tgz", + "integrity": "sha512-rfsuc0zkuUuMjFnrT55I1mDZ+pBRp2zAiRwxck3m6qeGJBGK5OV5JH66eDQ4aa+3m0of316CqrJDRzVlYufzIg==", "dependencies": { "@babel/parser": "^7.14.0", "flow-parser": "^0.185.0", @@ -13502,9 +13421,9 @@ } }, "node_modules/react-native-draggable-flatlist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-native-draggable-flatlist/-/react-native-draggable-flatlist-4.0.0.tgz", - "integrity": "sha512-3DVzZsCXNlK29UyIkx4Uh5+2TAHwHC9Q45i1lbuqEOcuSmZ8jHcqbE8VkLot2bVfWZGO5WFgihStmxkI0gBHRQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-native-draggable-flatlist/-/react-native-draggable-flatlist-4.0.1.tgz", + "integrity": "sha512-ZO1QUTNx64KZfXGXeXcBfql67l38X7kBcJ3rxUVZzPHt5r035GnGzIC0F8rqSXp6zgnwgUYMfB6zQc5PKmPL9Q==", "dependencies": { "@babel/preset-typescript": "^7.17.12" }, @@ -13531,9 +13450,9 @@ } }, "node_modules/react-native-gradle-plugin": { - "version": "0.71.13", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.13.tgz", - "integrity": "sha512-C66LNZAXbU0YDRkWx8d/8kjesdu7fsUAc/3QPJNftSXKEvEtnFZK2aH/rIgu1s5dbTcE0fjhdVPNJMRIfKo61w==" + "version": "0.71.16", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.16.tgz", + "integrity": "sha512-H2BjG2zk7B7Wii9sXvd9qhCVRQYDAHSWdMw9tscmZBqSP62DkIWEQSk4/B2GhQ4aK9ydVXgtqR6tBeg3yy8TSA==" }, "node_modules/react-native-reanimated": { "version": "2.14.4", @@ -13782,9 +13701,9 @@ } }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13827,9 +13746,9 @@ } }, "node_modules/redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "dependencies": { "@babel/runtime": "^7.9.2" } @@ -13921,13 +13840,13 @@ } }, "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" @@ -13936,11 +13855,6 @@ "node": ">=4" } }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", @@ -14047,9 +13961,9 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated" }, "node_modules/resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz", + "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==", "dev": true, "engines": { "node": ">=10" @@ -14339,9 +14253,9 @@ } }, "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14848,6 +14762,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -14937,6 +14868,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", @@ -15091,9 +15027,9 @@ } }, "node_modules/terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -15167,9 +15103,9 @@ } }, "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15652,9 +15588,9 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -15872,9 +15808,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -15927,25 +15863,25 @@ } }, "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==" }, "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.0", "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -15954,12 +15890,13 @@ } }, "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "requires": { - "@babel/types": "^7.20.7", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -16005,14 +15942,14 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", - "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -16020,12 +15957,12 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", + "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" + "regexpu-core": "^5.3.1" } }, "@babel/helper-define-polyfill-provider": { @@ -16055,12 +15992,12 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { @@ -16072,11 +16009,11 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "requires": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.21.0" } }, "@babel/helper-module-imports": { @@ -16088,9 +16025,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "requires": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -16098,8 +16035,8 @@ "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-optimise-call-expression": { @@ -16174,9 +16111,9 @@ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" }, "@babel/helper-wrap-function": { "version": "7.20.5", @@ -16190,13 +16127,13 @@ } }, "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "requires": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" } }, "@babel/highlight": { @@ -16210,9 +16147,9 @@ } }, "@babel/parser": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", - "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==" + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", + "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -16253,11 +16190,11 @@ } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" } @@ -16347,9 +16284,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "requires": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -16366,12 +16303,12 @@ } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } @@ -16582,22 +16519,22 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz", - "integrity": "sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "requires": { "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-replace-supers": "^7.20.7", @@ -16649,20 +16586,20 @@ } }, "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", + "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", "requires": { - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-flow": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-function-name": { @@ -16701,11 +16638,11 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "requires": { - "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-module-transforms": "^7.21.2", "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-simple-access": "^7.20.2" } @@ -16789,23 +16726,23 @@ } }, "@babel/plugin-transform-react-jsx": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", - "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", "requires": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" + "@babel/types": "^7.21.0" } }, "@babel/plugin-transform-react-jsx-self": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", - "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", + "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-react-jsx-source": { @@ -16834,12 +16771,12 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", + "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", "requires": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -16888,11 +16825,11 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.12", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-typescript": "^7.20.0" } @@ -17019,19 +16956,19 @@ } }, "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", + "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" } }, "@babel/register": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz", - "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", + "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", "requires": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -17065,10 +17002,15 @@ } } }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "@babel/runtime": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", - "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -17084,26 +17026,26 @@ } }, "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", + "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", + "@babel/generator": "^7.21.1", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", + "@babel/parser": "^7.21.2", + "@babel/types": "^7.21.2", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", + "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -17124,6 +17066,21 @@ "@types/hammerjs": "^2.0.36" } }, + "@eslint-community/eslint-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz", + "integrity": "sha512-gB8T4H4DEfX2IV9zGDJPOBgP1e/DbfCPDTtEqUMckpvzS1OYtva8JdFYBqMwYk7xAQ429WGF/UPqn8uQ//h2vQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.4.0.tgz", + "integrity": "sha512-A9983Q0LnDGdLPjxyXQ00sbV+K+O+ko2Dr+CZigbHWtX9pNfxlaBkMR8X1CztI73zuEyEBXTVjx7CE+/VSwDiQ==", + "dev": true + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -17231,16 +17188,16 @@ "dev": true }, "@jest/console": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.1.tgz", - "integrity": "sha512-m+XpwKSi3PPM9znm5NGS8bBReeAJJpSkL1OuFCqaMaJL2YX9YXLkkI+MBchMPwu+ZuM2rynL51sgfkQteQ1CKQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", "dev": true, "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0" }, "dependencies": { @@ -17296,37 +17253,37 @@ } }, "@jest/core": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.1.tgz", - "integrity": "sha512-RXFTohpBqpaTebNdg5l3I5yadnKo9zLBajMT0I38D0tDhreVBYv3fA8kywthI00sWxPztWLD3yjiUkewwu/wKA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", "dev": true, "requires": { - "@jest/console": "^29.4.1", - "@jest/reporters": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.0", - "jest-config": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-resolve-dependencies": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", - "jest-watcher": "^29.4.1", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", "micromatch": "^4.0.4", - "pretty-format": "^29.4.1", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -17383,79 +17340,79 @@ } }, "@jest/create-cache-key-function": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.4.1.tgz", - "integrity": "sha512-ioKzAGdBQZ2BK44ZP7Gs1Mxvx3yuo3yFnvjCp4qk9Vn1Zmcu20fweX+GyU1e5CuVoHx1rsKrapyDCVk6yoRwUQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.5.0.tgz", + "integrity": "sha512-LIDZyZgnZss7uikvBKBB/USWwG+GO8+GnwRWT+YkCGDGsqLQlhm9BC3z6+7+eMs1kUlvXQIWEzBR8Q2Pnvx6lg==", "requires": { - "@jest/types": "^29.4.1" + "@jest/types": "^29.5.0" } }, "@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", "requires": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.3" + "jest-mock": "^29.5.0" } }, "@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", "dev": true, "requires": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" } }, "@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", "dev": true, "requires": { "jest-get-type": "^29.4.3" } }, "@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" } }, "@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", "dev": true, "requires": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" } }, "@jest/reporters": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.1.tgz", - "integrity": "sha512-AISY5xpt2Xpxj9R6y0RF1+O6GRy9JsGa8+vK23Lmzdy1AYcpQn5ItX79wJSsTmfzPKSAcsY1LNt/8Y5Xe5LOSg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "@types/node": "*", "chalk": "^4.0.0", @@ -17468,9 +17425,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.1", - "jest-util": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -17537,9 +17494,9 @@ } }, "@jest/source-map": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz", - "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.15", @@ -17548,46 +17505,46 @@ } }, "@jest/test-result": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.1.tgz", - "integrity": "sha512-WRt29Lwt+hEgfN8QDrXqXGgCTidq1rLyFqmZ4lmJOpVArC8daXrZWkWjiaijQvgd3aOUj2fM8INclKHsQW9YyQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", "dev": true, "requires": { - "@jest/console": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.1.tgz", - "integrity": "sha512-v5qLBNSsM0eHzWLXsQ5fiB65xi49A3ILPSFQKPXzGL4Vyux0DPZAIN7NAFJa9b4BiTDP9MBF/Zqc/QA1vuiJ0w==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", "dev": true, "requires": { - "@jest/test-result": "^29.4.1", + "@jest/test-result": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", + "jest-haste-map": "^29.5.0", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@jridgewell/trace-mapping": "^0.3.15", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", + "jest-haste-map": "^29.5.0", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -17652,9 +17609,9 @@ } }, "@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", "requires": { "@jest/schemas": "^29.4.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -17798,16 +17755,16 @@ } }, "@react-native-community/cli": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.1.3.tgz", - "integrity": "sha512-kzh6bYLGN1q1q0IiczKSP1LTrovFeVzppYRTKohPI9VdyZwp7b5JOgaQMB/Ijtwm3MxBDrZgV9AveH/eUmUcKQ==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-10.2.0.tgz", + "integrity": "sha512-QH7AFBz5FX2zTZRH/o3XehHrZ0aZZEL5Sh+23nSEFgSj3bLFfvjjZhuoiRSAo7iiBdvAoXrfxQ8TXgg4Xf/7fw==", "requires": { "@react-native-community/cli-clean": "^10.1.1", "@react-native-community/cli-config": "^10.1.1", "@react-native-community/cli-debugger-ui": "^10.0.0", - "@react-native-community/cli-doctor": "^10.1.1", - "@react-native-community/cli-hermes": "^10.1.3", - "@react-native-community/cli-plugin-metro": "^10.1.1", + "@react-native-community/cli-doctor": "^10.2.0", + "@react-native-community/cli-hermes": "^10.2.0", + "@react-native-community/cli-plugin-metro": "^10.2.0", "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "@react-native-community/cli-types": "^10.0.0", @@ -18152,12 +18109,12 @@ } }, "@react-native-community/cli-doctor": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.1.1.tgz", - "integrity": "sha512-9uvUhr6aJu4C7pCTsD9iRS/38tx1mzIrWuEQoh2JffTXg9MOq4jesvobkyKFRD90nOvqunEvfpnWnRdWcZO0Wg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-doctor/-/cli-doctor-10.2.0.tgz", + "integrity": "sha512-yLxJazUmNSPslHxeeev0gLvsK0nQan8BmGWbtqPz2WwbIbD89vbytC7G96OxiQXr46iWEWAwEJiTTdgA7jlA5Q==", "requires": { "@react-native-community/cli-config": "^10.1.1", - "@react-native-community/cli-platform-ios": "^10.1.1", + "@react-native-community/cli-platform-ios": "^10.2.0", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "command-exists": "^1.2.8", @@ -18313,11 +18270,11 @@ } }, "@react-native-community/cli-hermes": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.1.3.tgz", - "integrity": "sha512-uYl8MLBtuu6bj0tDUzVGf30nK5i9haBv7F0u+NCOq31+zVjcwiUplrCuLorb2dMLMF+Fno9wDxi66W9MxoW4nA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-10.2.0.tgz", + "integrity": "sha512-urfmvNeR8IiO/Sd92UU3xPO+/qI2lwCWQnxOkWaU/i2EITFekE47MD6MZrfVulRVYRi5cuaFqKZO/ccOdOB/vQ==", "requires": { - "@react-native-community/cli-platform-android": "^10.1.3", + "@react-native-community/cli-platform-android": "^10.2.0", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", @@ -18370,9 +18327,9 @@ } }, "@react-native-community/cli-platform-android": { - "version": "10.1.3", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.1.3.tgz", - "integrity": "sha512-8YZEpBL6yd9l4CIoFcLOgrV8x2GDujdqrdWrNsNERDAbsiFwqAQvfjyyb57GAZVuEPEJCoqUlGlMCwOh3XQb9A==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-10.2.0.tgz", + "integrity": "sha512-CBenYwGxwFdObZTn1lgxWtMGA5ms2G/ALQhkS+XTAD7KHDrCxFF9yT/fnAjFZKM6vX/1TqGI1RflruXih3kAhw==", "requires": { "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", @@ -18505,13 +18462,14 @@ } }, "@react-native-community/cli-platform-ios": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.1.1.tgz", - "integrity": "sha512-EB9/L8j1LqrqyfJtLRixU+d8FIP6Pr83rEgUgXgya/u8wk3h/bvX70w+Ff2skwjdPLr5dLUQ/n5KFX4r3bsNmA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-10.2.0.tgz", + "integrity": "sha512-hIPK3iL/mL+0ChXmQ9uqqzNOKA48H+TAzg+hrxQLll/6dNMxDeK9/wZpktcsh8w+CyhqzKqVernGcQs7tPeKGw==", "requires": { "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "execa": "^1.0.0", + "fast-xml-parser": "^4.0.12", "glob": "^7.1.3", "ora": "^5.4.1" }, @@ -18640,20 +18598,20 @@ } }, "@react-native-community/cli-plugin-metro": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.1.1.tgz", - "integrity": "sha512-wEp47le4mzlelDF5sfkaaujUDYcuLep5HZqlcMx7PkL7BA3/fSHdDo1SblqaLgZ1ca6vFU+kfbHueLDct+xwFg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-10.2.0.tgz", + "integrity": "sha512-9eiJrKYuauEDkQLCrjJUh7tS9T0oaMQqVUSSSuyDG6du7HQcfaR4mSf21wK75jvhKiwcQLpsFmMdctAb+0v+Cg==", "requires": { "@react-native-community/cli-server-api": "^10.1.1", "@react-native-community/cli-tools": "^10.1.1", "chalk": "^4.1.2", "execa": "^1.0.0", - "metro": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-react-native-babel-transformer": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", + "metro": "0.73.8", + "metro-config": "0.73.8", + "metro-core": "0.73.8", + "metro-react-native-babel-transformer": "0.73.8", + "metro-resolver": "0.73.8", + "metro-runtime": "0.73.8", "readline": "^1.3.0" }, "dependencies": { @@ -18977,6 +18935,14 @@ "joi": "^17.2.1" } }, + "@react-native-community/datetimepicker": { + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-6.7.5.tgz", + "integrity": "sha512-E2Zh6mwvZ6CFEMKP++rdxxjJiB45fYPpdZhJwdZ2vUVwqovqu1cQRDLZmz4XrcHSyuacgR4WUnkYFf0F2nnNIg==", + "requires": { + "invariant": "^2.2.4" + } + }, "@react-native-community/eslint-config": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@react-native-community/eslint-config/-/eslint-config-2.0.0.tgz", @@ -19129,9 +19095,9 @@ "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "@reduxjs/toolkit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", - "integrity": "sha512-HikrdY+IDgRfRYlCTGUQaiCxxDDgM1mQrRbZ6S1HFZX5ZYuJ4o8EstNmhTwHdPl2rTmLxzwSu0b3AyeyTlR+RA==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.3.tgz", + "integrity": "sha512-GU2TNBQVofL09VGmuSioNPQIu6Ml0YLf4EJhgj0AvBadRlCGzUWet8372LjvO4fqKZF2vH1xU0htAa7BrK9pZg==", "requires": { "immer": "^9.0.16", "redux": "^4.2.0", @@ -19158,9 +19124,9 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "@sinclair/typebox": { - "version": "0.25.21", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz", - "integrity": "sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==" + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==" }, "@sinonjs/commons": { "version": "2.0.0", @@ -19179,9 +19145,9 @@ } }, "@testing-library/jest-native": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@testing-library/jest-native/-/jest-native-5.4.1.tgz", - "integrity": "sha512-VOyJp8LdBpwoG33xjeCcF59Fh9FDUJUjEFdFPbc/3TtVRze+5bSjFMeADEDZ9R2/AM/Qii0q1cPv7Tjk8JkSSw==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@testing-library/jest-native/-/jest-native-5.4.2.tgz", + "integrity": "sha512-Vo/CE1uvCVH1H8YPoOEXLXVsm+BjzSQTq35+wkri1fr0O5D+A2WZ+m3ni5g6f1OCzNKNGIAHmisBEWkDs1P1mw==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -19243,12 +19209,12 @@ } }, "@testing-library/react-native": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-11.5.1.tgz", - "integrity": "sha512-+yIXBQxbAL7ca2J/rKGGonCLMvj11pGoiw4Pp66dlYsKPauYrxesIs3W0UHMNLafSYshnMsrbYx3YOtOFgumiw==", + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-11.5.4.tgz", + "integrity": "sha512-6DRzMHqili5pp1JRm7fh80SAP48aR25b37gohlLoKbqGBpDw8BbZTad7Luzktm9MU5DQUm7xyzg07Z1CyveVFA==", "dev": true, "requires": { - "pretty-format": "^29.4.0" + "pretty-format": "^29.0.0" } }, "@tsconfig/react-native": { @@ -19349,9 +19315,9 @@ } }, "@types/jest": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.0.tgz", - "integrity": "sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==", + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.1.tgz", + "integrity": "sha512-zDQSWXG+ZkEvs2zFFMszePhx4euKz+Yt3Gg1P+RHjfJBinTTr6L2DEyovO4V/WrKXuF0Dgn56GWGZPDa6TW9eQ==", "dev": true, "requires": { "expect": "^29.0.0", @@ -19365,9 +19331,9 @@ "dev": true }, "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + "version": "18.15.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.2.tgz", + "integrity": "sha512-sDPHm2wfx2QhrMDK0pOt2J4KLJMAcerqWNvnED0itPRJWvI+bK+uNHzcH1dFsBlf7G3u8tqXmRF3wkvL9yUwMw==" }, "@types/prettier": { "version": "2.7.2", @@ -19410,9 +19376,9 @@ }, "dependencies": { "@types/react-native": { - "version": "0.70.9", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.9.tgz", - "integrity": "sha512-0C6sIo13ztzM2llaWdTq0Vpscx3VdU0T8F45kEurWv3l5n+BHm/Mkr8Z+N29eXDYGhTvCz5y2jegB8JyiVa5kw==", + "version": "0.70.11", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.11.tgz", + "integrity": "sha512-FobPtzoNPNHugBKMfzs4Li0Q9ei4tgU8SI1M5Ayg7+t5/+noCm2sknI8uwij22wMkcHcefv8RFx4q28nNVJtCQ==", "dev": true, "requires": { "@types/react": "*" @@ -19442,9 +19408,9 @@ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "@types/yargs": { - "version": "17.0.20", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.20.tgz", - "integrity": "sha512-eknWrTHofQuPk2iuqDm1waA7V6xPlbgBoaaXEgYkClhLOnB0TtbW+srJaOToAgawPxPlHQzwypFA2bhZaUGP5A==", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "requires": { "@types/yargs-parser": "*" } @@ -19455,18 +19421,19 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@typescript-eslint/eslint-plugin": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", - "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.55.0.tgz", + "integrity": "sha512-IZGc50rtbjk+xp5YQoJvmMPmJEYoC53SiKPXyqWfv15XoD2Y5Kju6zN0DwlmaGJp1Iw33JsWJcQ7nw0lGCGjVg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/type-utils": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.55.0", + "@typescript-eslint/type-utils": "5.55.0", + "@typescript-eslint/utils": "5.55.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -19541,15 +19508,6 @@ "eslint-visitor-keys": "^1.1.0" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", @@ -19583,53 +19541,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", - "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.55.0.tgz", + "integrity": "sha512-ppvmeF7hvdhUUZWSd2EEWfzcFkjJzgNQzVST22nzg958CR+sphy8A6K7LXQZd6V75m1VKjp+J4g/PCEfSCmzhw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.55.0", + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/typescript-estree": "5.55.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", - "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.55.0.tgz", + "integrity": "sha512-OK+cIO1ZGhJYNCL//a3ROpsd83psf4dUJ4j7pdNVzd5DmIk+ffkuUIX2vcZQbEW/IR41DYsfJTB19tpCboxQuw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0" + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/visitor-keys": "5.55.0" } }, "@typescript-eslint/type-utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", - "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.55.0.tgz", + "integrity": "sha512-ObqxBgHIXj8rBNm0yh8oORFrICcJuZPZTqtAFh0oZQyr5DnAHZWfyw54RwpEEH+fD8suZaI0YxvWu5tYE/WswA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/typescript-estree": "5.55.0", + "@typescript-eslint/utils": "5.55.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", - "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.55.0.tgz", + "integrity": "sha512-M4iRh4AG1ChrOL6Y+mETEKGeDnT7Sparn6fhZ5LtVJF1909D5O4uqK+C5NPbLmpfZ0XIIxCdwzKiijpZUOvOug==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", - "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.55.0.tgz", + "integrity": "sha512-I7X4A9ovA8gdpWMpr7b1BN9eEbvlEtWhQvpxp/yogt48fy9Lj3iE3ild/1H3jKBBIYj5YYJmS2+9ystVhC7eaQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0", + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/visitor-keys": "5.55.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -19664,18 +19622,18 @@ } }, "@typescript-eslint/utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", - "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.55.0.tgz", + "integrity": "sha512-FkW+i2pQKcpDC3AY6DU54yl8Lfl14FVGYDgBTyGKB75cCwV3KpkpTMFi9d9j2WAJ4271LR2HeC5SEWF/CZmmfw==", "dev": true, "requires": { + "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "5.55.0", + "@typescript-eslint/types": "5.55.0", + "@typescript-eslint/typescript-estree": "5.55.0", "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "dependencies": { @@ -19706,12 +19664,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", - "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", + "version": "5.55.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.55.0.tgz", + "integrity": "sha512-q2dlHHwWgirKh1D3acnuApXG+VNXpEY5/AwRxDVuEQpxWaB0jCDe0jFMVMALJ3ebSfuOVE8/rMS+9ZOYGg1GWw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/types": "5.55.0", "eslint-visitor-keys": "^3.3.0" } }, @@ -19857,6 +19815,16 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-includes": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", @@ -19979,15 +19947,15 @@ } }, "babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", "dev": true, "requires": { - "@jest/transform": "^29.4.3", + "@jest/transform": "^29.5.0", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", + "babel-preset-jest": "^29.5.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -20058,9 +20026,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -20162,12 +20130,12 @@ } }, "babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^29.4.3", + "babel-plugin-jest-hoist": "^29.5.0", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -20233,14 +20201,14 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "bs-logger": { @@ -20340,9 +20308,9 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { - "version": "1.0.30001449", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001449.tgz", - "integrity": "sha512-CPB+UL9XMT/Av+pJxCKGhdx+yg1hzplvFJQlJ2n68PyQGMz9L/E2zCyLdOL8uasbouTUgnPl+y0tccI/se+BEw==" + "version": "1.0.30001465", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001465.tgz", + "integrity": "sha512-HvjgL3MYAJjceTDCcjRnQGjwUz/5qec9n7JPOzUursUoOTIsYCSDOb1l7RsnZE8mjbxG78zVRCKfrBXyvChBag==" }, "chalk": { "version": "2.4.2", @@ -20361,9 +20329,9 @@ "dev": true }, "ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==" }, "cjs-module-lexer": { "version": "1.2.2", @@ -20619,11 +20587,11 @@ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==" }, "core-js-compat": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", - "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", + "version": "3.29.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.1.tgz", + "integrity": "sha512-QmchCua884D8wWskMX8tW5ydINzd8oSJVx38lx/pVkFGqztxt73GYre3pm/hyYq8bPf+MW5In4I/uRShFDsbrA==", "requires": { - "browserslist": "^4.21.4" + "browserslist": "^4.21.5" } }, "core-util-is": { @@ -20719,9 +20687,9 @@ "dev": true }, "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true }, "defaults": { @@ -20733,9 +20701,9 @@ } }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "requires": { "has-property-descriptors": "^1.0.0", @@ -20812,9 +20780,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + "version": "1.4.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", + "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==" }, "emittery": { "version": "0.13.1", @@ -20880,18 +20848,18 @@ } }, "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, "requires": { + "array-buffer-byte-length": "^1.0.0", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -20899,8 +20867,8 @@ "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", @@ -20908,11 +20876,12 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.10", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", "typed-array-length": "^1.0.4", @@ -21063,23 +21032,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", @@ -21149,9 +21101,9 @@ } }, "eslint-config-prettier": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", - "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", + "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "dev": true, "requires": {} }, @@ -21191,9 +21143,9 @@ } }, "eslint-plugin-react": { - "version": "7.32.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz", - "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==", + "version": "7.32.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", + "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", "dev": true, "requires": { "array-includes": "^3.1.6", @@ -21277,18 +21229,18 @@ } }, "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "requires": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true } } @@ -21324,9 +21276,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -21487,16 +21439,16 @@ } }, "expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", "dev": true, "requires": { - "@jest/expect-utils": "^29.4.3", + "@jest/expect-utils": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" } }, "extend-shallow": { @@ -21583,6 +21535,14 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-xml-parser": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.3.tgz", + "integrity": "sha512-LsNDahCiCcJPe8NO7HijcnukHB24tKbfDDA5IILx9dmW3Frb52lhbeX6MPNUSvyGNfav2VTYpJ/OqkRoVLrh2Q==", + "requires": { + "strnum": "^1.0.5" + } + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -21943,6 +21903,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -22188,12 +22154,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -22220,13 +22186,13 @@ } }, "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" } }, @@ -22541,21 +22507,21 @@ } }, "jest": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.1.tgz", - "integrity": "sha512-cknimw7gAXPDOmj0QqztlxVtBVCw2lYY9CeIE5N6kD+kET1H4H79HSNISJmijb1HF+qk+G+ploJgiDi5k/fRlg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", "dev": true, "requires": { - "@jest/core": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", "import-local": "^3.0.2", - "jest-cli": "^29.4.1" + "jest-cli": "^29.5.0" } }, "jest-changed-files": { - "version": "29.4.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.0.tgz", - "integrity": "sha512-rnI1oPxgFghoz32Y8eZsGJMjW54UlqT17ycQeCEktcxxwqqKdlj9afl8LNeO0Pbu+h2JQHThQP0BzS67eTRx4w==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", "dev": true, "requires": { "execa": "^5.0.0", @@ -22563,28 +22529,29 @@ } }, "jest-circus": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.1.tgz", - "integrity": "sha512-v02NuL5crMNY4CGPHBEflLzl4v91NFb85a+dH9a1pUNx6Xjggrd8l9pPy4LZ1VYNRXlb+f65+7O/MSIbLir6pA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", "dev": true, "requires": { - "@jest/environment": "^29.4.1", - "@jest/expect": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.1", - "jest-matcher-utils": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "p-limit": "^3.1.0", - "pretty-format": "^29.4.1", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -22641,21 +22608,21 @@ } }, "jest-cli": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.1.tgz", - "integrity": "sha512-jz7GDIhtxQ37M+9dlbv5K+/FVcIo1O/b1sX3cJgzlQUf/3VG25nvuWzlDC4F1FLLzUThJeWLu8I7JF9eWpuURQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", "dev": true, "requires": { - "@jest/core": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -22712,31 +22679,31 @@ } }, "jest-config": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.1.tgz", - "integrity": "sha512-g7p3q4NuXiM4hrS4XFATTkd+2z0Ml2RhFmFPM8c3WyKwVDNszbl4E7cV7WIx1YZeqqCtqbtTtZhGZWJlJqngzg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.1", - "@jest/types": "^29.4.1", - "babel-jest": "^29.4.1", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.1", - "jest-environment-node": "^29.4.1", - "jest-get-type": "^29.2.0", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-runner": "^29.4.1", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.4.1", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -22793,15 +22760,15 @@ } }, "jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "dependencies": { "ansi-styles": { @@ -22856,25 +22823,25 @@ } }, "jest-docblock": { - "version": "29.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz", - "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==", + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.1.tgz", - "integrity": "sha512-QlYFiX3llJMWUV0BtWht/esGEz9w+0i7BHwODKCze7YzZzizgExB9MOfiivF/vVT0GSQ8wXLhvHXh3x2fVD4QQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", "dev": true, "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", - "jest-util": "^29.4.1", - "pretty-format": "^29.4.1" + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" }, "dependencies": { "ansi-styles": { @@ -22929,16 +22896,16 @@ } }, "jest-environment-node": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.1.tgz", - "integrity": "sha512-x/H2kdVgxSkxWAIlIh9MfMuBa0hZySmfsC5lCsWmWr6tZySP44ediRKDUiNggX/eHLH7Cd5ZN10Rw+XF5tXsqg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", "requires": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-mock": "^29.4.1", - "jest-util": "^29.4.1" + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" } }, "jest-get-type": { @@ -22948,12 +22915,12 @@ "dev": true }, "jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", "dev": true, "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", @@ -22961,32 +22928,32 @@ "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", "micromatch": "^4.0.4", "walker": "^1.0.8" } }, "jest-leak-detector": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.1.tgz", - "integrity": "sha512-akpZv7TPyGMnH2RimOCgy+hPmWZf55EyFUvymQ4LMsQP8xSPlZumCPtXGoDhFNhUE2039RApZkTQDKU79p/FiQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", "dev": true, "requires": { - "jest-get-type": "^29.2.0", - "pretty-format": "^29.4.1" + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" } }, "jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" + "pretty-format": "^29.5.0" }, "dependencies": { "ansi-styles": { @@ -23041,17 +23008,17 @@ } }, "jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -23102,13 +23069,13 @@ } }, "jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", - "jest-util": "^29.4.3" + "jest-util": "^29.5.0" } }, "jest-pnp-resolver": { @@ -23125,17 +23092,17 @@ "dev": true }, "jest-resolve": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.1.tgz", - "integrity": "sha512-j/ZFNV2lm9IJ2wmlq1uYK0Y/1PiyDq9g4HEGsNTNr3viRbJdV+8Lf1SXIiLZXFvyiisu0qUyIXGBnw+OKWkJwQ==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", + "jest-haste-map": "^29.5.0", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.1", - "jest-validate": "^29.4.1", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -23193,40 +23160,40 @@ } }, "jest-resolve-dependencies": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.1.tgz", - "integrity": "sha512-Y3QG3M1ncAMxfjbYgtqNXC5B595zmB6e//p/qpA/58JkQXu/IpLDoLeOa8YoYfsSglBKQQzNUqtfGJJT/qLmJg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", "dev": true, "requires": { - "jest-regex-util": "^29.2.0", - "jest-snapshot": "^29.4.1" + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" } }, "jest-runner": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.1.tgz", - "integrity": "sha512-8d6XXXi7GtHmsHrnaqBKWxjKb166Eyj/ksSaUYdcBK09VbjPwIgWov1VwSmtupCIz8q1Xv4Qkzt/BTo3ZqiCeg==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", "dev": true, "requires": { - "@jest/console": "^29.4.1", - "@jest/environment": "^29.4.1", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-docblock": "^29.2.0", - "jest-environment-node": "^29.4.1", - "jest-haste-map": "^29.4.1", - "jest-leak-detector": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-resolve": "^29.4.1", - "jest-runtime": "^29.4.1", - "jest-util": "^29.4.1", - "jest-watcher": "^29.4.1", - "jest-worker": "^29.4.1", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -23283,32 +23250,31 @@ } }, "jest-runtime": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.1.tgz", - "integrity": "sha512-UXTMU9uKu2GjYwTtoAw5rn4STxWw/nadOfW7v1sx6LaJYa3V/iymdCLQM6xy3+7C6mY8GfX22vKpgxY171UIoA==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.1", - "@jest/fake-timers": "^29.4.1", - "@jest/globals": "^29.4.1", - "@jest/source-map": "^29.2.0", - "@jest/test-result": "^29.4.1", - "@jest/transform": "^29.4.1", - "@jest/types": "^29.4.1", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.1", - "jest-message-util": "^29.4.1", - "jest-mock": "^29.4.1", - "jest-regex-util": "^29.2.0", - "jest-resolve": "^29.4.1", - "jest-snapshot": "^29.4.1", - "jest-util": "^29.4.1", - "semver": "^7.3.5", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -23353,24 +23319,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -23379,12 +23327,6 @@ "requires": { "has-flag": "^4.0.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -23398,9 +23340,9 @@ } }, "jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", "dev": true, "requires": { "@babel/core": "^7.11.6", @@ -23409,23 +23351,22 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.4.3", + "expect": "^29.5.0", "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", + "jest-diff": "^29.5.0", "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", + "pretty-format": "^29.5.0", "semver": "^7.3.5" }, "dependencies": { @@ -23505,11 +23446,11 @@ } }, "jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", "requires": { - "@jest/types": "^29.4.3", + "@jest/types": "^29.5.0", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -23563,17 +23504,17 @@ } }, "jest-validate": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.1.tgz", - "integrity": "sha512-qNZXcZQdIQx4SfUB/atWnI4/I2HUvhz8ajOSYUu40CSmf9U5emil8EDHgE7M+3j9/pavtk3knlZBDsgFvv/SWw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", "dev": true, "requires": { - "@jest/types": "^29.4.1", + "@jest/types": "^29.5.0", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^29.2.0", + "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.4.1" + "pretty-format": "^29.5.0" }, "dependencies": { "ansi-styles": { @@ -23634,18 +23575,18 @@ } }, "jest-watcher": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.1.tgz", - "integrity": "sha512-vFOzflGFs27nU6h8dpnVRER3O2rFtL+VMEwnG0H3KLHcllLsU8y9DchSh0AL/Rg5nN1/wSiQ+P4ByMGpuybaVw==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", "dev": true, "requires": { - "@jest/test-result": "^29.4.1", - "@jest/types": "^29.4.1", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.4.1", + "jest-util": "^29.5.0", "string-length": "^4.0.1" }, "dependencies": { @@ -23701,13 +23642,13 @@ } }, "jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", "dev": true, "requires": { "@types/node": "*", - "jest-util": "^29.4.3", + "jest-util": "^29.5.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -23730,14 +23671,14 @@ } }, "joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "version": "17.8.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", + "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", "requires": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, @@ -23756,9 +23697,9 @@ } }, "jsc-android": { - "version": "250230.2.1", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250230.2.1.tgz", - "integrity": "sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q==" + "version": "250231.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", + "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==" }, "jscodeshift": { "version": "0.13.1", @@ -24301,9 +24242,9 @@ "dev": true }, "metro": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.7.tgz", - "integrity": "sha512-pkRqFhuGUvkiu8HxKPUQelbCuyy6te6okMssTyLzQwsKilNLK4YMI2uD6PHnypg5SiMJ58lwfqkp/t5w72jEvw==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.73.8.tgz", + "integrity": "sha512-2EMJME9w5x7Uzn+DnQ4hzWr33u/aASaOBGdpf4lxbrlk6/vl4UBfX1sru6KU535qc/0Z1BMt4Vq9qsP3ZGFmWg==", "requires": { "@babel/code-frame": "^7.0.0", "@babel/core": "^7.20.0", @@ -24327,23 +24268,23 @@ "invariant": "^2.2.4", "jest-worker": "^27.2.0", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-config": "0.73.7", - "metro-core": "0.73.7", - "metro-file-map": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-inspector-proxy": "0.73.7", - "metro-minify-terser": "0.73.7", - "metro-minify-uglify": "0.73.7", - "metro-react-native-babel-preset": "0.73.7", - "metro-resolver": "0.73.7", - "metro-runtime": "0.73.7", - "metro-source-map": "0.73.7", - "metro-symbolicate": "0.73.7", - "metro-transform-plugins": "0.73.7", - "metro-transform-worker": "0.73.7", + "metro-babel-transformer": "0.73.8", + "metro-cache": "0.73.8", + "metro-cache-key": "0.73.8", + "metro-config": "0.73.8", + "metro-core": "0.73.8", + "metro-file-map": "0.73.8", + "metro-hermes-compiler": "0.73.8", + "metro-inspector-proxy": "0.73.8", + "metro-minify-terser": "0.73.8", + "metro-minify-uglify": "0.73.8", + "metro-react-native-babel-preset": "0.73.8", + "metro-resolver": "0.73.8", + "metro-runtime": "0.73.8", + "metro-source-map": "0.73.8", + "metro-symbolicate": "0.73.8", + "metro-transform-plugins": "0.73.8", + "metro-transform-worker": "0.73.8", "mime-types": "^2.1.27", "node-fetch": "^2.2.0", "nullthrows": "^1.1.1", @@ -24425,51 +24366,6 @@ } } }, - "metro-react-native-babel-preset": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz", - "integrity": "sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw==", - "requires": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.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.0.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.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.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-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-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -24497,41 +24393,41 @@ } }, "metro-babel-transformer": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.7.tgz", - "integrity": "sha512-s7UVkwovGTEXYEQrv5hcmSBbFJ9s9lhCRNMScn4Itgj3UMdqRr9lU8DXKEFlJ7osgRxN6n5+eXqcvhE4B1H1VQ==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.73.8.tgz", + "integrity": "sha512-GO6H/W2RjZ0/gm1pIvdO9EP34s3XN6kzoeyxqmfqKfYhJmYZf1SzXbyiIHyMbJNwJVrsKuHqu32+GopTlKscWw==", "requires": { "@babel/core": "^7.20.0", "hermes-parser": "0.8.0", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.8", "nullthrows": "^1.1.1" } }, "metro-cache": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.7.tgz", - "integrity": "sha512-CPPgI+i9yVzOEDCdmEEZ67JgOvZyNDs8kStmGUFgDuLSjj3//HhkqT5XyfWjGeH6KmyGiS8ip3cgLOVn3IsOSA==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.73.8.tgz", + "integrity": "sha512-/uFbTIw813Rvb8kSAIHvax9gWl41dtgjY2SpJLNIBLdQ6oFZ3CVo3ahZIiEZOrCeHl9xfGn5tmvNb8CEFa/Q5w==", "requires": { - "metro-core": "0.73.7", + "metro-core": "0.73.8", "rimraf": "^3.0.2" } }, "metro-cache-key": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.7.tgz", - "integrity": "sha512-GngYzrHwZU9U0Xl81H4aq9Tn5cjQyU12v9/flB0hzpeiYO5A89TIeilb4Kg8jtfC6JcmmsdK9nxYIGEq7odHhQ==" + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.73.8.tgz", + "integrity": "sha512-VzFGu4kJGIkLjyDgVoM2ZxIHlMdCZWMqVIux9N+EeyMVMvGXTiXW8eGROgxzDhVjyR58IjfMsYpRCKz5dR+2ew==" }, "metro-config": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.7.tgz", - "integrity": "sha512-pD/F+vK3u37cbj1skYmI6cUsEEscqNRtW2KlDKu1m+n8nooDB2oGTOZatlS5WQa7Ga6jYQRydftlq4CLDexAfA==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.73.8.tgz", + "integrity": "sha512-sAYq+llL6ZAfro64U99ske8HcKKswxX4wIZbll9niBKG7TkWm7tfMY1jO687XEmE4683rHncZeBRav9pLngIzg==", "requires": { "cosmiconfig": "^5.0.5", "jest-validate": "^26.5.2", - "metro": "0.73.7", - "metro-cache": "0.73.7", - "metro-core": "0.73.7", - "metro-runtime": "0.73.7" + "metro": "0.73.8", + "metro-cache": "0.73.8", + "metro-core": "0.73.8", + "metro-runtime": "0.73.8" }, "dependencies": { "@jest/types": { @@ -24639,18 +24535,18 @@ } }, "metro-core": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.7.tgz", - "integrity": "sha512-H7j1Egj1VnNnsSYf9ZKv0SRwijgtRKIcaGNQq/T+er73vqqb4kR9H+2VIJYPXi6R8lT+QLIMfs6CWSUHAJUgtg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.73.8.tgz", + "integrity": "sha512-Aew4dthbZf8bRRjlYGL3cnai3+LKYTf6mc7YS2xLQRWtgGZ1b/H8nQtBvXZpfRYFcS84UeEQ10vwIf5eR3qPdQ==", "requires": { "lodash.throttle": "^4.1.1", - "metro-resolver": "0.73.7" + "metro-resolver": "0.73.8" } }, "metro-file-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.7.tgz", - "integrity": "sha512-BYaCo2e/4FMN4nOajeN+Za5cPfecfikzUYuFWWMyLAmHU6dj7B+PFkaJ4OEJO3vmRoeq5vMOmhpKXgysYbNXJg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.73.8.tgz", + "integrity": "sha512-CM552hUO9om02jJdLszOCIDADKNaaeVz8CjYXItndvgr5jmFlQYAR+UMvaDzeT8oYdAV1DXAljma2CS2UBymPg==", "requires": { "abort-controller": "^3.0.0", "anymatch": "^3.0.3", @@ -24785,14 +24681,14 @@ } }, "metro-hermes-compiler": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.7.tgz", - "integrity": "sha512-F8PlJ8mWEEumGNH3eMRA3gjgP70ZvH4Ex5F1KY6ofD/gpn7w5HJHSPTeVw8gtUb1pYLN4nevptpyXGg04Jfcog==" + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-hermes-compiler/-/metro-hermes-compiler-0.73.8.tgz", + "integrity": "sha512-2d7t+TEoQLk+jyXgBykmAtPPJK2B46DB3qUYIMKDFDDaKzCljrojyVuGgQq6SM1f95fe6HDAQ3K9ihTjeB90yw==" }, "metro-inspector-proxy": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.7.tgz", - "integrity": "sha512-TsAtQeKr9X7NaQHlpshu+ZkGWlPi5fFKNqieLkfqvT1oXN4PQF/4q38INyiZtWLPvoUzTR6PRnm4pcUbJ7+Nzg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.73.8.tgz", + "integrity": "sha512-F0QxwDTox0TDeXVRN7ZmI7BknBjPDVKQ1ZeKznFBiMa0SXiD1kzoksfpDbZ6hTEKrhVM9Ep0YQmC7avwZouOnA==", "requires": { "connect": "^3.6.5", "debug": "^2.2.0", @@ -24822,33 +24718,31 @@ } }, "metro-minify-terser": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.7.tgz", - "integrity": "sha512-gbv1fmMOZm6gJ6dQoD+QktlCi2wk6nlTR8j8lQCjeeXGbs6O9e5XLWNPOexHqo7S69bdbohEnfZnLJFcxgHeNw==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.73.8.tgz", + "integrity": "sha512-pnagyXAoMPhihWrHRIWqCxrP6EJ8Hfugv5RXBb6HbOANmwajn2uQuzeu18+dXaN1yPoDCMCgpg/UA4ibFN5jtQ==", "requires": { "terser": "^5.15.0" } }, "metro-minify-uglify": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.7.tgz", - "integrity": "sha512-DmDCzfdbaPExQuQ7NQozCNOSOAgp5Ux9kWzmKAT8seQ38/3NtUepW+PTgxXIHmwNjJV4oHsHwlBlTwJmYihKXg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.73.8.tgz", + "integrity": "sha512-9wZqKfraVfmtMXdOzRyan+6r1woQXqqa4KeXfVh7+Mxl+5+J0Lmw6EvTrWawsaOEpvpn32q9MfoHC1d8plDJwA==", "requires": { "uglify-es": "^3.1.9" } }, "metro-react-native-babel-preset": { - "version": "0.74.1", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.74.1.tgz", - "integrity": "sha512-DjsG9nqm5C7cjB2SlgbcNJOn9y5MBUd3bRlCfnoj8CxAeGTGkS+yXd183lHR3C1bhmQNjuUE0abzzpE1CFh6JQ==", - "dev": true, + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.8.tgz", + "integrity": "sha512-spNrcQJTbQntEIqJnCA6yL4S+dzV9fXCk7U+Rm7yJasZ4o4Frn7jP23isu7FlZIp1Azx1+6SbP7SgQM+IP5JgQ==", "requires": { "@babel/core": "^7.20.0", "@babel/plugin-proposal-async-generator-functions": "^7.0.0", "@babel/plugin-proposal-class-properties": "^7.0.0", "@babel/plugin-proposal-export-default-from": "^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-numeric-separator": "^7.0.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", "@babel/plugin-proposal-optional-chaining": "^7.0.0", @@ -24877,6 +24771,7 @@ "@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-template-literals": "^7.0.0", "@babel/plugin-transform-typescript": "^7.5.0", "@babel/plugin-transform-unicode-regex": "^7.0.0", "@babel/template": "^7.0.0", @@ -24884,94 +24779,47 @@ } }, "metro-react-native-babel-transformer": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.7.tgz", - "integrity": "sha512-73HW8betjX+VPm3iqsMBe8F/F2Tt+hONO6YJwcF7FonTqQYW1oTz0dOp0dClZGfHUXxpJBz6Vuo7J6TpdzDD+w==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.73.8.tgz", + "integrity": "sha512-oH/LCCJPauteAE28c0KJAiSrkV+1VJbU0PwA9UwaWnle+qevs/clpKQ8LrIr33YbBj4CiI1kFoVRuNRt5h4NFg==", "requires": { "@babel/core": "^7.20.0", "babel-preset-fbjs": "^3.4.0", "hermes-parser": "0.8.0", - "metro-babel-transformer": "0.73.7", - "metro-react-native-babel-preset": "0.73.7", - "metro-source-map": "0.73.7", + "metro-babel-transformer": "0.73.8", + "metro-react-native-babel-preset": "0.73.8", + "metro-source-map": "0.73.8", "nullthrows": "^1.1.1" - }, - "dependencies": { - "metro-react-native-babel-preset": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.73.7.tgz", - "integrity": "sha512-RKcmRZREjJCzHKP+JhC9QTCohkeb3xa/DtqHU14U5KWzJHdC0mMrkTZYNXhV0cryxsaVKVEw5873KhbZyZHMVw==", - "requires": { - "@babel/core": "^7.20.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.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.0.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.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.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-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-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" - } - } } }, "metro-resolver": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.7.tgz", - "integrity": "sha512-mGW3XPeKBCwZnkHcKo1dhFa9olcx7SyNzG1vb5kjzJYe4Qs3yx04r/qFXIJLcIgLItB69TIGvosznUhpeOOXzg==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.73.8.tgz", + "integrity": "sha512-GiBWont7/OgAftkkj2TiEp+Gf1PYZUk8xV4MbtnQjIKyy3MlGY3GbpMQ1BHih9GUQqlF0n9jsUlC2K5P0almXQ==", "requires": { "absolute-path": "^0.0.0" } }, "metro-runtime": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.7.tgz", - "integrity": "sha512-2fxRGrF8FyrwwHY0TCitdUljzutfW6CWEpdvPilfrs8p0PI5X8xOWg8ficeYtw+DldHtHIAL2phT59PqzHTyVA==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.73.8.tgz", + "integrity": "sha512-M+Bg9M4EN5AEpJ8NkiUsawD75ifYvYfHi05w6QzHXaqOrsTeaRbbeLuOGCYxU2f/tPg17wQV97/rqUQzs9qEtA==", "requires": { "@babel/runtime": "^7.0.0", "react-refresh": "^0.4.0" } }, "metro-source-map": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.7.tgz", - "integrity": "sha512-gbC/lfUN52TtQhEsTTA+987MaFUpQlufuCI05blLGLosDcFCsARikHsxa65Gtslm/rG2MqvFLiPA5hviONNv9g==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.73.8.tgz", + "integrity": "sha512-wozFXuBYMAy7b8BCYwC+qoXsvayVJBHWtSTlSLva99t+CoUSG9JO9kg1umzbOz28YYPxKmvb/wbnLMkHdas2cA==", "requires": { "@babel/traverse": "^7.20.0", "@babel/types": "^7.20.0", "invariant": "^2.2.4", - "metro-symbolicate": "0.73.7", + "metro-symbolicate": "0.73.8", "nullthrows": "^1.1.1", - "ob1": "0.73.7", + "ob1": "0.73.8", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -24984,12 +24832,12 @@ } }, "metro-symbolicate": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.7.tgz", - "integrity": "sha512-571ThWmX5o8yGNzoXjlcdhmXqpByHU/bSZtWKhtgV2TyIAzYCYt4hawJAS5+/qDazUvjHdm8BbdqFUheM0EKNQ==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.73.8.tgz", + "integrity": "sha512-xkBAcceYYp0GGdCCuMzkCF1ejHsd0lYlbKBkjSRgM0Nlj80VapPaSwumYoAvSaDxcbkvS7/sCjURGp5DsSFgRQ==", "requires": { "invariant": "^2.2.4", - "metro-source-map": "0.73.7", + "metro-source-map": "0.73.8", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "through2": "^2.0.1", @@ -25004,9 +24852,9 @@ } }, "metro-transform-plugins": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.7.tgz", - "integrity": "sha512-M5isiWEau0jMudb5ezaNBZnYqXxcATMqnAYc+Cu25IahT1NHi5aWwLok9EBmBpN5641IZUZXScf+KnS7fPxPCQ==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.73.8.tgz", + "integrity": "sha512-IxjlnB5eA49M0WfvPEzvRikK3Rr6bECUUfcZt/rWpSphq/mttgyLYcHQ+VTZZl0zHolC3cTLwgoDod4IIJBn1A==", "requires": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", @@ -25016,22 +24864,22 @@ } }, "metro-transform-worker": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.7.tgz", - "integrity": "sha512-gZYIu9JAqEI9Rxi0xGMuMW6QsHGbMSptozlTOwOd7T7yXX3WwYS/I3yLPbLhbZTjOhwMHkTt8Nhm2qBo8nh14g==", + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.73.8.tgz", + "integrity": "sha512-B8kR6lmcvyG4UFSF2QDfr/eEnWJvg0ZadooF8Dg6m/3JSm9OAqfSoC0YrWqAuvtWImNDnbeKWN7/+ns44Hv6tg==", "requires": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.0", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", "babel-preset-fbjs": "^3.4.0", - "metro": "0.73.7", - "metro-babel-transformer": "0.73.7", - "metro-cache": "0.73.7", - "metro-cache-key": "0.73.7", - "metro-hermes-compiler": "0.73.7", - "metro-source-map": "0.73.7", - "metro-transform-plugins": "0.73.7", + "metro": "0.73.8", + "metro-babel-transformer": "0.73.8", + "metro-cache": "0.73.8", + "metro-cache-key": "0.73.8", + "metro-hermes-compiler": "0.73.8", + "metro-source-map": "0.73.8", + "metro-transform-plugins": "0.73.8", "nullthrows": "^1.1.1" } }, @@ -25082,9 +24930,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "mixin-deep": { "version": "1.3.2", @@ -25172,9 +25020,9 @@ } }, "node-fetch": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", - "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", "requires": { "whatwg-url": "^5.0.0" } @@ -25185,9 +25033,9 @@ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" }, "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, "node-stream-zip": { "version": "1.15.0", @@ -25214,9 +25062,9 @@ "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" }, "ob1": { - "version": "0.73.7", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.7.tgz", - "integrity": "sha512-DfelfvR843KADhSUATGGhuepVMRcf5VQX+6MQLy5AW0BKDLlO7Usj6YZeAAZP7P86QwsoTxB0RXCFiA7t6S1IQ==" + "version": "0.73.8", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.73.8.tgz", + "integrity": "sha512-1F7j+jzD+edS6ohQP7Vg5f3yiIk5i3x1uLrNIHOmLHWzWK1t3zrDpjnoXghccdVlsU+UjbyURnDynm4p0GgXeA==" }, "object-assign": { "version": "4.1.1", @@ -25619,9 +25467,9 @@ "dev": true }, "prettier": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.3.tgz", - "integrity": "sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "dev": true }, "prettier-linter-helpers": { @@ -25634,9 +25482,9 @@ } }, "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", "requires": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -25710,6 +25558,12 @@ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, + "pure-rand": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.1.tgz", + "integrity": "sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -25730,9 +25584,9 @@ } }, "react-devtools-core": { - "version": "4.27.1", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.1.tgz", - "integrity": "sha512-qXhcxxDWiFmFAOq48jts9YQYe1+wVoUXzJTlY4jbaATzyio6dd6CUGu3dXBhREeVgpZ+y4kg6vFJzIOZh6vY2w==", + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.27.2.tgz", + "integrity": "sha512-8SzmIkpO87alD7Xr6gWIEa1jHkMjawOZ+6egjazlnjB4UUcbnzGDf/vBJ4BzGuWWEM+pzrxuzsPpcMqlQkYK2g==", "requires": { "shell-quote": "^1.6.1", "ws": "^7" @@ -25752,14 +25606,14 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "react-native": { - "version": "0.71.1", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.71.1.tgz", - "integrity": "sha512-bLP5+IBj2IX6tgF9WnC/UL2ZPYkVUPsU4xqZV1jntTC2TH4xyLrvfKACjGlz5nQ3Mx4BmOFqsnMxithm53+6Aw==", + "version": "0.71.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.71.4.tgz", + "integrity": "sha512-3hSYqvWrOdKhpV3HpEKp1/CkWx8Sr/N/miCrmUIAsVTSJUR7JW0VvIsrV9urDhUj/s6v2WF4n7qIEEJsmTCrPw==", "requires": { "@jest/create-cache-key-function": "^29.2.1", - "@react-native-community/cli": "10.1.3", - "@react-native-community/cli-platform-android": "10.1.3", - "@react-native-community/cli-platform-ios": "10.1.1", + "@react-native-community/cli": "10.2.0", + "@react-native-community/cli-platform-android": "10.2.0", + "@react-native-community/cli-platform-ios": "10.2.0", "@react-native/assets": "1.0.0", "@react-native/normalize-color": "2.1.0", "@react-native/polyfills": "2.0.0", @@ -25770,18 +25624,18 @@ "event-target-shim": "^5.0.1", "invariant": "^2.2.4", "jest-environment-node": "^29.2.1", - "jsc-android": "^250230.2.1", + "jsc-android": "^250231.0.0", "memoize-one": "^5.0.0", - "metro-react-native-babel-transformer": "0.73.7", - "metro-runtime": "0.73.7", - "metro-source-map": "0.73.7", + "metro-react-native-babel-transformer": "0.73.8", + "metro-runtime": "0.73.8", + "metro-source-map": "0.73.8", "mkdirp": "^0.5.1", "nullthrows": "^1.1.1", "pretty-format": "^26.5.2", "promise": "^8.3.0", "react-devtools-core": "^4.26.1", - "react-native-codegen": "^0.71.3", - "react-native-gradle-plugin": "^0.71.13", + "react-native-codegen": "^0.71.5", + "react-native-gradle-plugin": "^0.71.16", "react-refresh": "^0.4.0", "react-shallow-renderer": "^16.15.0", "regenerator-runtime": "^0.13.2", @@ -25874,9 +25728,9 @@ } }, "react-native-codegen": { - "version": "0.71.3", - "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.3.tgz", - "integrity": "sha512-5AvdHVU1sAaXg05i0dG664ZTaCaIFaY1znV5vNsj+wUu6MGxNEUNbDKk9dxKUkkxOyk2KZOK5uhzWL0p5H5yZQ==", + "version": "0.71.5", + "resolved": "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.71.5.tgz", + "integrity": "sha512-rfsuc0zkuUuMjFnrT55I1mDZ+pBRp2zAiRwxck3m6qeGJBGK5OV5JH66eDQ4aa+3m0of316CqrJDRzVlYufzIg==", "requires": { "@babel/parser": "^7.14.0", "flow-parser": "^0.185.0", @@ -25885,9 +25739,9 @@ } }, "react-native-draggable-flatlist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/react-native-draggable-flatlist/-/react-native-draggable-flatlist-4.0.0.tgz", - "integrity": "sha512-3DVzZsCXNlK29UyIkx4Uh5+2TAHwHC9Q45i1lbuqEOcuSmZ8jHcqbE8VkLot2bVfWZGO5WFgihStmxkI0gBHRQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/react-native-draggable-flatlist/-/react-native-draggable-flatlist-4.0.1.tgz", + "integrity": "sha512-ZO1QUTNx64KZfXGXeXcBfql67l38X7kBcJ3rxUVZzPHt5r035GnGzIC0F8rqSXp6zgnwgUYMfB6zQc5PKmPL9Q==", "requires": { "@babel/preset-typescript": "^7.17.12" } @@ -25905,9 +25759,9 @@ } }, "react-native-gradle-plugin": { - "version": "0.71.13", - "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.13.tgz", - "integrity": "sha512-C66LNZAXbU0YDRkWx8d/8kjesdu7fsUAc/3QPJNftSXKEvEtnFZK2aH/rIgu1s5dbTcE0fjhdVPNJMRIfKo61w==" + "version": "0.71.16", + "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.71.16.tgz", + "integrity": "sha512-H2BjG2zk7B7Wii9sXvd9qhCVRQYDAHSWdMw9tscmZBqSP62DkIWEQSk4/B2GhQ4aK9ydVXgtqR6tBeg3yy8TSA==" }, "react-native-reanimated": { "version": "2.14.4", @@ -26003,9 +25857,9 @@ } }, "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26039,9 +25893,9 @@ } }, "redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", + "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "requires": { "@babel/runtime": "^7.9.2" } @@ -26111,23 +25965,18 @@ "dev": true }, "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "requires": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" } }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, "regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", @@ -26205,9 +26054,9 @@ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==" }, "resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz", + "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==", "dev": true }, "restore-cursor": { @@ -26425,9 +26274,9 @@ "dev": true }, "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==" }, "side-channel": { "version": "1.0.4", @@ -26828,6 +26677,17 @@ "side-channel": "^1.0.4" } }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", @@ -26890,6 +26750,11 @@ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", @@ -27005,9 +26870,9 @@ } }, "terser": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", - "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", @@ -27068,9 +26933,9 @@ }, "dependencies": { "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -27416,9 +27281,9 @@ "dev": true }, "v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", @@ -27590,9 +27455,9 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", diff --git a/package.json b/package.json index 2750b79..1f7c298 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "context_launcher", - "version": "1.4.8", + "version": "1.5.0", "private": false, "scripts": { "android": "react-native run-android", @@ -17,9 +17,10 @@ "dependencies": { "@gorhom/bottom-sheet": "^4.4.5", "@react-native-async-storage/async-storage": "^1.17.11", + "@react-native-community/datetimepicker": "^6.7.5", "@reduxjs/toolkit": "^1.9.1", "react": "18.2.0", - "react-native": "0.71.1", + "react-native": "0.71.4", "react-native-draggable-flatlist": "^4.0.0", "react-native-gesture-handler": "^2.9.0", "react-native-reanimated": "^2.14.4", @@ -48,7 +49,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-react-native": "^4.0.0", "jest": "^29.2.1", - "metro-react-native-babel-preset": "0.74.1", + "metro-react-native-babel-preset": "0.73.8", "prettier": "^2.4.1", "ts-jest": "^29.0.5", "typescript": "4.9.4" diff --git a/src/Home.tsx b/src/Home.tsx index 4e38762..16e3033 100644 --- a/src/Home.tsx +++ b/src/Home.tsx @@ -67,6 +67,7 @@ const styles = StyleSheet.create({ wrapper: { flex: 1, padding: 5, + overflow: 'hidden', marginTop: StatusBar.currentHeight, justifyContent: 'flex-end', }, diff --git a/src/components/AllApps.tsx b/src/components/AllApps.tsx index bb9cc82..5aa8e1f 100644 --- a/src/components/AllApps.tsx +++ b/src/components/AllApps.tsx @@ -34,7 +34,11 @@ const AllApps = () => { } const renderItem: ListRenderItem = ({ item }: ListRenderItemInfo) => ( - + ) return ( @@ -57,7 +61,8 @@ const AllApps = () => { const styles = StyleSheet.create({ wrapper: { - borderRadius: 10, + marginTop: 50, + borderRadius: 5, paddingVertical: 5, position: 'relative', backgroundColor: BACKGROUND_COLOR, diff --git a/src/components/AllAppsIcon.tsx b/src/components/AllAppsIcon.tsx index 1d60afc..2f0f803 100644 --- a/src/components/AllAppsIcon.tsx +++ b/src/components/AllAppsIcon.tsx @@ -1,45 +1,25 @@ // React import React, { useContext } from 'react' // React Native -import { Pressable, PressableAndroidRippleConfig, StyleSheet, View } from 'react-native' +import { Pressable, View } from 'react-native' +// Components +import CustomIcon from './shared/CustomIcon' // Contexts import GlobalContext from '../contexts/GlobalContext' -// Icon -import Icon from 'react-native-vector-icons/MaterialCommunityIcons' // Constants -import { PRIMARY_HEX_COLOR, SECONDARY_HEX_COLOR } from '../constants' - -const rippleConfig: PressableAndroidRippleConfig = { - color: SECONDARY_HEX_COLOR, - borderless: true, - foreground: true, - radius: 20, -} +import { PRIMARY_COLOR } from '../constants' +import { iconsStyle, iconsPressableConfig } from '../shared/bottom-container' const AllAppsIcon = () => { const { toggleDisplayAllApps } = useContext(GlobalContext) return ( - - - + + + ) } -const styles = StyleSheet.create({ - wrapper: { - alignItems: 'center', - flexDirection: 'row', - }, - icon: { - margin: 5, - }, -}) - export default AllAppsIcon diff --git a/src/components/AppItem.tsx b/src/components/AppItem.tsx index d07c08c..6381d64 100644 --- a/src/components/AppItem.tsx +++ b/src/components/AppItem.tsx @@ -1,7 +1,7 @@ // React import React, { useContext, useEffect, useMemo, useState } from 'react' // React Native -import { Image, Pressable, StyleSheet, View } from 'react-native' +import { Image, Pressable, StyleSheet, View, StyleProp, ViewStyle } from 'react-native' // Components import HighlightText from './HighlightText' // Redux @@ -19,44 +19,46 @@ import GlobalContext from '../contexts/GlobalContext' import { RenderedIn } from '../models/rendered-in' import { AppItemProps as Props } from '../models/props' -const AppItem = ({ appDetails, renderedIn, appIcon }: Props) => { +const AppItem = ({ appDetails, renderedIn, appIcon, wrapperStyle, pressableStyle }: Props) => { const dispatch = useDispatch() const [icon, setIcon] = useState(undefined) - const { searchAppLaunchProcedure } = useContext(SearchContext) + const { searchAppLaunchProcedure, searchInputRef } = useContext(SearchContext) const { setAppItemMenuDetails, displayAppItemMenuBottomSheet, globalAppLaunchProcedure } = useContext(GlobalContext) const onPress = () => { // Reset views and values globalAppLaunchProcedure() searchAppLaunchProcedure() + searchInputRef?.current?.clear() dispatch(resetAppsSearchState()) - // Add app to recent apps list if (renderedIn === RenderedIn.FILTERED_APPS || renderedIn === RenderedIn.ALL_APPS) { dispatch(addRecentApp({ ...appDetails, icon })) } - // Launch app launchApp(appDetails.name) } - const displayLabel = useMemo(() => renderedIn !== RenderedIn.FAVORITE_APPS, [renderedIn]) + const displayLabel = useMemo( + () => renderedIn !== RenderedIn.FAVORITE_APPS && renderedIn !== RenderedIn.PINNED_APPS, + [renderedIn] + ) const onLongPress = () => { setAppItemMenuDetails({ ...appDetails, icon }) displayAppItemMenuBottomSheet() } - const pressableStyles = ({ pressed }: { pressed: boolean }) => { - return { - ...styles.pressable, - borderRadius: 10, - backgroundColor: pressed ? 'rgba(255, 255, 255, .25)' : 'transparent', - } + const pressableStyles = ({ pressed }: { pressed: boolean }): StyleProp => { + return [{ backgroundColor: pressed ? 'rgba(255, 255, 255, .25)' : 'transparent' }, styles.pressable, pressableStyle] } useEffect(() => { - if (renderedIn === RenderedIn.RECENT_APPS || renderedIn === RenderedIn.FAVORITE_APPS) { + if ( + renderedIn === RenderedIn.RECENT_APPS || + renderedIn === RenderedIn.FAVORITE_APPS || + renderedIn === RenderedIn.PINNED_APPS + ) { setIcon(appIcon) } else if (renderedIn === RenderedIn.ALL_APPS || renderedIn === RenderedIn.FILTERED_APPS) { AppsModule.getApplicationIcon(appDetails.name, (nativeAppIcon: string) => setIcon(nativeAppIcon)) @@ -64,7 +66,7 @@ const AppItem = ({ appDetails, renderedIn, appIcon }: Props) => { }, []) return ( - + { const styles = StyleSheet.create({ pressable: { - display: 'flex', + padding: 5, + borderRadius: 5, alignItems: 'center', flexDirection: 'row', - padding: 5, - marginHorizontal: 5, }, icon: { width: 50, diff --git a/src/components/AppItemMenu.tsx b/src/components/AppItemMenu.tsx index 5a226c4..95f59f3 100644 --- a/src/components/AppItemMenu.tsx +++ b/src/components/AppItemMenu.tsx @@ -3,27 +3,39 @@ import React, { useContext, useEffect, useState } from 'react' // React Native import { View, Text, Pressable, StyleSheet, PressableAndroidRippleConfig, Image } from 'react-native' // Components -import SettingsItemLabel from './Settings/SettingsItemLabel' +import SettingsItemLabel from './Settings/shared/SettingsItemLabel' +import CustomIcon from './shared/CustomIcon' // Redux import { useDispatch, useSelector } from 'react-redux' import { resetAppsSearchState } from '../slices/appsSearch' -import { selectDisplayFavoriteAppsMemoized } from '../slices/preferences' +import { + selectDisplayFavoriteAppsMemoized, + selectDisplayPinnedAppsMemoized, + selectDisplayTemporaryPinnedAppsMemoized, +} from '../slices/preferences' import { selectFavoriteAppsMemoized, addFavoriteApp, removeFavoriteApp, selectFavoriteAppsCountMemoized, } from '../slices/favoriteApps' +import { + updateOrRemovePinnedApp, + selectTemporaryPinnedAppsMemoized, + selectAllPinnedAppsMemoized, + selectPinnedAppsMemoized, +} from '../slices/pinnedApps' // Contexts import GlobalContext from '../contexts/GlobalContext' // Bottom sheet import { BottomSheetModalProvider, BottomSheetModal } from '@gorhom/bottom-sheet' -// Icon -import Icon from 'react-native-vector-icons/MaterialIcons' // Utils import { requestAppUninstall, showAppDetails } from '../utils/apps-module' +import { getPinnedAppByName } from '../utils/apps' // Model import { FavoriteApp } from '../models/favorite-app' +import { PinnedApp } from '../models/pinned-app' +import { AppDetailsWithIcon } from '../models/app-details' const appInfoIconRippleConfig: PressableAndroidRippleConfig = { borderless: true, @@ -41,9 +53,16 @@ const settingItemButtonRippleConfig: PressableAndroidRippleConfig = { const AppItemMenu = () => { const dispatch = useDispatch() const [isFavoriteApp, setIsFavoriteApp] = useState(false) + const [isPinnedApp, setIsPinnedApp] = useState(false) + const [isTemporarilyPinnedApp, setIsTemporarilyPinnedApp] = useState(false) const favoriteApps = useSelector(selectFavoriteAppsMemoized) + const allPinnedApps = useSelector(selectAllPinnedAppsMemoized) + const pinnedApps = useSelector(selectPinnedAppsMemoized) + const temporaryPinnedApps = useSelector(selectTemporaryPinnedAppsMemoized) const favoriteAppsCount = useSelector(selectFavoriteAppsCountMemoized) const displayFavoriteAppsValue = useSelector(selectDisplayFavoriteAppsMemoized) + const displayPinnedAppsValue = useSelector(selectDisplayPinnedAppsMemoized) + const displayTemporaryPinnedApps = useSelector(selectDisplayTemporaryPinnedAppsMemoized) const { appItemMenuBottomSheetRef, appItemMenuDetails } = useContext(GlobalContext) useEffect(() => { @@ -53,6 +72,20 @@ const AppItemMenu = () => { setIsFavoriteApp(appIndex !== -1) }, [appItemMenuDetails, favoriteApps]) + useEffect(() => { + if (!appItemMenuDetails) return + + const appIndex = pinnedApps.findIndex(({ name }: PinnedApp) => name === appItemMenuDetails.name) + setIsPinnedApp(appIndex !== -1) + }, [appItemMenuDetails, pinnedApps]) + + useEffect(() => { + if (!appItemMenuDetails) return + + const appIndex = temporaryPinnedApps.findIndex(({ name }: PinnedApp) => name === appItemMenuDetails.name) + setIsTemporarilyPinnedApp(appIndex !== -1) + }, [appItemMenuDetails, temporaryPinnedApps]) + const addToFavoriteApps = () => { if (!appItemMenuDetails || !appItemMenuDetails.icon) return @@ -67,6 +100,30 @@ const AppItemMenu = () => { closeMenu() } + const updatePinnedApp = (isPermanent: boolean) => { + if (!appItemMenuDetails || !appItemMenuDetails.icon) return + + dispatch( + updateOrRemovePinnedApp({ + ...getPinnedAppByName(allPinnedApps, appItemMenuDetails as AppDetailsWithIcon), + isPermanent, + }) + ) + closeMenu() + } + + const updateTemporaryPinnedApp = (isTemporary: boolean) => { + if (!appItemMenuDetails || !appItemMenuDetails.icon) return + + dispatch( + updateOrRemovePinnedApp({ + ...getPinnedAppByName(allPinnedApps, appItemMenuDetails as AppDetailsWithIcon), + isTemporary, + }) + ) + closeMenu() + } + const openAppInfo = () => { if (!appItemMenuDetails) return @@ -98,8 +155,7 @@ const AppItemMenu = () => { @@ -107,16 +163,16 @@ const AppItemMenu = () => { {/* Header wrapper */} - + {appItemMenuDetails?.label} - + @@ -134,13 +190,43 @@ const AppItemMenu = () => { + + updatePinnedApp(false) : () => updatePinnedApp(true)} + style={({ pressed }: { pressed: boolean }) => [ + pressableStyles({ pressed }), + { opacity: !displayPinnedAppsValue ? 0.5 : 1 }, + ]} + disabled={!displayPinnedAppsValue} + android_disableSound={true} + android_ripple={settingItemButtonRippleConfig}> + + + + + + updateTemporaryPinnedApp(false) : () => updateTemporaryPinnedApp(true) + } + style={({ pressed }: { pressed: boolean }) => [ + pressableStyles({ pressed }), + { opacity: !displayTemporaryPinnedApps ? 0.5 : 1 }, + ]} + disabled={!displayTemporaryPinnedApps} + android_disableSound={true} + android_ripple={settingItemButtonRippleConfig}> + + + + - + @@ -165,13 +251,9 @@ const styles = StyleSheet.create({ }, itemContainer: { flexDirection: 'row', - justifyContent: 'space-between', borderBottomWidth: 1, borderBottomColor: '#e5e5e5', }, - buttonItemPressable: { - flex: 1, - }, headerWrapper: { paddingBottom: 10, alignItems: 'center', @@ -181,35 +263,15 @@ const styles = StyleSheet.create({ headerTitle: { fontSize: 20, color: '#808080', - fontWeight: '400', }, bottomSheetModal: { marginHorizontal: 5, }, appIcon: { - width: 50, - height: 50, + width: 40, + height: 40, marginRight: 10, }, - modalWrapper: { - flex: 1, - alignItems: 'center', - justifyContent: 'flex-end', - marginBottom: 75, - }, - modalAppInfoWrapper: { - flexDirection: 'row', - justifyContent: 'center', - borderBottomWidth: 1, - borderBottomColor: '#ccc', - }, - modalAppInfoText: { - fontWeight: '900', - }, - modalAppInfoIcon: { - width: 25, - height: 25, - }, }) export default AppItemMenu diff --git a/src/components/FavoriteApps.tsx b/src/components/FavoriteApps.tsx index 24e46c6..ac5efaa 100644 --- a/src/components/FavoriteApps.tsx +++ b/src/components/FavoriteApps.tsx @@ -9,6 +9,7 @@ import { useSelector } from 'react-redux' import { selectFavoriteAppsMemoized } from '../slices/favoriteApps' // Constants import { BACKGROUND_COLOR } from '../constants' +import { singleRowAppsViewStyle, whiteTextColorStyle } from '../shared/styles' // Models import { RenderedIn } from '../models/rendered-in' import { FavoriteApp } from '../models/favorite-app' @@ -24,32 +25,41 @@ const FavoriteApps = () => { [apps] ) - if (apps.length === 0) { - return ( - - No favorite apps set yet + return ( + + + Favorite - ) - } - - return {favoriteApps} + {apps.length > 0 ? ( + {favoriteApps} + ) : ( + + No favorite apps yet + + )} + + ) } const styles = StyleSheet.create({ wrapper: { - flexDirection: 'row', - justifyContent: 'space-evenly', - minHeight: 65, - borderRadius: 10, - paddingVertical: 2.5, + borderRadius: 5, backgroundColor: BACKGROUND_COLOR, }, - noAppsWrapper: { - alignItems: 'center', - paddingVertical: 0, + headerLabel: { + color: 'rgba(255,255,255,0.75)', + fontSize: 12, }, - noAppsWrapperText: { - color: '#fff', + headerWrapper: { + paddingVertical: 2.5, + paddingHorizontal: 10, + borderBottomWidth: 1, + borderBottomColor: 'rgba(255,255,255,0.5)', + }, + horizontalAppsWrapper: { + flexDirection: 'row', + justifyContent: 'space-evenly', + paddingVertical: 5, }, }) diff --git a/src/components/FilteredApps.tsx b/src/components/FilteredApps.tsx index dd9f822..77015cd 100644 --- a/src/components/FilteredApps.tsx +++ b/src/components/FilteredApps.tsx @@ -38,7 +38,11 @@ const FilteredApps = () => { } const renderItem: ListRenderItem = ({ item }: ListRenderItemInfo) => ( - + ) return ( @@ -57,12 +61,12 @@ const FilteredApps = () => { const styles = StyleSheet.create({ wrapper: { - minHeight: 70, + borderRadius: 5, paddingVertical: 5, - borderRadius: 10, backgroundColor: BACKGROUND_COLOR, }, noAppsWrapper: { + height: 70, paddingVertical: 0, alignItems: 'center', flexDirection: 'row', diff --git a/src/components/HighlightText.tsx b/src/components/HighlightText.tsx index 6d529ed..04f0d96 100644 --- a/src/components/HighlightText.tsx +++ b/src/components/HighlightText.tsx @@ -7,7 +7,7 @@ import { useSelector } from 'react-redux' // Slices import { selectAppsSearchQuery } from '../slices/appsSearch' // Constants -import { PRIMARY_HEX_COLOR } from '../constants' +import { PRIMARY_COLOR } from '../constants' // Utils import { createKeyForHighlightTextElement } from '../utils/string' // Models @@ -42,7 +42,7 @@ const HighlightText = ({ text }: Props) => { const styles = StyleSheet.create({ highlightedText: { - color: PRIMARY_HEX_COLOR, + color: PRIMARY_COLOR, fontWeight: '600', textShadowColor: 'rgba(255, 255, 255, 0.1)', textShadowRadius: 2.5, diff --git a/src/components/PinnedApps.tsx b/src/components/PinnedApps.tsx new file mode 100644 index 0000000..6763663 --- /dev/null +++ b/src/components/PinnedApps.tsx @@ -0,0 +1,78 @@ +// React Native +import { FlatList, ListRenderItem, ListRenderItemInfo, StyleSheet, Text, View } from 'react-native' +// Components +import AppItem from './AppItem' +// Redux +import { useSelector } from 'react-redux' +import { selectPinnedAppsMemoized } from '../slices/pinnedApps' +// Constants +import { APP_ITEM_HEIGHT_ICON_DISPLAYED, BACKGROUND_COLOR } from '../constants' +import { singleRowAppsViewStyle, whiteTextColorStyle } from '../shared/styles' +// Models +import { RenderedIn } from '../models/rendered-in' +import { PinnedApp } from '../models/pinned-app' +import { AppDetails } from '../models/app-details' + +const keyExtractor = ({ name }: AppDetails) => name +const getItemLayout = (_data: unknown, index: number) => ({ + length: APP_ITEM_HEIGHT_ICON_DISPLAYED, + offset: APP_ITEM_HEIGHT_ICON_DISPLAYED * index, + index, +}) + +const PinnedApps = () => { + const apps = useSelector(selectPinnedAppsMemoized) + + const renderItem: ListRenderItem = ({ item }: ListRenderItemInfo) => ( + + ) + + return ( + + + Pinned + + {apps.length > 0 ? ( + + + + ) : ( + + No pinned apps yet + + )} + + ) +} + +const styles = StyleSheet.create({ + wrapper: { + borderRadius: 5, + backgroundColor: BACKGROUND_COLOR, + }, + headerLabel: { + color: 'rgba(255,255,255,0.75)', + fontSize: 12, + }, + headerWrapper: { + paddingVertical: 2.5, + paddingHorizontal: 10, + borderBottomWidth: 1, + borderBottomColor: 'rgba(255,255,255,0.5)', + }, + verticalAppsWrapper: { + flexDirection: 'row', + justifyContent: 'flex-start', + padding: 5, + }, +}) + +export default PinnedApps diff --git a/src/components/RecentApps.tsx b/src/components/RecentApps.tsx index 40e73b3..a1c7b83 100644 --- a/src/components/RecentApps.tsx +++ b/src/components/RecentApps.tsx @@ -9,6 +9,7 @@ import { selectRecentAppsMemoized } from '../slices/recentApps' import AppItem from './AppItem' // Constants import { APP_ITEM_HEIGHT_ICON_DISPLAYED, BACKGROUND_COLOR } from '../constants' +import { singleRowAppsViewStyle, whiteTextColorStyle } from '../shared/styles' // Models import { RenderedIn } from '../models/rendered-in' import { RecentAppDetails } from '../models/recent-app' @@ -23,47 +24,60 @@ const getItemLayout = (_data: unknown, index: number) => ({ const RecentApps = () => { const apps = useSelector(selectRecentAppsMemoized) - if (apps.length === 0) { - return ( - - No recent apps yet - - ) - } - const renderItem: ListRenderItem = ({ item }: ListRenderItemInfo) => ( - + ) return ( - + + Recent + + {apps.length > 0 ? ( + + + + ) : ( + + No recent apps yet + + )} ) } const styles = StyleSheet.create({ wrapper: { - minHeight: 310, - paddingVertical: 5, - borderRadius: 10, + borderRadius: 5, backgroundColor: BACKGROUND_COLOR, + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', + }, + headerLabel: { + color: 'rgba(255,255,255,0.75)', + fontSize: 12, }, - noAppsWrapper: { - paddingVertical: 0, - alignItems: 'center', - flexDirection: 'row', - justifyContent: 'center', + headerWrapper: { + paddingVertical: 2.5, + paddingHorizontal: 10, + borderBottomWidth: 1, + borderBottomColor: 'rgba(255,255,255,0.5)', }, - noAppsWrapperText: { - color: '#fff', + verticalAppsWrapper: { + paddingVertical: 5, }, }) diff --git a/src/components/Search.tsx b/src/components/Search.tsx index 52dd385..e20144e 100644 --- a/src/components/Search.tsx +++ b/src/components/Search.tsx @@ -1,7 +1,9 @@ // React -import React, { useContext, useEffect } from 'react' +import React, { useCallback, useContext, useMemo } from 'react' // React Native import { Pressable, PressableAndroidRippleConfig, StyleSheet, TextInput, View } from 'react-native' +// Components +import CustomIcon from './shared/CustomIcon' // Redux import { useDispatch, useSelector } from 'react-redux' import { @@ -14,63 +16,69 @@ import { selectAppsListMemoized } from '../slices/appsList' // Contexts import SearchContext from '../contexts/SearchContext' import GlobalContext from '../contexts/GlobalContext' -// Icon -import Icon from 'react-native-vector-icons/MaterialIcons' -// Utils -import { dismissKeyboard } from '../utils/keyboard' // Constants -import { PRIMARY_HEX_COLOR, SECONDARY_HEX_COLOR } from '../constants' -// Models -import { AppDetails } from '../models/app-details' +import { PRIMARY_COLOR, SECONDARY_COLOR } from '../constants' +// Utils +import { getAppsByLabel } from '../utils/apps' -const clearIconRippleConfig: PressableAndroidRippleConfig = { +const clearButtonRippleConfig: PressableAndroidRippleConfig = { borderless: true, - foreground: true, - color: '#ccc', - radius: 15, } const Search = () => { const dispatch = useDispatch() const apps = useSelector(selectAppsListMemoized) const searchQuery = useSelector(selectAppsSearchQuery) + const { displayAllApps, hideAllApps } = useContext(GlobalContext) const { searchInputRef, invalidCharacters, setInvalidCharacters } = useContext(SearchContext) - const { hideAllApps, displayAllApps } = useContext(GlobalContext) const onQueryChange = (query: string) => { + hideAllApps() + const trimmedQuery = query.trim().replace(/\./g, '\\.') - // Accept only ASCII based characters + if (trimmedQuery.length === 0) { + dispatch(resetAppsSearchState()) + return + } + + // Check for only ASCII based characters if (!trimmedQuery.match(/[A-z\s\d]/gi)) { setInvalidCharacters(true) dispatch(setAppsSearchQuery(trimmedQuery)) return - } else if (trimmedQuery.length === 0) { - dispatch(resetAppsSearchState()) - return } // Reset invalid characters when it's valid (passes the above check) if (invalidCharacters) setInvalidCharacters(false) - hideAllApps() - - dispatch(setAppsSearchResult(apps.filter((app: AppDetails) => app.label.match(new RegExp(trimmedQuery, 'gi'))))) + dispatch(setAppsSearchResult(getAppsByLabel(apps, trimmedQuery))) dispatch(setAppsSearchQuery(trimmedQuery)) } - const clearInputAndSearchState = () => { + const clearInputAndSearchState = useCallback(() => { searchInputRef?.current?.clear() dispatch(resetAppsSearchState()) - } + }, [searchInputRef]) + + const clearButton = (): JSX.Element | null => { + if (!searchQuery) return null - const onSubmitEditing = () => { - dismissKeyboard() + return ( + + + + ) } - useEffect(() => { - if (!searchQuery) searchInputRef?.current?.clear() - }, [searchQuery]) + const placeholderTextColor: string = useMemo( + () => (displayAllApps ? PRIMARY_COLOR : SECONDARY_COLOR), + [displayAllApps] + ) return ( @@ -79,41 +87,25 @@ const Search = () => { ref={searchInputRef} style={styles.searchInput} placeholder='Search' - placeholderTextColor={displayAllApps ? PRIMARY_HEX_COLOR : SECONDARY_HEX_COLOR} + placeholderTextColor={placeholderTextColor} returnKeyType='search' autoCapitalize='words' onChangeText={onQueryChange} - onSubmitEditing={onSubmitEditing} /> - {searchQuery && searchQuery?.length > 0 && ( - - - - )} + {clearButton()} ) } const styles = StyleSheet.create({ wrapper: { - display: 'flex', + flex: 1, alignItems: 'center', flexDirection: 'row', - paddingHorizontal: 5, - flex: 1, }, searchInput: { flex: 1, color: '#000', - fontSize: 16, - }, - clearIconWrapper: { - padding: 5, }, }) diff --git a/src/components/Settings/AdvancedSettings.test.tsx b/src/components/Settings/AdvancedSettings.test.tsx deleted file mode 100644 index 9c39fff..0000000 --- a/src/components/Settings/AdvancedSettings.test.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import React from 'react' -import { fireEvent, screen } from '@testing-library/react-native' -import { initialStoreState } from '../../../utils/test/data' -import { renderWithProvider } from '../../../utils/test/utils' -import { FavoriteApp } from '../../models/favorite-app' -import { RecentAppDetails } from '../../models/recent-app' -import { PreferencesState } from '../../slices/preferences' -import { ToastAndroid } from 'react-native' -import AppsModule from '../../native-modules/AppsModule' -import AdvancedSettings from './AdvancedSettings' - -describe(' Tests', () => { - beforeEach(() => { - jest.spyOn(ToastAndroid, 'show') - }) - - afterEach(() => { - jest.resetAllMocks() - }) - - it('should render correctly and match snapshot', () => { - renderWithProvider() - - expect(screen.toJSON()).toMatchSnapshot() - expect(screen.getByTestId('advanced-settings-reload-all-apps-button')).toBeOnTheScreen() - expect(screen.getByTestId('advanced-settings-clear-recent-apps-button')).toBeOnTheScreen() - expect(screen.getByTestId('advanced-settings-clear-favorite-apps-button')).toBeOnTheScreen() - expect(screen.getByTestId('advanced-settings-reset-preferences-button')).toBeOnTheScreen() - }) - - // TODO: Find a way to mock internal dispatched action - it.todo('should call AppsModule method to get all applications and set apps list') - - it('should call AppsModule method to get all applications', () => { - renderWithProvider() - - const reloadAllAppsButton = screen.getByTestId('advanced-settings-reload-all-apps-button') - - expect(reloadAllAppsButton).toBeOnTheScreen() - - fireEvent.press(reloadAllAppsButton) - - expect(AppsModule.getApplications).toBeCalled() - }) - - it('should clear recent apps when button is pressed', () => { - const customInitialState = { - ...initialStoreState, - recentApps: { - list: [ - { - name: 'com.google.chrome', - label: 'Chrome', - icon: 'icon-base64-string-chrome', - }, - { - name: 'com.google.maps', - label: 'Maps', - icon: 'icon-base64-string-maps', - }, - ] as RecentAppDetails[], - }, - } - - const { store } = renderWithProvider(, { preloadedState: customInitialState }) - - const clearRecentAppsButton = screen.getByTestId('advanced-settings-clear-recent-apps-button') - - expect(clearRecentAppsButton).toBeOnTheScreen() - - fireEvent.press(clearRecentAppsButton) - - expect(store.getState().recentApps.list).toEqual([]) - expect(ToastAndroid.show).toBeCalledWith('Recent apps cleared successfully!', ToastAndroid.LONG) - }) - - it('should clear favorite apps when button is pressed', () => { - const customInitialState = { - ...initialStoreState, - favoriteApps: { - list: [ - { - name: 'com.google.chrome', - label: 'Chrome', - icon: 'icon-base64-string-chrome', - }, - { - name: 'com.google.maps', - label: 'Maps', - icon: 'icon-base64-string-maps', - }, - ] as FavoriteApp[], - }, - } - - const { store } = renderWithProvider(, { preloadedState: customInitialState }) - - const clearFavoriteAppsButton = screen.getByTestId('advanced-settings-clear-favorite-apps-button') - - expect(clearFavoriteAppsButton).toBeOnTheScreen() - - fireEvent.press(clearFavoriteAppsButton) - - expect(store.getState().favoriteApps.list).toEqual([]) - expect(ToastAndroid.show).toBeCalledWith('Favorite apps cleared successfully!', ToastAndroid.LONG) - }) - - it('should reset preferences apps when button is pressed', () => { - const customInitialState = { - ...initialStoreState, - preferences: { - displayRecentApps: false, - displayFavoriteApps: true, - } as PreferencesState, - } - - const { store } = renderWithProvider(, { preloadedState: customInitialState }) - - const resetPreferencesButton = screen.getByTestId('advanced-settings-reset-preferences-button') - - expect(resetPreferencesButton).toBeOnTheScreen() - - fireEvent.press(resetPreferencesButton) - - expect(store.getState().preferences).toEqual({ - displayRecentApps: true, - displayFavoriteApps: true, - }) - expect(ToastAndroid.show).toBeCalledWith('Settings reset successfully!', ToastAndroid.LONG) - }) -}) diff --git a/src/components/Settings/AdvancedSettings.tsx b/src/components/Settings/AdvancedSettings.tsx deleted file mode 100644 index 9f61c1e..0000000 --- a/src/components/Settings/AdvancedSettings.tsx +++ /dev/null @@ -1,120 +0,0 @@ -// React -import React from 'react' -// React Native -import { Pressable, PressableAndroidRippleConfig, StyleSheet, ToastAndroid, View } from 'react-native' -// Components -import SettingsItemLabel from './SettingsItemLabel' -// Redux -import { useDispatch } from 'react-redux' -import { setAppsList } from '../../slices/appsList' -import { clearRecentApps } from '../../slices/recentApps' -import { resetPreferences } from '../../slices/preferences' -import { clearFavoriteApps } from '../../slices/favoriteApps' -// Native modules -import AppsModule from '../../native-modules/AppsModule' -// Models -import { AppDetails } from '../../models/app-details' - -const settingItemButtonRippleConfig: PressableAndroidRippleConfig = { - borderless: false, - foreground: true, - color: '#e5e5e5', -} - -const AdvancedSettings = () => { - const dispatch = useDispatch() - - const reloadAllApps = () => { - AppsModule.getApplications((applications: string) => { - const apps = JSON.parse(applications) as AppDetails[] - - dispatch(setAppsList(apps)) - displayToast('All apps reloaded successfully!') - }) - } - - const onClearRecentApps = () => { - dispatch(clearRecentApps()) - displayToast('Recent apps cleared successfully!') - } - - const onClearFavoriteApps = () => { - dispatch(clearFavoriteApps()) - displayToast('Favorite apps cleared successfully!') - } - - const onResetPreferences = () => { - dispatch(resetPreferences()) - displayToast('Settings reset successfully!') - } - - const displayToast = (message: string, duration: number = ToastAndroid.LONG) => { - ToastAndroid.show(message, duration) - } - - return ( - <> - {/* Reload all apps */} - - - - - - - {/* Clear recent apps */} - - - - - - - {/* Clear favorite apps */} - - - - - - - {/* Reset preferences */} - - - - - - - ) -} - -const styles = StyleSheet.create({ - itemContainer: { - flexDirection: 'row', - justifyContent: 'space-between', - borderBottomWidth: 1, - borderBottomColor: '#e5e5e5', - }, - buttonItemPressable: { - flex: 1, - }, -}) - -export default AdvancedSettings diff --git a/src/components/Settings/SettingsBottomSheet.test.tsx b/src/components/Settings/SettingsBottomSheet.test.tsx index f7fecc5..237ccc7 100644 --- a/src/components/Settings/SettingsBottomSheet.test.tsx +++ b/src/components/Settings/SettingsBottomSheet.test.tsx @@ -1,9 +1,7 @@ import React from 'react' import { fireEvent, screen } from '@testing-library/react-native' -import { renderWithProvider, renderWithProviderAndContexts } from '../../../utils/test/utils' -import { CONTEXT_LAUNCHER_APP_ID, defaultGlobalContextValue, initialStoreState } from '../../../utils/test/data' -import { FavoriteApp } from '../../models/favorite-app' -import { GlobalContextType } from '../../models/context' +import { renderWithProvider } from '../../../utils/test/utils' +import { CONTEXT_LAUNCHER_APP_ID } from '../../../utils/test/data' import SettingsBottomSheet from './SettingsBottomSheet' import * as AppsModuleUtils from '../../utils/apps-module' @@ -21,10 +19,6 @@ describe(' Tests', () => { expect(screen.getByTestId('settings-bottom-sheet-header-wrapper')).toBeOnTheScreen() // Elements expect(screen.getByTestId('settings-bottom-sheet-header-app-info-button')).toBeOnTheScreen() - expect(screen.getByTestId('settings-bottom-display-recent-apps-switch')).toBeOnTheScreen() - expect(screen.getByTestId('settings-bottom-display-favorite-apps-switch')).toBeOnTheScreen() - expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).toBeOnTheScreen() - expect(screen.getByTestId('settings-bottom-toggle-advanced-settings-button')).toBeOnTheScreen() }) it('should call native module function to open app info when pressed', () => { @@ -39,201 +33,4 @@ describe(' Tests', () => { expect(AppsModuleUtils.showAppDetails).toBeCalledWith(CONTEXT_LAUNCHER_APP_ID) // TODO: Make sure 'settingsBottomSheetRef?.current?.dismiss()' is called }) - - it('should toggle display recent apps value in the store when pressed', () => { - const customInitialStoreState = { - ...initialStoreState, - preferences: { - ...initialStoreState.preferences, - displayRecentApps: false, - }, - } - - const { store } = renderWithProvider(, { preloadedState: customInitialStoreState }) - - const toggleRecentAppsSwitch = screen.getByTestId('settings-bottom-display-recent-apps-switch') - - expect(toggleRecentAppsSwitch).toBeOnTheScreen() - - fireEvent(toggleRecentAppsSwitch, 'valueChange') - - expect(store.getState().preferences.displayRecentApps).toEqual(true) - }) - - it('should toggle display favorite apps value in the store when pressed', () => { - const customInitialStoreState = { - ...initialStoreState, - preferences: { - ...initialStoreState.preferences, - displayFavoriteApps: false, - }, - } - - const { store } = renderWithProvider(, { preloadedState: customInitialStoreState }) - - const toggleFavoriteAppsSwitch = screen.getByTestId('settings-bottom-display-favorite-apps-switch') - - expect(toggleFavoriteAppsSwitch).toBeOnTheScreen() - - fireEvent(toggleFavoriteAppsSwitch, 'valueChange') - - expect(store.getState().preferences.displayFavoriteApps).toEqual(true) - }) - - describe('Sort favorite apps button tests', () => { - it('should render sort favorite apps button as disabled if favorite apps are <= 1', () => { - const customInitialStoreState = { - ...initialStoreState, - favoriteApps: { - list: [ - { - name: 'com.google.chrome', - label: 'Chrome', - icon: 'icon-base64-string-chrome', - }, - ] as FavoriteApp[], - }, - preferences: { - displayFavoriteApps: true, - displayRecentApps: false, - }, - } - - renderWithProvider(, { preloadedState: customInitialStoreState }) - - expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).toBeDisabled() - expect(screen.getByText(/Sort favorite apps/)).toBeOnTheScreen() - expect(screen.getByText(/Add more favorite apps to be able to sort/)).toBeOnTheScreen() - }) - - it('should render sort favorite apps button as disabled if display favorite apps value is false', () => { - const customInitialStoreState = { - ...initialStoreState, - favoriteApps: { - list: [ - { - name: 'com.google.chrome', - label: 'Chrome', - icon: 'icon-base64-string-chrome', - }, - { - name: 'com.google.maps', - label: 'Maps', - icon: 'icon-base64-string-maps', - }, - ] as FavoriteApp[], - }, - preferences: { - displayFavoriteApps: false, - displayRecentApps: false, - }, - } - - renderWithProvider(, { preloadedState: customInitialStoreState }) - - expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).toBeDisabled() - expect(screen.getByText(/Sort favorite apps/)).toBeOnTheScreen() - expect(screen.getByText(/Display favorite apps to be able to sort/)).toBeOnTheScreen() - }) - - it('should not render sort favorite apps button as disabled if favorite apps are > 1 and display favorite apps value is true', () => { - const customInitialStoreState = { - ...initialStoreState, - favoriteApps: { - list: [ - { - name: 'com.google.chrome', - label: 'Chrome', - icon: 'icon-base64-string-chrome', - }, - { - name: 'com.google.maps', - label: 'Maps', - icon: 'icon-base64-string-maps', - }, - ] as FavoriteApp[], - }, - preferences: { - displayFavoriteApps: true, - displayRecentApps: false, - }, - } - - renderWithProvider(, { preloadedState: customInitialStoreState }) - - expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).not.toBeDisabled() - expect(screen.getByText(/Sort favorite apps/)).toBeOnTheScreen() - expect(screen.getByText(/Click to start sorting your favorite apps/)).toBeOnTheScreen() - }) - - it('should dismiss keyboard when pressed and toggle sortable favorite apps view', () => { - const customInitialStoreState = { - ...initialStoreState, - favoriteApps: { - list: [ - { - name: 'com.google.chrome', - label: 'Chrome', - icon: 'icon-base64-string-chrome', - }, - { - name: 'com.google.maps', - label: 'Maps', - icon: 'icon-base64-string-maps', - }, - ] as FavoriteApp[], - }, - preferences: { - displayFavoriteApps: true, - displayRecentApps: false, - }, - } - - const dismissKeyboardFn = jest.fn() - const toggleSortableFavoriteAppsFn = jest.fn() - - const customGlobalContextValue: GlobalContextType = { - ...defaultGlobalContextValue, - dismissKeyboard: dismissKeyboardFn, - toggleSortableFavoriteApps: toggleSortableFavoriteAppsFn, - } - - renderWithProviderAndContexts(, { - preloadedState: customInitialStoreState, - globalContextValue: customGlobalContextValue, - }) - - const sortFavoriteAppsButton = screen.getByTestId('settings-bottom-sort-favorite-apps-button') - - expect(sortFavoriteAppsButton).not.toBeDisabled() - expect(screen.getByText(/Sort favorite apps/)).toBeOnTheScreen() - expect(screen.getByText(/Click to start sorting your favorite apps/)).toBeOnTheScreen() - - fireEvent.press(sortFavoriteAppsButton) - - expect(dismissKeyboardFn).toBeCalled() - expect(toggleSortableFavoriteAppsFn).toBeCalled() - }) - }) - - describe('Advanced settings wrapper tests', () => { - it('should not display advanced settings when not toggled - default view', () => { - renderWithProvider() - - expect(screen.getByTestId('settings-bottom-toggle-advanced-settings-button')).toBeOnTheScreen() - expect(screen.queryAllByTestId(/^advanced-settings/)).toHaveLength(0) - }) - - it('should display advanced settings when pressed', () => { - renderWithProvider() - - const toggleAdvancedSettingsButton = screen.getByTestId('settings-bottom-toggle-advanced-settings-button') - - expect(toggleAdvancedSettingsButton).toBeOnTheScreen() - - fireEvent.press(toggleAdvancedSettingsButton) - - expect(screen.queryAllByTestId(/^advanced-settings/)).toHaveLength(4) - }) - }) }) diff --git a/src/components/Settings/SettingsBottomSheet.tsx b/src/components/Settings/SettingsBottomSheet.tsx index a57437b..bd25243 100644 --- a/src/components/Settings/SettingsBottomSheet.tsx +++ b/src/components/Settings/SettingsBottomSheet.tsx @@ -1,175 +1,46 @@ // React -import React, { useContext, useMemo, useState } from 'react' +import React, { useContext } from 'react' // React Native -import { Pressable, PressableAndroidRippleConfig, StyleSheet, Switch, Text, View } from 'react-native' +import { StyleSheet, View } from 'react-native' // Components -import AdvancedSettings from './AdvancedSettings' -import SettingsItemLabel from './SettingsItemLabel' -// Redux -import { useDispatch, useSelector } from 'react-redux' -import { - displayFavoriteApps, - displayRecentApps, - selectDisplayFavoriteAppsMemoized, - selectDisplayRecentAppsMemoized, -} from '../../slices/preferences' -import { selectFavoriteAppsCountMemoized } from '../../slices/favoriteApps' +import SettingsHeader from './SettingsHeader' +import ToggleSettings from './shared/ToggleSettings' +import RecentAppsSettings from './sections/RecentAppsSettings' +import PinnedAppsSettings from './sections/PinnedAppsSettings' +import FavoriteAppsSettings from './sections/FavoriteAppsSettings' +import AdvancedSettings from './sections/AdvancedSettings' // Contexts import GlobalContext from '../../contexts/GlobalContext' // BottomSheet import { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet' -// Icon -import Icon from 'react-native-vector-icons/MaterialCommunityIcons' -// Utils -import { showAppDetails } from '../../utils/apps-module' -// Constants -import { - PRIMARY_HEX_COLOR, - CONTEXT_LAUNCHER_APP_ID, - CONTEXT_LAUNCHER_APP_VERSION, - CONTEXT_LAUNCHER_APP_BUILD_NUMBER, -} from '../../constants' - -const activeSwitch = PRIMARY_HEX_COLOR -const inActiveSwitch = '#f4f3f4' -const switchTrackColor = { false: '#e5e5e5', true: '#e5e5e5' } - -const appInfoIconRippleConfig: PressableAndroidRippleConfig = { - borderless: true, - foreground: true, - color: '#e5e5e5', - radius: 18, -} - -const settingItemButtonRippleConfig: PressableAndroidRippleConfig = { - borderless: false, - foreground: true, - color: '#e5e5e5', -} const SettingsBottomSheet = () => { - const dispatch = useDispatch() - const favoriteAppsCount = useSelector(selectFavoriteAppsCountMemoized) - const displayRecentAppsValue = useSelector(selectDisplayRecentAppsMemoized) - const displayFavoriteAppsValue = useSelector(selectDisplayFavoriteAppsMemoized) - const { dismissKeyboard, settingsBottomSheetRef, toggleSortableFavoriteApps } = useContext(GlobalContext) - const [displayAdvancedSettings, setDisplayAdvancedSettings] = useState(false) - - const toggleDisplayRecentApps = () => { - dispatch(displayRecentApps(!displayRecentAppsValue)) - } - - const toggleDisplayFavoriteApps = () => { - dispatch(displayFavoriteApps(!displayFavoriteAppsValue)) - } - - const onFavoriteAppsSortViewClick = () => { - dismissKeyboard() - toggleSortableFavoriteApps() - } - - const onAppInfoClick = () => { - showAppDetails(CONTEXT_LAUNCHER_APP_ID) - settingsBottomSheetRef?.current?.dismiss() - } - - const favoriteAppsSortDisabled = useMemo( - () => favoriteAppsCount <= 1 || !displayFavoriteAppsValue, - [favoriteAppsCount, displayFavoriteAppsValue] - ) - - const toggleAdvancedSettings = (value: boolean = !displayAdvancedSettings) => { - setDisplayAdvancedSettings(value) - } + const { settingsBottomSheetRef } = useContext(GlobalContext) return ( toggleAdvancedSettings(false)} ref={settingsBottomSheetRef} - snapPoints={['25%', '50%', '75%', '90%']} + snapPoints={['25%', '50%', '75%', '95%']} style={styles.bottomSheetModal}> - {/* Settings wrapper */} - {/* Header wrapper */} - - - Context Settings - -   v{CONTEXT_LAUNCHER_APP_VERSION} ({CONTEXT_LAUNCHER_APP_BUILD_NUMBER}) - - - - - - + - {/* Settings */} - {/* Recent apps switch */} - - - - - {/* Favorite apps switch */} - - - - - {/* Sort favorite apps */} - - - - - - {/* Advanced settings wrapper */} - <> - {/* Toggle advanced settings */} - - toggleAdvancedSettings()} - android_disableSound={true} - android_ripple={settingItemButtonRippleConfig} - style={styles.buttonItemPressable}> - - - - + + + - {/* Advanced settings */} - {displayAdvancedSettings && } - + + + + + + + + + + + @@ -177,38 +48,11 @@ const SettingsBottomSheet = () => { } const styles = StyleSheet.create({ - settingsWrapper: { - paddingHorizontal: 10, - }, - itemContainer: { - flexDirection: 'row', - justifyContent: 'space-between', - borderBottomWidth: 1, - borderBottomColor: '#e5e5e5', - }, - buttonItemPressable: { - flex: 1, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - }, - headerWrapper: { - paddingBottom: 20, - alignItems: 'center', - flexDirection: 'row', - justifyContent: 'space-between', - }, - headerTitle: { - fontSize: 20, - color: '#808080', - fontWeight: '400', - }, bottomSheetModal: { marginHorizontal: 5, }, - appInfoText: { - color: '#ccc', - fontSize: 12, + settingsWrapper: { + paddingHorizontal: 10, }, }) diff --git a/src/components/Settings/SettingsHeader.tsx b/src/components/Settings/SettingsHeader.tsx new file mode 100644 index 0000000..fb0c999 --- /dev/null +++ b/src/components/Settings/SettingsHeader.tsx @@ -0,0 +1,70 @@ +// React +import React, { useContext } from 'react' +// React Native +import { View, Text, Pressable, StyleSheet, PressableAndroidRippleConfig } from 'react-native' +// Components +import CustomIcon from '../shared/CustomIcon' +// Contexts +import GlobalContext from '../../contexts/GlobalContext' +// Utils +import { showAppDetails } from '../../utils/apps-module' +// Constants +import { + CONTEXT_LAUNCHER_APP_VERSION, + CONTEXT_LAUNCHER_APP_BUILD_NUMBER, + CONTEXT_LAUNCHER_APP_ID, +} from '../../constants' + +const appInfoIconRippleConfig: PressableAndroidRippleConfig = { + borderless: true, + foreground: true, + color: '#e5e5e5', + radius: 18, +} + +const SettingsHeader = () => { + const { settingsBottomSheetRef } = useContext(GlobalContext) + + const onAppInfoClick = () => { + showAppDetails(CONTEXT_LAUNCHER_APP_ID) + settingsBottomSheetRef?.current?.dismiss() + } + + return ( + + + Context Settings + +   v{CONTEXT_LAUNCHER_APP_VERSION} ({CONTEXT_LAUNCHER_APP_BUILD_NUMBER}) + + + + + + + ) +} + +const styles = StyleSheet.create({ + wrapper: { + paddingBottom: 20, + alignItems: 'center', + flexDirection: 'row', + justifyContent: 'space-between', + }, + title: { + fontSize: 20, + color: '#808080', + fontWeight: '400', + }, + appInfoText: { + color: '#ccc', + fontSize: 12, + }, +}) + +export default SettingsHeader diff --git a/src/components/Settings/SettingsIcon.tsx b/src/components/Settings/SettingsIcon.tsx index 074996f..853b15b 100644 --- a/src/components/Settings/SettingsIcon.tsx +++ b/src/components/Settings/SettingsIcon.tsx @@ -1,45 +1,25 @@ // React import React, { useContext } from 'react' // React Native -import { Pressable, PressableAndroidRippleConfig, StyleSheet, View } from 'react-native' +import { Pressable, View } from 'react-native' +// Components +import CustomIcon from '../shared/CustomIcon' // Contexts import GlobalContext from '../../contexts/GlobalContext' -// Icons -import Icon from 'react-native-vector-icons/MaterialCommunityIcons' // Constants -import { PRIMARY_HEX_COLOR, SECONDARY_HEX_COLOR } from '../../constants' - -const rippleConfig: PressableAndroidRippleConfig = { - color: SECONDARY_HEX_COLOR, - borderless: true, - foreground: true, - radius: 20, -} +import { PRIMARY_COLOR } from '../../constants' +import { iconsStyle, iconsPressableConfig } from '../../shared/bottom-container' const SettingsIcon = () => { const { displaySettingsBottomSheet } = useContext(GlobalContext) return ( - - - + + + ) } -const styles = StyleSheet.create({ - wrapper: { - alignItems: 'center', - flexDirection: 'row', - }, - icon: { - margin: 5, - }, -}) - export default SettingsIcon diff --git a/src/components/Settings/__snapshots__/AdvancedSettings.test.tsx.snap b/src/components/Settings/__snapshots__/AdvancedSettings.test.tsx.snap deleted file mode 100644 index 3963721..0000000 --- a/src/components/Settings/__snapshots__/AdvancedSettings.test.tsx.snap +++ /dev/null @@ -1,278 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` Tests should render correctly and match snapshot 1`] = ` -[ - - - - - Reload all apps - - - - , - - - - - Clear recent apps - - - - , - - - - - Clear favorite apps - - - - , - - - - - Reset settings - - - - , -] -`; diff --git a/src/components/Settings/__snapshots__/SettingsBottomSheet.test.tsx.snap b/src/components/Settings/__snapshots__/SettingsBottomSheet.test.tsx.snap index 50afb1e..19b0e19 100644 --- a/src/components/Settings/__snapshots__/SettingsBottomSheet.test.tsx.snap +++ b/src/components/Settings/__snapshots__/SettingsBottomSheet.test.tsx.snap @@ -3,13 +3,12 @@ exports[` Tests should render correctly and match snapshot 1`] = ` Tests should render correctly and match snapsho - + + Recent Apps + + + - Display recent apps + 󰅀 - - + + Pinned Apps + + + - Display favorite apps + 󰅀 - @@ -226,7 +312,7 @@ exports[` Tests should render correctly and match snapsho { "busy": undefined, "checked": undefined, - "disabled": true, + "disabled": undefined, "expanded": undefined, "selected": undefined, } @@ -252,57 +338,64 @@ exports[` Tests should render correctly and match snapsho onResponderTerminationRequest={[Function]} onStartShouldSetResponder={[Function]} style={ - [ - { - "alignItems": "center", - "flex": 1, - "flexDirection": "row", - "justifyContent": "space-between", - }, - { - "opacity": 0.5, - }, - ] + { + "alignItems": "center", + "flexDirection": "row", + "justifyContent": "space-between", + } } - testID="settings-bottom-sort-favorite-apps-button" + testID="settings-bottom-toggle-advanced-settings-button" > - Sort favorite apps - - - Display favorite apps to be able to sort + Favorite Apps + + 󰅀 + @@ -339,7 +432,6 @@ exports[` Tests should render correctly and match snapsho style={ { "alignItems": "center", - "flex": 1, "flexDirection": "row", "justifyContent": "space-between", } @@ -348,21 +440,25 @@ exports[` Tests should render correctly and match snapsho > - Toggle advanced settings + Advanced Settings Tests', () => { + beforeEach(() => { + jest.spyOn(ToastAndroid, 'show') + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should render correctly and match snapshot', () => { + renderWithProvider() + + expect(screen.toJSON()).toMatchSnapshot() + expect(screen.getByTestId('advanced-settings-reload-all-apps-button')).toBeOnTheScreen() + expect(screen.getByTestId('advanced-settings-reset-preferences-button')).toBeOnTheScreen() + }) + + // TODO: Find a way to mock internal dispatched action + it.todo('should call AppsModule method to get all applications and set apps list') + + it('should call AppsModule method to get all applications', () => { + renderWithProvider() + + const reloadAllAppsButton = screen.getByTestId('advanced-settings-reload-all-apps-button') + + expect(reloadAllAppsButton).toBeOnTheScreen() + + fireEvent.press(reloadAllAppsButton) + + expect(AppsModule.getApplications).toBeCalled() + }) + + it('should reset preferences apps when button is pressed', () => { + const customInitialState = { + ...initialStoreState, + preferences: { + displayRecentApps: false, + displayFavoriteApps: true, + displayPinnedApps: false, + displayTemporaryPinnedApps: true, + } as PreferencesState, + } + + const { store } = renderWithProvider(, { preloadedState: customInitialState }) + + const resetPreferencesButton = screen.getByTestId('advanced-settings-reset-preferences-button') + + expect(resetPreferencesButton).toBeOnTheScreen() + + fireEvent.press(resetPreferencesButton) + + expect(store.getState().preferences).toEqual({ + displayRecentApps: false, + displayFavoriteApps: true, + displayPinnedApps: false, + displayTemporaryPinnedApps: true, + }) + expect(ToastAndroid.show).toBeCalledWith('Settings reset successfully!', ToastAndroid.LONG) + }) +}) diff --git a/src/components/Settings/sections/AdvancedSettings.tsx b/src/components/Settings/sections/AdvancedSettings.tsx new file mode 100644 index 0000000..5100ab8 --- /dev/null +++ b/src/components/Settings/sections/AdvancedSettings.tsx @@ -0,0 +1,64 @@ +// React +import React from 'react' +// React Native +import { Pressable, View } from 'react-native' +// Components +import SettingsItemLabel from '../shared/SettingsItemLabel' +// Redux +import { useDispatch } from 'react-redux' +import { setAppsList } from '../../../slices/appsList' +import { resetPreferences } from '../../../slices/preferences' +// Native modules +import AppsModule from '../../../native-modules/AppsModule' +// Utils +import { displayToast } from '../../../utils/toast' +// Models +import { AppDetails } from '../../../models/app-details' +// Constants +import { settingItemButtonRippleConfig, settingItemWrapperStyle, settingsPressableItemStyle } from '../shared/values' + +const AdvancedSettings = () => { + const dispatch = useDispatch() + + const reloadAllApps = () => { + AppsModule.getApplications((applications: string) => { + const apps = JSON.parse(applications) as AppDetails[] + + dispatch(setAppsList(apps)) + displayToast('All apps reloaded successfully!') + }) + } + + const onResetPreferences = () => { + dispatch(resetPreferences()) + displayToast('Settings reset successfully!') + } + + return ( + <> + + + + + + + + + + + + + ) +} + +export default AdvancedSettings diff --git a/src/components/Settings/sections/FavoriteAppsSettings.test.tsx b/src/components/Settings/sections/FavoriteAppsSettings.test.tsx new file mode 100644 index 0000000..0e2e713 --- /dev/null +++ b/src/components/Settings/sections/FavoriteAppsSettings.test.tsx @@ -0,0 +1,223 @@ +import React from 'react' +import { fireEvent, screen } from '@testing-library/react-native' +import { defaultGlobalContextValue, initialStoreState } from '../../../../utils/test/data' +import { renderWithProvider, renderWithProviderAndContexts } from '../../../../utils/test/utils' +import { ToastAndroid } from 'react-native' +import { FavoriteApp } from '../../../models/favorite-app' +import FavoriteAppsSettings from './FavoriteAppsSettings' +import { GlobalContextType } from '../../../models/context' +import { PreferencesState } from '../../../slices/preferences' + +describe(' Tests', () => { + beforeEach(() => { + jest.spyOn(ToastAndroid, 'show') + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should render correctly and match snapshot', () => { + renderWithProvider() + + expect(screen.toJSON()).toMatchSnapshot() + expect(screen.getByTestId('settings-bottom-display-favorite-apps-switch')).toBeOnTheScreen() + expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).toBeOnTheScreen() + expect(screen.getByTestId('advanced-settings-clear-favorite-apps-button')).toBeOnTheScreen() + }) + + it('should clear favorite apps when button is pressed', () => { + const customInitialState = { + ...initialStoreState, + favoriteApps: { + list: [ + { + name: 'com.google.chrome', + label: 'Chrome', + icon: 'icon-base64-string-chrome', + }, + { + name: 'com.google.maps', + label: 'Maps', + icon: 'icon-base64-string-maps', + }, + ] as FavoriteApp[], + }, + } + + const { store } = renderWithProvider(, { preloadedState: customInitialState }) + + const clearFavoriteAppsButton = screen.getByTestId('advanced-settings-clear-favorite-apps-button') + + expect(clearFavoriteAppsButton).toBeOnTheScreen() + + fireEvent.press(clearFavoriteAppsButton) + + expect(store.getState().favoriteApps.list).toEqual([]) + expect(ToastAndroid.show).toBeCalledWith('Favorite apps cleared successfully!', ToastAndroid.LONG) + }) + + describe('Sort favorite apps button tests', () => { + it('should render sort favorite apps button as disabled if favorite apps are <= 1', () => { + const customInitialStoreState = { + ...initialStoreState, + favoriteApps: { + list: [ + { + name: 'com.google.chrome', + label: 'Chrome', + icon: 'icon-base64-string-chrome', + }, + ] as FavoriteApp[], + }, + preferences: { + displayRecentApps: false, + displayFavoriteApps: true, + displayPinnedApps: false, + displayTemporaryPinnedApps: true, + } as PreferencesState, + } + + renderWithProvider(, { preloadedState: customInitialStoreState }) + + expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).toBeDisabled() + expect(screen.getByText(/Sort/)).toBeOnTheScreen() + expect(screen.getByText(/Add more apps to be able to sort/)).toBeOnTheScreen() + }) + + it('should render sort favorite apps button as disabled if display favorite apps value is false', () => { + const customInitialStoreState = { + ...initialStoreState, + favoriteApps: { + list: [ + { + name: 'com.google.chrome', + label: 'Chrome', + icon: 'icon-base64-string-chrome', + }, + { + name: 'com.google.maps', + label: 'Maps', + icon: 'icon-base64-string-maps', + }, + ] as FavoriteApp[], + }, + preferences: { + displayFavoriteApps: false, + displayRecentApps: false, + displayPinnedApps: false, + displayTemporaryPinnedApps: true, + } as PreferencesState, + } + + renderWithProvider(, { preloadedState: customInitialStoreState }) + + expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).toBeDisabled() + expect(screen.getByText(/Sort/)).toBeOnTheScreen() + expect(screen.getByText(/Display favorite apps to be able to sort/)).toBeOnTheScreen() + }) + + it('should not render sort favorite apps button as disabled if favorite apps are > 1 and display favorite apps value is true', () => { + const customInitialStoreState = { + ...initialStoreState, + favoriteApps: { + list: [ + { + name: 'com.google.chrome', + label: 'Chrome', + icon: 'icon-base64-string-chrome', + }, + { + name: 'com.google.maps', + label: 'Maps', + icon: 'icon-base64-string-maps', + }, + ] as FavoriteApp[], + }, + preferences: { + displayFavoriteApps: true, + displayRecentApps: false, + displayPinnedApps: false, + displayTemporaryPinnedApps: true, + } as PreferencesState, + } + + renderWithProvider(, { preloadedState: customInitialStoreState }) + + expect(screen.getByTestId('settings-bottom-sort-favorite-apps-button')).not.toBeDisabled() + expect(screen.getByText(/Sort/)).toBeOnTheScreen() + expect(screen.getByText(/Click to start sorting/)).toBeOnTheScreen() + }) + + it('should dismiss keyboard when pressed and toggle sortable favorite apps view', () => { + const customInitialStoreState = { + ...initialStoreState, + favoriteApps: { + list: [ + { + name: 'com.google.chrome', + label: 'Chrome', + icon: 'icon-base64-string-chrome', + }, + { + name: 'com.google.maps', + label: 'Maps', + icon: 'icon-base64-string-maps', + }, + ] as FavoriteApp[], + }, + preferences: { + displayFavoriteApps: true, + displayRecentApps: false, + displayPinnedApps: false, + displayTemporaryPinnedApps: true, + } as PreferencesState, + } + + const dismissKeyboardFn = jest.fn() + const toggleSortableFavoriteAppsFn = jest.fn() + + const customGlobalContextValue: GlobalContextType = { + ...defaultGlobalContextValue, + dismissKeyboard: dismissKeyboardFn, + toggleSortableFavoriteApps: toggleSortableFavoriteAppsFn, + } + + renderWithProviderAndContexts(, { + preloadedState: customInitialStoreState, + globalContextValue: customGlobalContextValue, + }) + + const sortFavoriteAppsButton = screen.getByTestId('settings-bottom-sort-favorite-apps-button') + + expect(sortFavoriteAppsButton).not.toBeDisabled() + expect(screen.getByText(/Sort/)).toBeOnTheScreen() + expect(screen.getByText(/Click to start sorting/)).toBeOnTheScreen() + + fireEvent.press(sortFavoriteAppsButton) + + expect(dismissKeyboardFn).toBeCalled() + expect(toggleSortableFavoriteAppsFn).toBeCalled() + }) + }) + + it('should toggle display favorite apps value in the store when pressed', () => { + const customInitialStoreState = { + ...initialStoreState, + preferences: { + ...initialStoreState.preferences, + displayFavoriteApps: false, + }, + } + + const { store } = renderWithProvider(, { preloadedState: customInitialStoreState }) + + const toggleFavoriteAppsSwitch = screen.getByTestId('settings-bottom-display-favorite-apps-switch') + + expect(toggleFavoriteAppsSwitch).toBeOnTheScreen() + + fireEvent(toggleFavoriteAppsSwitch, 'valueChange') + + expect(store.getState().preferences.displayFavoriteApps).toEqual(true) + }) +}) diff --git a/src/components/Settings/sections/FavoriteAppsSettings.tsx b/src/components/Settings/sections/FavoriteAppsSettings.tsx new file mode 100644 index 0000000..7711f72 --- /dev/null +++ b/src/components/Settings/sections/FavoriteAppsSettings.tsx @@ -0,0 +1,98 @@ +// React +import React, { useContext, useMemo } from 'react' +// React Native +import { Pressable, Switch, View } from 'react-native' +// Components +import SettingsItemLabel from '../shared/SettingsItemLabel' +// Redux +import { useDispatch, useSelector } from 'react-redux' +import { clearFavoriteApps, selectFavoriteAppsCountMemoized } from '../../../slices/favoriteApps' +import { selectDisplayFavoriteAppsMemoized, displayFavoriteApps } from '../../../slices/preferences' +// Contexts +import GlobalContext from '../../../contexts/GlobalContext' +// Utils +import { displayToast } from '../../../utils/toast' +// Constants +import { + switchTrackColor, + activeSwitch, + inActiveSwitch, + settingItemButtonRippleConfig, + settingsPressableItemStyle, + settingItemWrapperStyle, +} from '../shared/values' + +const FavoriteAppsSettings = () => { + const dispatch = useDispatch() + const favoriteAppsCount = useSelector(selectFavoriteAppsCountMemoized) + const displayFavoriteAppsValue = useSelector(selectDisplayFavoriteAppsMemoized) + const { dismissKeyboard, toggleSortableFavoriteApps } = useContext(GlobalContext) + + const toggleDisplayFavoriteApps = () => { + dispatch(displayFavoriteApps(!displayFavoriteAppsValue)) + } + + const onFavoriteAppsSortViewClick = () => { + dismissKeyboard() + toggleSortableFavoriteApps() + } + + const onClearFavoriteApps = () => { + dispatch(clearFavoriteApps()) + displayToast('Favorite apps cleared successfully!') + } + + const favoriteAppsSortDisabled = useMemo( + () => favoriteAppsCount <= 1 || !displayFavoriteAppsValue, + [favoriteAppsCount, displayFavoriteAppsValue] + ) + + return ( + <> + + + + + + + + + + + + + + + + + + ) +} + +export default FavoriteAppsSettings diff --git a/src/components/Settings/sections/PinnedAppsSettings.tsx b/src/components/Settings/sections/PinnedAppsSettings.tsx new file mode 100644 index 0000000..cd6df40 --- /dev/null +++ b/src/components/Settings/sections/PinnedAppsSettings.tsx @@ -0,0 +1,170 @@ +// React +import React from 'react' +// React Native +import { Pressable, StyleSheet, Switch, Text, View } from 'react-native' +// Components +import SettingsItemLabel from '../shared/SettingsItemLabel' +// Redux +import { useDispatch, useSelector } from 'react-redux' +import { + clearPinnedApps, + selectTemporaryPinnedAppsConfigMemoized, + setTemporaryAppsConfig, +} from '../../../slices/pinnedApps' +import { + selectDisplayPinnedAppsMemoized, + selectDisplayTemporaryPinnedAppsMemoized, + displayPinnedApps, + displayTemporaryPinnedApps, +} from '../../../slices/preferences' +// Utils +import { displayToast } from '../../../utils/toast' +import { getDateFromStringWithCurrentDateValue, getTimeFromDate, stripDateFromSeconds } from '../../../utils/date' +// Contsants +import { + activeSwitch, + inActiveSwitch, + settingItemButtonRippleConfig, + settingItemWrapperStyle, + settingsPressableItemStyle, + switchTrackColor, +} from '../shared/values' +// TimePicker +import { DateTimePickerAndroid, DateTimePickerEvent } from '@react-native-community/datetimepicker' + +const PinnedAppsSettings = () => { + const dispatch = useDispatch() + const displayPinnedAppsValue = useSelector(selectDisplayPinnedAppsMemoized) + const displayTemporaryPinnedAppsValue = useSelector(selectDisplayTemporaryPinnedAppsMemoized) + const temporaryPinnedAppsConfig = useSelector(selectTemporaryPinnedAppsConfigMemoized) + + const toggleDisplayPinnedApps = () => { + dispatch(displayPinnedApps(!displayPinnedAppsValue)) + } + + const toggleDisplayTemporaryPinnedApps = () => { + dispatch(displayTemporaryPinnedApps(!displayTemporaryPinnedAppsValue)) + } + + const onClearPinnedApps = () => { + dispatch(clearPinnedApps()) + displayToast('All pinned apps cleared successfully!') + } + + const showTimePicker = (forStartDate: boolean) => { + DateTimePickerAndroid.open({ + mode: 'time', + is24Hour: true, + value: forStartDate + ? temporaryPinnedAppsConfig.startDate + ? getDateFromStringWithCurrentDateValue(temporaryPinnedAppsConfig.startDate)! + : new Date() + : temporaryPinnedAppsConfig.endDate + ? getDateFromStringWithCurrentDateValue(temporaryPinnedAppsConfig.endDate)! + : new Date(), + onChange: forStartDate ? setTemporaryPinnedAppsStartDate : setTemporaryPinnedAppsEndDate, + }) + } + + const setTemporaryPinnedAppsStartDate = (event: DateTimePickerEvent, date?: Date) => { + if (event.type != 'set' || !date) return + + dispatch( + setTemporaryAppsConfig({ + ...temporaryPinnedAppsConfig, + startDate: stripDateFromSeconds(date).toString(), + }) + ) + } + + const setTemporaryPinnedAppsEndDate = (event: DateTimePickerEvent, date?: Date) => { + if (event.type != 'set' || !date) return + + dispatch( + setTemporaryAppsConfig({ + ...temporaryPinnedAppsConfig, + endDate: stripDateFromSeconds(date).toString(), + }) + ) + } + + return ( + <> + + + + + + + + + + + + + + showTimePicker(true)} + android_disableSound={true} + android_ripple={settingItemButtonRippleConfig} + style={styles.pinnedAppsTimePicker}> + + Start time is {getTimeFromDate(temporaryPinnedAppsConfig?.startDate)} + + + showTimePicker(false)} + android_disableSound={true} + android_ripple={settingItemButtonRippleConfig} + style={styles.pinnedAppsTimePicker}> + + End time is {getTimeFromDate(temporaryPinnedAppsConfig?.endDate)} + + + + + + + + + + + + ) +} + +const styles = StyleSheet.create({ + pinnedAppsItemContainer: { + flexDirection: 'column', + }, + pinnedAppsTimePickersWrapper: { + flexDirection: 'row', + justifyContent: 'space-around', + }, + pinnedAppsTimePicker: { + justifyContent: 'center', + padding: 5, + }, + pinnedAppsTimePickerLabel: { + color: '#808080', + }, +}) + +export default PinnedAppsSettings diff --git a/src/components/Settings/sections/RecentAppsSettings.test.tsx b/src/components/Settings/sections/RecentAppsSettings.test.tsx new file mode 100644 index 0000000..802edd6 --- /dev/null +++ b/src/components/Settings/sections/RecentAppsSettings.test.tsx @@ -0,0 +1,76 @@ +import React from 'react' +import { fireEvent, screen } from '@testing-library/react-native' +import { initialStoreState } from '../../../../utils/test/data' +import { renderWithProvider } from '../../../../utils/test/utils' +import { ToastAndroid } from 'react-native' +import { RecentAppDetails } from '../../../models/recent-app' +import RecentAppsSettings from './RecentAppsSettings' + +describe(' Tests', () => { + beforeEach(() => { + jest.spyOn(ToastAndroid, 'show') + }) + + afterEach(() => { + jest.resetAllMocks() + }) + + it('should render correctly and match snapshot', () => { + renderWithProvider() + + expect(screen.toJSON()).toMatchSnapshot() + expect(screen.getByTestId('settings-bottom-display-recent-apps-switch')).toBeOnTheScreen() + expect(screen.getByTestId('advanced-settings-clear-recent-apps-button')).toBeOnTheScreen() + }) + + it('should clear recent apps when button is pressed', () => { + const customInitialState = { + ...initialStoreState, + recentApps: { + list: [ + { + name: 'com.google.chrome', + label: 'Chrome', + icon: 'icon-base64-string-chrome', + }, + { + name: 'com.google.maps', + label: 'Maps', + icon: 'icon-base64-string-maps', + }, + ] as RecentAppDetails[], + }, + } + + const { store } = renderWithProvider(, { preloadedState: customInitialState }) + + const clearRecentAppsButton = screen.getByTestId('advanced-settings-clear-recent-apps-button') + + expect(clearRecentAppsButton).toBeOnTheScreen() + + fireEvent.press(clearRecentAppsButton) + + expect(store.getState().recentApps.list).toEqual([]) + expect(ToastAndroid.show).toBeCalledWith('Recent apps cleared successfully!', ToastAndroid.LONG) + }) + + it('should toggle display recent apps value in the store when pressed', () => { + const customInitialStoreState = { + ...initialStoreState, + preferences: { + ...initialStoreState.preferences, + displayRecentApps: false, + }, + } + + const { store } = renderWithProvider(, { preloadedState: customInitialStoreState }) + + const toggleRecentAppsSwitch = screen.getByTestId('settings-bottom-display-recent-apps-switch') + + expect(toggleRecentAppsSwitch).toBeOnTheScreen() + + fireEvent(toggleRecentAppsSwitch, 'valueChange') + + expect(store.getState().preferences.displayRecentApps).toEqual(true) + }) +}) diff --git a/src/components/Settings/sections/RecentAppsSettings.tsx b/src/components/Settings/sections/RecentAppsSettings.tsx new file mode 100644 index 0000000..f74f648 --- /dev/null +++ b/src/components/Settings/sections/RecentAppsSettings.tsx @@ -0,0 +1,63 @@ +// React +import React from 'react' +// React Native +import { Pressable, Switch, View } from 'react-native' +// Components +import SettingsItemLabel from '../shared/SettingsItemLabel' +// Redux +import { useDispatch, useSelector } from 'react-redux' +import { clearRecentApps } from '../../../slices/recentApps' +import { selectDisplayRecentAppsMemoized, displayRecentApps } from '../../../slices/preferences' +// Utils +import { displayToast } from '../../../utils/toast' +// Constants +import { + switchTrackColor, + activeSwitch, + inActiveSwitch, + settingItemButtonRippleConfig, + settingsPressableItemStyle, + settingItemWrapperStyle, +} from '../shared/values' + +const RecentAppsSettings = () => { + const dispatch = useDispatch() + const displayRecentAppsValue = useSelector(selectDisplayRecentAppsMemoized) + + const toggleDisplayRecentApps = () => { + dispatch(displayRecentApps(!displayRecentAppsValue)) + } + + const onClearRecentApps = () => { + dispatch(clearRecentApps()) + displayToast('Recent apps cleared successfully!') + } + + return ( + <> + + + + + + + + + + + + ) +} + +export default RecentAppsSettings diff --git a/src/components/Settings/sections/__snapshots__/AdvancedSettings.test.tsx.snap b/src/components/Settings/sections/__snapshots__/AdvancedSettings.test.tsx.snap new file mode 100644 index 0000000..1e9c3c4 --- /dev/null +++ b/src/components/Settings/sections/__snapshots__/AdvancedSettings.test.tsx.snap @@ -0,0 +1,152 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` Tests should render correctly and match snapshot 1`] = ` +[ + + + + + Reload all apps + + + + , + + + + + Reset settings + + + + , +] +`; diff --git a/src/components/Settings/sections/__snapshots__/FavoriteAppsSettings.test.tsx.snap b/src/components/Settings/sections/__snapshots__/FavoriteAppsSettings.test.tsx.snap new file mode 100644 index 0000000..d327350 --- /dev/null +++ b/src/components/Settings/sections/__snapshots__/FavoriteAppsSettings.test.tsx.snap @@ -0,0 +1,215 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` Tests should render correctly and match snapshot 1`] = ` +[ + + + + Display + + + + , + + + + + Sort + + + Add more apps to be able to sort + + + + , + + + + + Clear + + + + , +] +`; diff --git a/src/components/Settings/sections/__snapshots__/RecentAppsSettings.test.tsx.snap b/src/components/Settings/sections/__snapshots__/RecentAppsSettings.test.tsx.snap new file mode 100644 index 0000000..2c25afe --- /dev/null +++ b/src/components/Settings/sections/__snapshots__/RecentAppsSettings.test.tsx.snap @@ -0,0 +1,128 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` Tests should render correctly and match snapshot 1`] = ` +[ + + + + Display + + + + , + + + + + Clear + + + + , +] +`; diff --git a/src/components/Settings/SettingsItemLabel.test.tsx b/src/components/Settings/shared/SettingsItemLabel.test.tsx similarity index 79% rename from src/components/Settings/SettingsItemLabel.test.tsx rename to src/components/Settings/shared/SettingsItemLabel.test.tsx index 73c8b56..50fe03b 100644 --- a/src/components/Settings/SettingsItemLabel.test.tsx +++ b/src/components/Settings/shared/SettingsItemLabel.test.tsx @@ -1,8 +1,8 @@ import React from 'react' import { screen } from '@testing-library/react-native' -import { renderWithProvider } from '../../../utils/test/utils' -import { SettingsItemLabelProps } from '../../models/props' -import SettingsItemLabel from './SettingsItemLabel' +import { renderWithProvider } from '../../../../utils/test/utils' +import { SettingsItemLabelProps } from '../../../models/props' +import SettingsItemLabel from '../shared/SettingsItemLabel' describe(' Tests', () => { const requiredProps: SettingsItemLabelProps = { diff --git a/src/components/Settings/SettingsItemLabel.tsx b/src/components/Settings/shared/SettingsItemLabel.tsx similarity index 59% rename from src/components/Settings/SettingsItemLabel.tsx rename to src/components/Settings/shared/SettingsItemLabel.tsx index a5544e2..e40b264 100644 --- a/src/components/Settings/SettingsItemLabel.tsx +++ b/src/components/Settings/shared/SettingsItemLabel.tsx @@ -3,12 +3,12 @@ import React from 'react' // React Native import { StyleSheet, Text, View } from 'react-native' // Models -import { SettingsItemLabelProps as Props } from '../../models/props' +import { SettingsItemLabelProps as Props } from '../../../models/props' -const SettingsItemLabel = ({ title, description }: Props) => { +const SettingsItemLabel = ({ title, description, titleStyle, wrapperStyle }: Props) => { return ( - - {title} + + {title} {description && {description}} ) @@ -17,8 +17,6 @@ const SettingsItemLabel = ({ title, description }: Props) => { const styles = StyleSheet.create({ wrapper: { padding: 10, - flexDirection: 'column', - justifyContent: 'center', }, label: { color: '#808080', diff --git a/src/components/Settings/shared/ToggleSettings.tsx b/src/components/Settings/shared/ToggleSettings.tsx new file mode 100644 index 0000000..266afb3 --- /dev/null +++ b/src/components/Settings/shared/ToggleSettings.tsx @@ -0,0 +1,56 @@ +// React +import React, { useState } from 'react' +// React Native +import { Pressable, StyleSheet, View } from 'react-native' +// Components +import SettingsItemLabel from './SettingsItemLabel' +import CustomIcon from '../../shared/CustomIcon' +// Constants +import { settingItemButtonRippleConfig } from './values' +// Models +import { ToggleSettingsProps as Props } from '../../../models/props' + +const ToggleSettings = ({ title, description, children }: Props) => { + const [renderSettings, setRenderSettings] = useState(false) + + return ( + <> + + setRenderSettings(!renderSettings)} + android_disableSound={true} + android_ripple={settingItemButtonRippleConfig} + style={styles.pressable}> + + + + + + {renderSettings && children} + + ) +} + +const styles = StyleSheet.create({ + wrapper: { + borderRadius: 5, + }, + activeWrapper: { + backgroundColor: '#ececec', + }, + pressable: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, + activeTitle: { + fontWeight: 'bold', + }, +}) + +export default ToggleSettings diff --git a/src/components/Settings/__snapshots__/SettingsItemLabel.test.tsx.snap b/src/components/Settings/shared/__snapshots__/SettingsItemLabel.test.tsx.snap similarity index 66% rename from src/components/Settings/__snapshots__/SettingsItemLabel.test.tsx.snap rename to src/components/Settings/shared/__snapshots__/SettingsItemLabel.test.tsx.snap index 5c413f1..88d51d7 100644 --- a/src/components/Settings/__snapshots__/SettingsItemLabel.test.tsx.snap +++ b/src/components/Settings/shared/__snapshots__/SettingsItemLabel.test.tsx.snap @@ -3,18 +3,22 @@ exports[` Tests should render correctly and match snapshot - required and optional props 1`] = ` An item label @@ -34,18 +38,22 @@ exports[` Tests should render correctly and match snapshot exports[` Tests should render correctly and match snapshot - required props 1`] = ` An item label diff --git a/src/components/Settings/shared/values.ts b/src/components/Settings/shared/values.ts new file mode 100644 index 0000000..b76a4f3 --- /dev/null +++ b/src/components/Settings/shared/values.ts @@ -0,0 +1,26 @@ +// React Native +import { PressableAndroidRippleConfig, StyleProp, ViewStyle } from 'react-native' +// Constants +import { PRIMARY_COLOR } from '../../../constants' + +export const activeSwitch = PRIMARY_COLOR +export const inActiveSwitch = '#f4f3f4' +export const switchTrackColor = { false: '#e5e5e5', true: '#e5e5e5' } + +export const settingItemButtonRippleConfig: PressableAndroidRippleConfig = { + borderless: false, + foreground: true, + color: '#e5e5e5', +} + +export const settingsPressableItemStyle: StyleProp = { + flex: 1, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', +} + +export const settingItemWrapperStyle: StyleProp = { + flexDirection: 'row', + justifyContent: 'space-between', +} diff --git a/src/components/SortableFavoriteApps.tsx b/src/components/SortableFavoriteApps.tsx index b16dc01..2741b1e 100644 --- a/src/components/SortableFavoriteApps.tsx +++ b/src/components/SortableFavoriteApps.tsx @@ -2,6 +2,8 @@ import React, { useContext, useState } from 'react' // React Native import { Pressable, Image, StyleSheet, View, Animated, Easing, Text, PressableAndroidRippleConfig } from 'react-native' +// Components +import CustomIcon from './shared/CustomIcon' // Redux import { useDispatch, useSelector } from 'react-redux' import { selectFavoriteAppsMemoized, setFavoriteApps } from '../slices/favoriteApps' @@ -11,8 +13,6 @@ import GlobalContext from '../contexts/GlobalContext' import DraggableFlatList, { RenderItemParams, ScaleDecorator } from 'react-native-draggable-flatlist' // Constants import { BACKGROUND_COLOR } from '../constants' -// Icon -import Icon from 'react-native-vector-icons/MaterialIcons' // Models import { FavoriteApp } from '../models/favorite-app' @@ -80,7 +80,7 @@ const SortableFavoriteApps = () => { onPress={doneSorting} android_disableSound={true} android_ripple={doneButtonRippleConfig}> - + diff --git a/src/components/TemporaryPinnedApps.tsx b/src/components/TemporaryPinnedApps.tsx new file mode 100644 index 0000000..37578e1 --- /dev/null +++ b/src/components/TemporaryPinnedApps.tsx @@ -0,0 +1,78 @@ +// React Native +import { FlatList, ListRenderItem, ListRenderItemInfo, StyleSheet, Text, View } from 'react-native' +// Components +import AppItem from './AppItem' +// Redux +import { useSelector } from 'react-redux' +import { selectTemporaryPinnedAppsMemoized } from '../slices/pinnedApps' +// Constants +import { APP_ITEM_HEIGHT_ICON_DISPLAYED, BACKGROUND_COLOR } from '../constants' +import { singleRowAppsViewStyle, whiteTextColorStyle } from '../shared/styles' +// Models +import { RenderedIn } from '../models/rendered-in' +import { PinnedApp } from '../models/pinned-app' +import { AppDetails } from '../models/app-details' + +const keyExtractor = ({ name }: AppDetails) => name +const getItemLayout = (_data: unknown, index: number) => ({ + length: APP_ITEM_HEIGHT_ICON_DISPLAYED, + offset: APP_ITEM_HEIGHT_ICON_DISPLAYED * index, + index, +}) + +const TemporaryPinnedApps = () => { + const apps = useSelector(selectTemporaryPinnedAppsMemoized) + + const renderItem: ListRenderItem = ({ item }: ListRenderItemInfo) => ( + + ) + + return ( + + + Temporarliy Pinned + + {apps.length > 0 ? ( + + + + ) : ( + + No temporarliy pinned apps yet + + )} + + ) +} + +const styles = StyleSheet.create({ + wrapper: { + borderRadius: 5, + backgroundColor: BACKGROUND_COLOR, + }, + headerLabel: { + color: 'rgba(255,255,255,0.75)', + fontSize: 12, + }, + headerWrapper: { + paddingVertical: 2.5, + paddingHorizontal: 10, + borderBottomWidth: 1, + borderBottomColor: 'rgba(255,255,255,0.5)', + }, + verticalAppsWrapper: { + flexDirection: 'row', + justifyContent: 'flex-start', + padding: 5, + }, +}) + +export default TemporaryPinnedApps diff --git a/src/components/__snapshots__/Search.test.tsx.snap b/src/components/__snapshots__/Search.test.tsx.snap index 4c47a4e..3c5120d 100644 --- a/src/components/__snapshots__/Search.test.tsx.snap +++ b/src/components/__snapshots__/Search.test.tsx.snap @@ -5,17 +5,14 @@ exports[` Tests should render correctly and match snapshot 1`] = ` style={ { "alignItems": "center", - "display": "flex", "flex": 1, "flexDirection": "row", - "paddingHorizontal": 5, } } > Tests should render correctly and match snapshot 1`] = ` { "color": "#000", "flex": 1, - "fontSize": 16, } } testID="search-input" @@ -36,17 +32,14 @@ exports[` Tests should render correctly and match snapshot with clear style={ { "alignItems": "center", - "display": "flex", "flex": 1, "flexDirection": "row", - "paddingHorizontal": 5, } } > Tests should render correctly and match snapshot with clear { "color": "#000", "flex": 1, - "fontSize": 16, } } testID="search-input" @@ -89,11 +81,6 @@ exports[` Tests should render correctly and match snapshot with clear onResponderTerminate={[Function]} onResponderTerminationRequest={[Function]} onStartShouldSetResponder={[Function]} - style={ - { - "padding": 5, - } - } testID="search-input-clear-button" > Tests should render correctly and match snapshot with clear [ { "color": "#808080", - "fontSize": 25, + "fontSize": 30, }, undefined, { - "fontFamily": "Material Icons", + "fontFamily": "Material Design Icons", "fontStyle": "normal", "fontWeight": "normal", }, @@ -115,7 +102,7 @@ exports[` Tests should render correctly and match snapshot with clear ] } > -  + 󰅖 diff --git a/src/components/shared/CustomIcon.tsx b/src/components/shared/CustomIcon.tsx new file mode 100644 index 0000000..02f9ebe --- /dev/null +++ b/src/components/shared/CustomIcon.tsx @@ -0,0 +1,12 @@ +// React +import React from 'react' +// Icon +import Icon from 'react-native-vector-icons/MaterialCommunityIcons' +// Models +import { CustomIconProps as Props } from '../../models/props' + +const CustomIcon = ({ name, size, color, style }: Props) => { + return +} + +export default CustomIcon diff --git a/src/constants/app.ts b/src/constants/app.ts index cc535b6..82580ae 100644 --- a/src/constants/app.ts +++ b/src/constants/app.ts @@ -9,8 +9,9 @@ export const { } = AppsModule.getConstants() export const APP_ITEM_HEIGHT_ICON_DISPLAYED = 60 // Colors -export const PRIMARY_HEX_COLOR = '#42855B' -export const SECONDARY_HEX_COLOR = '#A0C2AD' +export const WHITE_COLOR = '#FFFFFF' +export const PRIMARY_COLOR = '#42855B' +export const SECONDARY_COLOR = '#A0C2AD' export const BACKGROUND_COLOR = 'rgba(255, 255, 255, 0.2)' // Native export const HARDWARE_BACK_PRESS_EVENT_NAME = 'hardwareBackPress' diff --git a/src/containers/BottomContainer.tsx b/src/containers/BottomContainer.tsx index 67cc3fc..ee55d8a 100644 --- a/src/containers/BottomContainer.tsx +++ b/src/containers/BottomContainer.tsx @@ -1,7 +1,7 @@ // React -import React, { useContext } from 'react' +import React, { useContext, useMemo } from 'react' // React Native -import { StyleSheet, View } from 'react-native' +import { StyleProp, StyleSheet, View, ViewStyle } from 'react-native' // Components import Search from '../components/Search' import AllAppsIcon from '../components/AllAppsIcon' @@ -9,13 +9,17 @@ import SettingsIcon from '../components/Settings/SettingsIcon' // Contexts import GlobalContext from '../contexts/GlobalContext' // Constants -import { SECONDARY_HEX_COLOR } from '../constants' +import { SECONDARY_COLOR, WHITE_COLOR } from '../constants' const BottomContainer = () => { const { displayAllApps } = useContext(GlobalContext) + const adaptiveStyle: StyleProp = useMemo(() => { + return { backgroundColor: displayAllApps ? SECONDARY_COLOR : WHITE_COLOR } + }, [displayAllApps]) + return ( - + @@ -25,7 +29,7 @@ const BottomContainer = () => { const styles = StyleSheet.create({ wrapper: { - borderRadius: 50, + borderRadius: 5, flexDirection: 'row', }, }) diff --git a/src/containers/TopContainer.tsx b/src/containers/TopContainer.tsx index e04ce27..1936cf6 100644 --- a/src/containers/TopContainer.tsx +++ b/src/containers/TopContainer.tsx @@ -1,25 +1,37 @@ // React -import React, { useContext } from 'react' +import { useContext } from 'react' // React Native import { StyleSheet, View } from 'react-native' // Redux import { useSelector } from 'react-redux' import { selectAppsSearchQuery } from '../slices/appsSearch' -import { selectDisplayFavoriteAppsMemoized, selectDisplayRecentAppsMemoized } from '../slices/preferences' +import { + selectDisplayFavoriteAppsMemoized, + selectDisplayPinnedAppsMemoized, + selectDisplayRecentAppsMemoized, + selectDisplayTemporaryPinnedAppsMemoized, +} from '../slices/preferences' // Components import AllApps from '../components/AllApps' import RecentApps from '../components/RecentApps' import FavoriteApps from '../components/FavoriteApps' import FilteredApps from '../components/FilteredApps' import SortableFavoriteApps from '../components/SortableFavoriteApps' +import PinnedApps from '../components/PinnedApps' +import TemporarliyPinnedApps from '../components/TemporaryPinnedApps' +// Hooks +import { useTimeBasedRendering } from '../hooks/useTimeBasedRendering' // Contexts import GlobalContext from '../contexts/GlobalContext' const TopContainer = () => { const searchQuery = useSelector(selectAppsSearchQuery) const displayRecentApps = useSelector(selectDisplayRecentAppsMemoized) + const displayPinnedApps = useSelector(selectDisplayPinnedAppsMemoized) + const displayTemporaryPinnedApps = useSelector(selectDisplayTemporaryPinnedAppsMemoized) const displayFavoriteApps = useSelector(selectDisplayFavoriteAppsMemoized) const { displayAllApps, sortableFavoriteApps } = useContext(GlobalContext) + const canRender = useTimeBasedRendering() return ( @@ -30,35 +42,48 @@ const TopContainer = () => { {!displayAllApps && searchQuery && } {/* Hide recent & favourite apps while searching */} - {!displayAllApps && !searchQuery && (displayRecentApps || displayFavoriteApps) && ( - <> - {/* Recent apps */} - {displayRecentApps && ( - - - - )} + {!displayAllApps && + !searchQuery && + (displayRecentApps || displayFavoriteApps || displayPinnedApps || displayTemporaryPinnedApps) && ( + <> + {/* Recent apps */} + {displayRecentApps && ( + + + + )} - {/* Favorite apps */} - {displayFavoriteApps && !sortableFavoriteApps && ( - - - - )} - {displayFavoriteApps && sortableFavoriteApps && ( - - - - )} - - )} + {/* Pinned apps */} + {displayTemporaryPinnedApps && canRender && ( + + + + )} + {displayPinnedApps && ( + + + + )} + + {/* Favorite apps */} + {displayFavoriteApps && !sortableFavoriteApps && ( + + + + )} + {displayFavoriteApps && sortableFavoriteApps && ( + + + + )} + + )} ) } const styles = StyleSheet.create({ wrapper: { - flex: 1, marginBottom: 5, justifyContent: 'flex-end', }, diff --git a/src/contexts/GlobalContextWrapper.tsx b/src/contexts/GlobalContextWrapper.tsx index 21f167d..28e531b 100644 --- a/src/contexts/GlobalContextWrapper.tsx +++ b/src/contexts/GlobalContextWrapper.tsx @@ -9,7 +9,7 @@ import { dismissKeyboard } from '../utils/keyboard' // BottomSheet import { BottomSheetModal } from '@gorhom/bottom-sheet' // Models -import { AppDetailsOptionalIcon } from '../models/app-details' +import { AppDetailsWithOptionalIcon } from '../models/app-details' import { GlobalContextWrapperProps as Props } from '../models/props' const GlobalContextWrapper = ({ children }: Props) => { @@ -18,7 +18,7 @@ const GlobalContextWrapper = ({ children }: Props) => { const [sortableFavoriteApps, setSortableFavoriteApps] = useState(false) const settingsBottomSheetRef: RefObject | null = useRef(null) const appItemMenuBottomSheetRef: RefObject | null = useRef(null) - const [appItemMenuDetails, setAppItemMenuDetails] = useState(null) + const [appItemMenuDetails, setAppItemMenuDetails] = useState(null) const hideAllApps = () => { if (displayAllApps) setDisplayAllApps(false) @@ -62,7 +62,7 @@ const GlobalContextWrapper = ({ children }: Props) => { settingsBottomSheetRef, displaySettingsBottomSheet: () => settingsBottomSheetRef.current?.present(), appItemMenuDetails, - setAppItemMenuDetails: (appDetails: AppDetailsOptionalIcon) => setAppItemMenuDetails(appDetails), + setAppItemMenuDetails: (appDetails: AppDetailsWithOptionalIcon) => setAppItemMenuDetails(appDetails), appItemMenuBottomSheetRef, displayAppItemMenuBottomSheet: () => appItemMenuBottomSheetRef.current?.present(), sortableFavoriteApps, diff --git a/src/hooks/useTimeBasedRendering.ts b/src/hooks/useTimeBasedRendering.ts new file mode 100644 index 0000000..77a0fab --- /dev/null +++ b/src/hooks/useTimeBasedRendering.ts @@ -0,0 +1,106 @@ +// React +import { useEffect, useState } from 'react' +// Redux +import { useSelector } from 'react-redux' +import { selectTemporaryPinnedAppsConfigMemoized } from '../slices/pinnedApps' + +type CheckResult = { + startRenderingTimeOutId: NodeJS.Timeout | undefined + stopRenderingTimeOutId: NodeJS.Timeout | undefined +} + +export const useTimeBasedRendering = () => { + const [startDate, setStartDate] = useState() + const [endDate, setEndDate] = useState() + const [canRender, setCanRender] = useState(false) + + const temporaryPinnedAppsConfig = useSelector(selectTemporaryPinnedAppsConfigMemoized) + + useEffect(() => { + setStartDate(temporaryPinnedAppsConfig.startDate ? new Date(temporaryPinnedAppsConfig.startDate) : undefined) + setEndDate(temporaryPinnedAppsConfig.endDate ? new Date(temporaryPinnedAppsConfig.endDate) : undefined) + }, [temporaryPinnedAppsConfig.startDate, temporaryPinnedAppsConfig.endDate]) + + useEffect(() => { + let startRenderingTimeOut: NodeJS.Timeout | undefined = undefined + let stopRenderingTimeOut: NodeJS.Timeout | undefined = undefined + + const { startRenderingTimeOutId, stopRenderingTimeOutId } = check() + startRenderingTimeOut = startRenderingTimeOutId + stopRenderingTimeOut = stopRenderingTimeOutId + + const intervalId = setInterval(() => { + const { startRenderingTimeOutId, stopRenderingTimeOutId } = check() + startRenderingTimeOut = startRenderingTimeOutId + stopRenderingTimeOut = stopRenderingTimeOutId + }, 60_000) + + return () => { + clearTimeout(startRenderingTimeOut) + clearTimeout(stopRenderingTimeOut) + clearInterval(intervalId) + } + }, [startDate, endDate]) + + const check = (): CheckResult => { + let startRenderingTimeOut: NodeJS.Timeout | undefined = undefined + let stopRenderingTimeOut: NodeJS.Timeout | undefined = undefined + + if (!startDate || !endDate) { + setCanRender(false) + + return { + startRenderingTimeOutId: undefined, + stopRenderingTimeOutId: undefined, + } + } + + const currentDate = new Date() + + // Update current dates if old date + if (currentDate.getDate() !== startDate.getDate() || currentDate.getDate() !== endDate.getDate()) { + setStartDate(new Date(startDate.setDate(currentDate.getDate()))) + setEndDate(new Date(endDate.setDate(currentDate.getDate()))) + } + + const shouldRenderNow = currentDate.getTime() >= startDate.getTime() && currentDate.getTime() <= endDate.getTime() + + if (shouldRenderNow) { + // Start rendering + setCanRender(true) + + // Set timeout to stop rendering at end date + const isCurrentDateAheadOfStartDate = currentDate.getTime() > startDate.getTime() + const renderingStartDate = isCurrentDateAheadOfStartDate ? currentDate.getTime() : startDate.getTime() + const timeToStopRendering = endDate.getTime() - renderingStartDate + startRenderingTimeOut = setTimeout(() => setCanRender(false), timeToStopRendering) + stopRenderingTimeOut = undefined + } else { + // Stop rendering + setCanRender(false) + + // Set timeouts to start rendering at start date and end rendering at end date + const timeToStartRendering = startDate.getTime() - currentDate.getTime() + const timeToStopRendering = endDate.getTime() - currentDate.getTime() + + if (timeToStartRendering > 0 && timeToStopRendering > 0) { + startRenderingTimeOut = setTimeout(() => setCanRender(true), timeToStartRendering) + stopRenderingTimeOut = setTimeout(() => setCanRender(false), timeToStopRendering) + } else if (timeToStartRendering < 0 && timeToStopRendering > 0) { + const timeToStopRendering = endDate.getTime() - currentDate.getTime() + stopRenderingTimeOut = setTimeout(() => setCanRender(false), timeToStopRendering) + setCanRender(true) + } else { + startRenderingTimeOut = undefined + stopRenderingTimeOut = undefined + } + } + + return { + startRenderingTimeOutId: startRenderingTimeOut, + stopRenderingTimeOutId: stopRenderingTimeOut, + } + } + + return canRender +} diff --git a/src/models/app-details.ts b/src/models/app-details.ts index d2f15b4..fce7740 100644 --- a/src/models/app-details.ts +++ b/src/models/app-details.ts @@ -3,4 +3,6 @@ export type AppDetails = { name: string } -export type AppDetailsOptionalIcon = AppDetails & { icon?: string } +export type AppDetailsWithOptionalIcon = AppDetails & { icon?: string } + +export type AppDetailsWithIcon = AppDetails & { icon: string } diff --git a/src/models/context.ts b/src/models/context.ts index bdd2d60..feb1535 100644 --- a/src/models/context.ts +++ b/src/models/context.ts @@ -5,7 +5,7 @@ import { TextInput } from 'react-native' // BottomSheet import { BottomSheetModal } from '@gorhom/bottom-sheet' // Models -import { AppDetailsOptionalIcon } from '../models/app-details' +import { AppDetailsWithOptionalIcon } from '../models/app-details' export type GlobalContextType = { // All apps @@ -16,8 +16,8 @@ export type GlobalContextType = { settingsBottomSheetRef: RefObject | null displaySettingsBottomSheet: () => void // App item menu - appItemMenuDetails: AppDetailsOptionalIcon | null - setAppItemMenuDetails: (appDetails: AppDetailsOptionalIcon) => void + appItemMenuDetails: AppDetailsWithOptionalIcon | null + setAppItemMenuDetails: (appDetails: AppDetailsWithOptionalIcon) => void appItemMenuBottomSheetRef: RefObject | null displayAppItemMenuBottomSheet: () => void // Favorite apps sort diff --git a/src/models/favorite-app.ts b/src/models/favorite-app.ts index e3d306c..c58017f 100644 --- a/src/models/favorite-app.ts +++ b/src/models/favorite-app.ts @@ -1,4 +1,4 @@ // Models -import { AppDetails } from './app-details' +import { AppDetailsWithIcon } from './app-details' -export type FavoriteApp = AppDetails & { icon: string } +export type FavoriteApp = AppDetailsWithIcon diff --git a/src/models/pinned-app.ts b/src/models/pinned-app.ts new file mode 100644 index 0000000..02ddba5 --- /dev/null +++ b/src/models/pinned-app.ts @@ -0,0 +1,17 @@ +// Models +import { AppDetailsWithIcon } from './app-details' + +export type PinnedApp = AppDetailsWithIcon & { + isPermanent: boolean + isTemporary: boolean +} + +export type TemporaryPinnedAppsConfig = { + startDate?: string + endDate?: string +} + +export type PinnedAppsState = { + list: PinnedApp[] + temporaryAppsConfig: TemporaryPinnedAppsConfig +} diff --git a/src/models/props.ts b/src/models/props.ts index bbc5205..12498e4 100644 --- a/src/models/props.ts +++ b/src/models/props.ts @@ -1,7 +1,7 @@ // React import { ReactNode } from 'react' // React Native -import { StyleProp, ViewStyle } from 'react-native' +import { StyleProp, TextStyle, ViewStyle } from 'react-native' import { BaseAnimationBuilder } from 'react-native-reanimated' // Models import { AppDetails } from './app-details' @@ -11,6 +11,8 @@ export type AppItemProps = { appDetails: AppDetails renderedIn: RenderedIn appIcon?: string + wrapperStyle?: StyleProp + pressableStyle?: StyleProp } export type HighlightTextProps = { @@ -32,6 +34,12 @@ export type AllAppsLetterIndexProps = { export type SettingsItemLabelProps = { title: string description?: string + titleStyle?: StyleProp + wrapperStyle?: StyleProp +} + +export type ToggleSettingsProps = SettingsItemLabelProps & { + children: ReactNode } export type CustomViewProps = { @@ -40,3 +48,10 @@ export type CustomViewProps = { exitAnimation?: BaseAnimationBuilder | typeof BaseAnimationBuilder entryAnimation?: BaseAnimationBuilder | typeof BaseAnimationBuilder } + +export type CustomIconProps = { + name: string + size: number + color: string + style?: Record +} diff --git a/src/models/recent-app.ts b/src/models/recent-app.ts index 0c2944a..20b2c42 100644 --- a/src/models/recent-app.ts +++ b/src/models/recent-app.ts @@ -1,6 +1,6 @@ // Models -import { AppDetails } from './app-details' +import { AppDetailsWithIcon, AppDetailsWithOptionalIcon } from './app-details' -export type RecentAppDetails = AppDetails & { icon: string } +export type RecentAppDetails = AppDetailsWithIcon -export type RecentAppDetailsOptionalIcon = AppDetails & { icon?: string } +export type RecentAppDetailsWithOptionalIcon = AppDetailsWithOptionalIcon diff --git a/src/models/rendered-in.ts b/src/models/rendered-in.ts index 7442e6b..5e61777 100644 --- a/src/models/rendered-in.ts +++ b/src/models/rendered-in.ts @@ -1,6 +1,7 @@ export enum RenderedIn { ALL_APPS = 'all_apps', RECENT_APPS = 'recent_apps', + PINNED_APPS = 'pinned_apps', FAVORITE_APPS = 'favorite_apps', FILTERED_APPS = 'filtered_apps', } diff --git a/src/shared/bottom-container/index.ts b/src/shared/bottom-container/index.ts new file mode 100644 index 0000000..6aec8a8 --- /dev/null +++ b/src/shared/bottom-container/index.ts @@ -0,0 +1,24 @@ +// React Native +import { StyleSheet, PressableProps } from 'react-native' +// Constants +import { SECONDARY_COLOR } from '../../constants' + +export const iconsStyle = StyleSheet.create({ + wrapper: { + alignItems: 'center', + flexDirection: 'row', + }, + icon: { + margin: 5, + }, +}) + +export const iconsPressableConfig: PressableProps = { + android_disableSound: true, + android_ripple: { + color: SECONDARY_COLOR, + borderless: false, + foreground: true, + radius: 20, + }, +} diff --git a/src/shared/styles.ts b/src/shared/styles.ts new file mode 100644 index 0000000..150eccb --- /dev/null +++ b/src/shared/styles.ts @@ -0,0 +1,12 @@ +// React Native +import { StyleProp, TextStyle, ViewStyle } from 'react-native' + +export const whiteTextColorStyle: StyleProp = { + color: '#fff', +} + +export const singleRowAppsViewStyle: StyleProp = { + minHeight: 70, + alignItems: 'center', + justifyContent: 'center', +} diff --git a/src/slices/pinnedApps.ts b/src/slices/pinnedApps.ts new file mode 100644 index 0000000..59e2109 --- /dev/null +++ b/src/slices/pinnedApps.ts @@ -0,0 +1,66 @@ +// Redux +import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit' +// Models +import { RootState } from '../store' +import { PinnedApp, PinnedAppsState, TemporaryPinnedAppsConfig } from '../models/pinned-app' + +const initialState: PinnedAppsState = { + list: [], + temporaryAppsConfig: { + startDate: undefined, + endDate: undefined, + }, +} + +export const pinnedAppsSlice = createSlice({ + name: 'pinnedApps', + initialState, + reducers: { + updateOrRemovePinnedApp: (state: PinnedAppsState, { payload }: PayloadAction) => { + const foundAppIndex = state.list.findIndex(({ name }: PinnedApp) => name === payload.name) + + // Add if no entry is found + if (foundAppIndex === -1) { + state.list.push({ ...payload }) + return + } + + // Get pinned app object + const foundApp = state.list.find(({ name }: PinnedApp) => name === payload.name) + + // Remove if entry is not pinned permanently and temporarily + if (!foundApp?.isPermanent && !foundApp?.isTemporary) { + state.list.splice(foundAppIndex, 1) + return + } + + // Update changed values + state.list.splice(foundAppIndex, 1, { ...foundApp, ...payload }) + }, + clearPinnedApps: (state: PinnedAppsState) => { + state.list = [] + }, + setTemporaryAppsConfig: (state: PinnedAppsState, { payload }: PayloadAction) => { + state.temporaryAppsConfig = { ...payload } + }, + }, +}) + +export const { updateOrRemovePinnedApp, setTemporaryAppsConfig, clearPinnedApps } = pinnedAppsSlice.actions + +const selectPinnedApps = (state: RootState) => state.pinnedApps.list +const selectTemporaryPinnedAppsConfig = (state: RootState) => state.pinnedApps.temporaryAppsConfig + +export const selectAllPinnedAppsMemoized = createSelector(selectPinnedApps, (list: PinnedApp[]) => list) +export const selectPinnedAppsMemoized = createSelector(selectPinnedApps, (list: PinnedApp[]) => + list.filter((pinnedApp: PinnedApp) => pinnedApp.isPermanent) +) +export const selectTemporaryPinnedAppsMemoized = createSelector(selectPinnedApps, (list: PinnedApp[]) => + list.filter((pinnedApp: PinnedApp) => pinnedApp.isTemporary) +) +export const selectTemporaryPinnedAppsConfigMemoized = createSelector( + selectTemporaryPinnedAppsConfig, + (config: TemporaryPinnedAppsConfig) => config +) + +export default pinnedAppsSlice.reducer diff --git a/src/slices/preferences.ts b/src/slices/preferences.ts index ef0cc2b..062ebdb 100644 --- a/src/slices/preferences.ts +++ b/src/slices/preferences.ts @@ -6,11 +6,15 @@ import { RootState } from '../store' export interface PreferencesState { displayRecentApps: boolean displayFavoriteApps: boolean + displayPinnedApps: boolean + displayTemporaryPinnedApps: boolean } const initialState: PreferencesState = { displayRecentApps: true, displayFavoriteApps: true, + displayPinnedApps: true, + displayTemporaryPinnedApps: false, } export const preferencesSlice = createSlice({ @@ -23,19 +27,37 @@ export const preferencesSlice = createSlice({ displayFavoriteApps: (state: PreferencesState, { payload }: PayloadAction) => { state.displayFavoriteApps = payload }, + displayPinnedApps: (state: PreferencesState, { payload }: PayloadAction) => { + state.displayPinnedApps = payload + }, + displayTemporaryPinnedApps: (state: PreferencesState, { payload }: PayloadAction) => { + state.displayTemporaryPinnedApps = payload + }, resetPreferences: (state: PreferencesState) => { - state.displayRecentApps = true - state.displayFavoriteApps = true + state = { ...initialState } }, }, }) -export const { displayRecentApps, displayFavoriteApps, resetPreferences } = preferencesSlice.actions +export const { + displayRecentApps, + displayFavoriteApps, + displayPinnedApps, + displayTemporaryPinnedApps, + resetPreferences, +} = preferencesSlice.actions const selectDisplayRecentApps = (state: RootState) => state.preferences.displayRecentApps const selectDisplayFavoriteApps = (state: RootState) => state.preferences.displayFavoriteApps +const selectDisplayPinnedApps = (state: RootState) => state.preferences.displayPinnedApps +const selectDisplayTemporaryPinnedApps = (state: RootState) => state.preferences.displayTemporaryPinnedApps export const selectDisplayRecentAppsMemoized = createSelector(selectDisplayRecentApps, (value: boolean) => value) export const selectDisplayFavoriteAppsMemoized = createSelector(selectDisplayFavoriteApps, (value: boolean) => value) +export const selectDisplayPinnedAppsMemoized = createSelector(selectDisplayPinnedApps, (value: boolean) => value) +export const selectDisplayTemporaryPinnedAppsMemoized = createSelector( + selectDisplayTemporaryPinnedApps, + (value: boolean) => value +) export default preferencesSlice.reducer diff --git a/src/slices/recentApps.ts b/src/slices/recentApps.ts index 84d5b41..4e8895d 100644 --- a/src/slices/recentApps.ts +++ b/src/slices/recentApps.ts @@ -2,7 +2,7 @@ import { createSelector, createSlice, PayloadAction } from '@reduxjs/toolkit' // Models import { RootState } from '../store' -import { RecentAppDetails, RecentAppDetailsOptionalIcon } from '../models/recent-app' +import { RecentAppDetails, RecentAppDetailsWithOptionalIcon } from '../models/recent-app' export interface RecentAppsState { list: RecentAppDetails[] @@ -16,7 +16,7 @@ export const recentAppsSlice = createSlice({ name: 'recentApps', initialState, reducers: { - addRecentApp: (state: RecentAppsState, { payload }: PayloadAction) => { + addRecentApp: (state: RecentAppsState, { payload }: PayloadAction) => { // Don't add app without icon if (!payload.icon) return diff --git a/src/store.ts b/src/store.ts index ab01ca8..7f7e7a7 100644 --- a/src/store.ts +++ b/src/store.ts @@ -6,6 +6,7 @@ import appsSearchReducer from './slices/appsSearch' import recentAppsReducer from './slices/recentApps' import FavoriteAppsReducer from './slices/favoriteApps' import preferencesReducer from './slices/preferences' +import pinnedAppsReducer from './slices/pinnedApps' // Storage import AsyncStorage from '@react-native-async-storage/async-storage' // Redux Persist @@ -19,6 +20,8 @@ import { PURGE, REGISTER, createMigrate, + MigrationManifest, + PersistConfig, } from 'redux-persist' export const rootReducer = combineReducers({ @@ -27,9 +30,10 @@ export const rootReducer = combineReducers({ recentApps: recentAppsReducer, favoriteApps: FavoriteAppsReducer, preferences: preferencesReducer, + pinnedApps: pinnedAppsReducer, }) -const migrations = { +const migrations: MigrationManifest = { 2: (state: any) => { return { ...state, @@ -39,11 +43,29 @@ const migrations = { }, } }, + 3: (state: any) => { + return { + ...state, + pinnedApps: { + list: [], + temporaryAppsConfig: { + startDate: undefined, + endDate: undefined, + }, + }, + preferences: { + ...state.preferences, + displayPinnedApps: true, + displayTemporaryPinnedApps: false, + }, + } + }, } -const persistConfig = { +const persistConfig: PersistConfig = { key: 'root', - version: 2, + debug: false, + version: 3, storage: AsyncStorage, migrate: createMigrate(migrations, { debug: false }), } diff --git a/src/utils/apps.ts b/src/utils/apps.ts new file mode 100644 index 0000000..2d23c3f --- /dev/null +++ b/src/utils/apps.ts @@ -0,0 +1,15 @@ +// Models +import { AppDetails, AppDetailsWithIcon } from '../models/app-details' +import { PinnedApp } from '../models/pinned-app' + +export const getAppsByLabel = (apps: AppDetails[], query: string): AppDetails[] => { + return apps.filter((app: AppDetails) => app.label.match(new RegExp(query, 'gi'))) +} + +export const getPinnedAppByName = (pinnedApps: PinnedApp[], appDetails: AppDetailsWithIcon): PinnedApp => { + const pinnedApp = pinnedApps.find(({ name }: PinnedApp) => name === appDetails.name) + + if (pinnedApp) return pinnedApp + + return { ...appDetails, isTemporary: false, isPermanent: false } +} diff --git a/src/utils/date.ts b/src/utils/date.ts new file mode 100644 index 0000000..717ce39 --- /dev/null +++ b/src/utils/date.ts @@ -0,0 +1,33 @@ +export const getTimeFromDate = (stringDate?: string): string => { + if (!stringDate) return 'unset' + + const date = new Date(stringDate) + + const singleDigitHours = `${date.getHours()}`.length == 1 + const singleDigitMinutes = `${date.getMinutes()}`.length == 1 + + const hours = singleDigitHours ? `0${date.getHours()}` : date.getHours() + const minutes = singleDigitMinutes ? `0${date.getMinutes()}` : date.getMinutes() + + return `${hours}:${minutes}` +} + +export const getDateFromStringWithCurrentDateValue = (stringDate?: string): Date | undefined => { + if (!stringDate) return + + const currentDate = new Date() + const fullDate = new Date(stringDate) + return new Date( + currentDate.getFullYear(), + currentDate.getMonth(), + currentDate.getDate(), + fullDate.getHours(), + fullDate.getMinutes(), + 0, + 0 + ) +} + +export const stripDateFromSeconds = (date: Date): Date => { + return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), 0, 0) +} diff --git a/src/utils/toast.ts b/src/utils/toast.ts new file mode 100644 index 0000000..f5183db --- /dev/null +++ b/src/utils/toast.ts @@ -0,0 +1,6 @@ +// React Native +import { ToastAndroid } from 'react-native' + +export const displayToast = (message: string, duration: number = ToastAndroid.SHORT) => { + ToastAndroid.show(message, duration) +} diff --git a/utils/test/data.ts b/utils/test/data.ts index c145ac2..84ede91 100644 --- a/utils/test/data.ts +++ b/utils/test/data.ts @@ -1,3 +1,4 @@ +// Models import { GlobalContextType, SearchContextType } from '../../src/models/context' export const CONTEXT_LAUNCHER_APP_ID = 'com.razinj.context_launcher' @@ -14,12 +15,21 @@ export const initialStoreState = { list: [], }, preferences: { - displayFavoriteApps: false, - displayRecentApps: false, + displayRecentApps: true, + displayFavoriteApps: true, + displayPinnedApps: false, + displayTemporaryPinnedApps: false, }, recentApps: { list: [], }, + pinnedApps: { + list: [], + temporaryAppsConfig: { + startDate: undefined, + endDate: undefined, + }, + }, } export const defaultGlobalContextValue: GlobalContextType = { diff --git a/utils/test/utils.tsx b/utils/test/utils.tsx index 46b5a4f..20747fc 100644 --- a/utils/test/utils.tsx +++ b/utils/test/utils.tsx @@ -1,12 +1,19 @@ +// React import React from 'react' import { ReactElement, ReactNode } from 'react' +// Redux import { Provider } from 'react-redux' import { configureStore, PreloadedState, Store } from '@reduxjs/toolkit' +// Testing Library import { render, RenderOptions } from '@testing-library/react-native' +// Store import { rootReducer, RootState } from '../../src/store' +// Models import { GlobalContextType, SearchContextType } from '../../src/models/context' +// Contexts import GlobalContext from '../../src/contexts/GlobalContext' import SearchContext from '../../src/contexts/SearchContext' +// Constants import { defaultGlobalContextValue, defaultSearchContextValue, initialStoreState } from './data' interface ExtendedRenderOptions extends RenderOptions {