diff --git a/babel.config.js b/babel.config.js index a691a46..cdd1c9c 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,13 +1,16 @@ -module.exports = { - presets: ['module:metro-react-native-babel-preset'], - plugins: [ - [ - 'module-resolver', - { - alias: { - '@caj': './src/caj', +module.exports = function (api) { + api.cache(true); + return { + presets: ['module:metro-react-native-babel-preset'], + plugins: [ + [ + 'module-resolver', + { + alias: { + '@caj': './src/caj', + }, }, - }, + ], ], - ], + }; }; diff --git a/package-lock.json b/package-lock.json index af7bbf7..53aed4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,23 +8,35 @@ "name": "ClickAndJoinApp", "version": "0.0.1", "dependencies": { - "@react-navigation/native": "^6.1.0", - "@react-navigation/native-stack": "^6.9.5", + "@react-navigation/bottom-tabs": "^6.5.2", + "@react-navigation/native": "^6.1.1", + "@react-navigation/native-stack": "^6.9.7", + "@react-spring/native": "^9.6.1", + "@react-spring/web": "^9.6.1", + "@reduxjs/toolkit": "^1.9.1", + "babel-preset-es2015": "^6.24.1", "babel-preset-esnext": "^1.1.3", "babel-preset-react": "^6.24.1", "native-base": "^3.4.23", "react": "^18.1.0", "react-dom": "18.1.0", "react-native": "0.70.6", + "react-native-encrypted-storage": "^4.0.3", + "react-native-gesture-handler": "^2.8.0", + "react-native-reanimated": "^2.13.0", "react-native-safe-area-context": "^4.4.1", "react-native-screens": "^3.18.2", - "react-native-web": "^0.18.10" + "react-native-web": "^0.18.10", + "react-redux": "^8.0.5" }, "devDependencies": { "@babel/core": "^7.12.9", - "@babel/runtime": "^7.12.5", + "@babel/preset-react": "^7.18.6", + "@babel/runtime": "^7.20.6", "@react-native-community/eslint-config": "^2.0.0", "@types/node": "^18.11.10", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.9", "@types/webpack": "^5.28.0", "babel-jest": "^26.6.3", "babel-loader": "^9.1.0", @@ -1375,6 +1387,20 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-object-assign": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.18.6.tgz", + "integrity": "sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", @@ -1450,6 +1476,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "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", @@ -1478,6 +1519,22 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", @@ -1776,6 +1833,26 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-typescript": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", @@ -2006,6 +2083,17 @@ "node": ">=10.0.0" } }, + "node_modules/@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "dependencies": { + "@types/hammerjs": "^2.0.36" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -4891,12 +4979,29 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, - "node_modules/@react-navigation/core": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.4.tgz", - "integrity": "sha512-skdTzr6sOceEusEDG+e58zaSpgy1Yz7eZGFtmkmdYAFkZDy5nkIY/0nYuXP0waUYarNXg6lNEVkF995/kZXHZg==", + "node_modules/@react-navigation/bottom-tabs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.2.tgz", + "integrity": "sha512-iN3B1cgXdo64lqXdsTsCjN7n+5ILYKRexAu0VtW6EO8E6Z/0obK5JcCEropSiimRqVRs0kyuYj3F94Oth+hMrw==", "dependencies": { - "@react-navigation/routers": "^6.1.5", + "@react-navigation/elements": "^1.3.12", + "color": "^4.2.3", + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "@react-navigation/native": "^6.0.0", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 3.0.0", + "react-native-screens": ">= 3.0.0" + } + }, + "node_modules/@react-navigation/core": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.5.tgz", + "integrity": "sha512-wcde35HeOM5r2P25EwLQZyJ1yhXDGKuWpnKfsSI1xrgYIvWdYi3j/yGnwgNGDelCmtUt1Fyk2pmOv8sEku9KkA==", + "dependencies": { + "@react-navigation/routers": "^6.1.6", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.1.3", @@ -4924,9 +5029,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/@react-navigation/elements": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.10.tgz", - "integrity": "sha512-JFaoZG9S+Zz291CvAMeGw8kNl/g2AaY9Pbo+VcYO+JM6UF/E5Obq9ga2ydxDrn3an7wzdl6flA/4lWhqG82Vqw==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.12.tgz", + "integrity": "sha512-iVcLIYg/XJk1p6X1rSFhNhCjAJ3ORqNT2/bJqw7I/liujeJAoz1oZ5JDoEcZaA0wMDts1txxLuqAYJmhCgU2aA==", "peerDependencies": { "@react-navigation/native": "^6.0.0", "react": "*", @@ -4935,11 +5040,11 @@ } }, "node_modules/@react-navigation/native": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.0.tgz", - "integrity": "sha512-CdjOmbE4c/UczczqeP7ZrFXJcjnXOCwY1PDNjX51Ph1b2tHXpQ41/089k3R49dc5i2sFLk6jKaryFU2dcLr8jw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.1.tgz", + "integrity": "sha512-iIozx9c66EjSFyzKrZPixnk6vBuivYXp0jmbKCJXNIa7MY+8OLx9CXj/+1py/l/OGlXDhI6jiUWWetOfOtMaBQ==", "dependencies": { - "@react-navigation/core": "^6.4.4", + "@react-navigation/core": "^6.4.5", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" @@ -4950,11 +5055,11 @@ } }, "node_modules/@react-navigation/native-stack": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.5.tgz", - "integrity": "sha512-1ZIrla+b4gB8KDC6QewtZ/1yOS23bQctwR4Pf6ECA0stEH8ibbxh70iiI/LluL5CtWxrWfgOrl1jpQsVvtKY+Q==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.7.tgz", + "integrity": "sha512-YsBv4LldFErwQbqLCI/aWWDTpMf9SFS4IW3Qcefm+TZli9Ee7XpZMmFdotiZTz4KoYHbqhO1fuExjl2O7ZHrAQ==", "dependencies": { - "@react-navigation/elements": "^1.3.10", + "@react-navigation/elements": "^1.3.12", "warn-once": "^0.1.0" }, "peerDependencies": { @@ -4977,13 +5082,95 @@ } }, "node_modules/@react-navigation/routers": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.5.tgz", - "integrity": "sha512-JzMRiRRu8J0yUMC7BV8wOVzevjkHnIPONbpCTL/vH5yceTm+dSH/U3esIObgk8wYYbov+jYlVhwUQNGRb2to6g==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.6.tgz", + "integrity": "sha512-Z5DeCW3pUvMafbU9Cjy1qJYC2Bvl8iy3+PfsB0DsAwQ6zZ3WAXW5FTMX4Gb9H+Jg6qHWGbMFFwlYpS3UJ3tlVQ==", "dependencies": { "nanoid": "^3.1.23" } }, + "node_modules/@react-spring/animated": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.6.1.tgz", + "integrity": "sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==", + "dependencies": { + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/core": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.6.1.tgz", + "integrity": "sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==", + "dependencies": { + "@react-spring/animated": "~9.6.1", + "@react-spring/rafz": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/native": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.6.1.tgz", + "integrity": "sha512-ZIfSytxFGLw4gYOb8gsmwG0+JZYxuM/Y1XPCXCkhuoMn+RmOYrr0kQ4gLczbmf+TRxth7OT1c8vBYz0+SCGcIQ==", + "dependencies": { + "@react-spring/animated": "~9.6.1", + "@react-spring/core": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "react": "^16.8.0 || >=17.0.0 || >=18.0.0", + "react-native": ">=0.58" + } + }, + "node_modules/@react-spring/rafz": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.6.1.tgz", + "integrity": "sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ==" + }, + "node_modules/@react-spring/shared": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.6.1.tgz", + "integrity": "sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==", + "dependencies": { + "@react-spring/rafz": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-spring/types": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.6.1.tgz", + "integrity": "sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==" + }, + "node_modules/@react-spring/web": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.6.1.tgz", + "integrity": "sha512-X2zR6q2Z+FjsWfGAmAXlQaoUHbPmfuCaXpuM6TcwXPpLE1ZD4A1eys/wpXboFQmDkjnrlTmKvpVna1MjWpZ5Hw==", + "dependencies": { + "@react-spring/animated": "~9.6.1", + "@react-spring/core": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@react-stately/checkbox": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.3.1.tgz", @@ -5366,6 +5553,29 @@ "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, + "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==", + "dependencies": { + "immer": "^9.0.16", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.7" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.0.2" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -5578,6 +5788,20 @@ "@types/node": "*" } }, + "node_modules/@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -5587,6 +5811,11 @@ "@types/node": "*" } }, + "node_modules/@types/invariant": { + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.35.tgz", + "integrity": "sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -5640,8 +5869,7 @@ "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "peer": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -5656,16 +5884,24 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "peer": true, + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "node_modules/@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-native": { "version": "0.70.7", "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.7.tgz", @@ -5684,8 +5920,7 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "peer": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/serve-index": { "version": "1.9.1", @@ -5721,6 +5956,11 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "node_modules/@types/webpack": { "version": "5.28.0", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.0.tgz", @@ -7440,35 +7680,35 @@ } }, "node_modules/babel-preset-es2015": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.14.0.tgz", - "integrity": "sha512-ogjLirrzjxgkMizNwNaTFslRhpKykJ3cboykPoBRyY1vwMAUVtu4F7jdISs9aTQlPYX2OLj5I4302vaYJ70Ohw==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ==", "deprecated": "🙌 Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!", "dependencies": { - "babel-plugin-check-es2015-constants": "^6.3.13", - "babel-plugin-transform-es2015-arrow-functions": "^6.3.13", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13", - "babel-plugin-transform-es2015-block-scoping": "^6.14.0", - "babel-plugin-transform-es2015-classes": "^6.14.0", - "babel-plugin-transform-es2015-computed-properties": "^6.3.13", - "babel-plugin-transform-es2015-destructuring": "^6.9.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.6.0", - "babel-plugin-transform-es2015-for-of": "^6.6.0", - "babel-plugin-transform-es2015-function-name": "^6.9.0", - "babel-plugin-transform-es2015-literals": "^6.3.13", - "babel-plugin-transform-es2015-modules-amd": "^6.8.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.14.0", - "babel-plugin-transform-es2015-modules-umd": "^6.12.0", - "babel-plugin-transform-es2015-object-super": "^6.3.13", - "babel-plugin-transform-es2015-parameters": "^6.9.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.3.13", - "babel-plugin-transform-es2015-spread": "^6.3.13", - "babel-plugin-transform-es2015-sticky-regex": "^6.3.13", - "babel-plugin-transform-es2015-template-literals": "^6.6.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.6.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.3.13", - "babel-plugin-transform-regenerator": "^6.14.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "node_modules/babel-preset-es2016": { @@ -7512,6 +7752,38 @@ "modify-babel-preset": "3.2.0" } }, + "node_modules/babel-preset-esnext/node_modules/babel-preset-es2015": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.14.0.tgz", + "integrity": "sha512-ogjLirrzjxgkMizNwNaTFslRhpKykJ3cboykPoBRyY1vwMAUVtu4F7jdISs9aTQlPYX2OLj5I4302vaYJ70Ohw==", + "deprecated": "🙌 Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update!", + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.3.13", + "babel-plugin-transform-es2015-arrow-functions": "^6.3.13", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13", + "babel-plugin-transform-es2015-block-scoping": "^6.14.0", + "babel-plugin-transform-es2015-classes": "^6.14.0", + "babel-plugin-transform-es2015-computed-properties": "^6.3.13", + "babel-plugin-transform-es2015-destructuring": "^6.9.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.6.0", + "babel-plugin-transform-es2015-for-of": "^6.6.0", + "babel-plugin-transform-es2015-function-name": "^6.9.0", + "babel-plugin-transform-es2015-literals": "^6.3.13", + "babel-plugin-transform-es2015-modules-amd": "^6.8.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.14.0", + "babel-plugin-transform-es2015-modules-umd": "^6.12.0", + "babel-plugin-transform-es2015-object-super": "^6.3.13", + "babel-plugin-transform-es2015-parameters": "^6.9.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.3.13", + "babel-plugin-transform-es2015-spread": "^6.3.13", + "babel-plugin-transform-es2015-sticky-regex": "^6.3.13", + "babel-plugin-transform-es2015-template-literals": "^6.6.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.6.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.3.13", + "babel-plugin-transform-regenerator": "^6.14.0" + } + }, "node_modules/babel-preset-fbjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", @@ -8335,6 +8607,18 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -8348,6 +8632,31 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -10991,6 +11300,19 @@ "node": ">= 8" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -11222,6 +11544,15 @@ "node": ">=4.0" } }, + "node_modules/immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -16203,7 +16534,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -16213,8 +16543,7 @@ "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -16445,11 +16774,55 @@ "nullthrows": "^1.1.1" } }, + "node_modules/react-native-encrypted-storage": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-native-encrypted-storage/-/react-native-encrypted-storage-4.0.3.tgz", + "integrity": "sha512-0pJA4Aj2S1PIJEbU7pN/Qvf7JIJx3hFywx+i+bLHtgK0/6Zryf1V2xVsWcrD50dfiu3jY1eN2gesQ5osGxE7jA==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-gesture-handler": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.8.0.tgz", + "integrity": "sha512-poOSfz/w0IyD6Qwq7aaIRRfEaVTl1ecQFoyiIbpOpfNTjm2B1niY2FLrdVQIOtIOe+K9nH55Qal04nr4jGkHdQ==", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-gradle-plugin": { "version": "0.70.3", "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==" }, + "node_modules/react-native-reanimated": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.13.0.tgz", + "integrity": "sha512-yUHyYVIegWWIza4+nVyS3CSmI/Mc8kLFVHw2c6gnSHaYhYA4LeEjH/jBkoMzHk9Xd0Ra3cwtjYKAMG8OTp6JVg==", + "dependencies": { + "@babel/plugin-transform-object-assign": "^7.16.7", + "@babel/preset-typescript": "^7.16.7", + "@types/invariant": "^2.2.35", + "invariant": "^2.2.4", + "lodash.isequal": "^4.5.0", + "setimmediate": "^1.0.5", + "string-hash-64": "^1.0.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-safe-area-context": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz", @@ -16522,6 +16895,49 @@ "react-deep-force-update": "^1.0.0" } }, + "node_modules/react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "dependencies": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "@types/react": "^16.8 || ^17.0 || ^18.0", + "@types/react-dom": "^16.8 || ^17.0 || ^18.0", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0", + "react-native": ">=0.59", + "redux": "^4" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + }, + "redux": { + "optional": true + } + } + }, + "node_modules/react-redux/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + }, "node_modules/react-refresh": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", @@ -16696,6 +17112,22 @@ "node": ">= 10.13.0" } }, + "node_modules/redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "dependencies": { + "@babel/runtime": "^7.9.2" + } + }, + "node_modules/redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "peerDependencies": { + "redux": "^4" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -16860,8 +17292,7 @@ "node_modules/reselect": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==", - "dev": true + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" }, "node_modules/resolve": { "version": "1.22.1", @@ -17670,6 +18101,19 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -18190,6 +18634,11 @@ } ] }, + "node_modules/string-hash-64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", + "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -20912,6 +21361,14 @@ "@babel/helper-plugin-utils": "^7.18.6" } }, + "@babel/plugin-transform-object-assign": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.18.6.tgz", + "integrity": "sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-transform-object-super": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", @@ -20957,6 +21414,15 @@ "@babel/types": "^7.19.0" } }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, "@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", @@ -20973,6 +21439,16 @@ "@babel/helper-plugin-utils": "^7.19.0" } }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, "@babel/plugin-transform-regenerator": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", @@ -21192,6 +21668,20 @@ "esutils": "^2.0.2" } }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, "@babel/preset-typescript": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", @@ -21366,6 +21856,14 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@egjs/hammerjs": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/@egjs/hammerjs/-/hammerjs-2.0.17.tgz", + "integrity": "sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==", + "requires": { + "@types/hammerjs": "^2.0.36" + } + }, "@eslint/eslintrc": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", @@ -23626,12 +24124,22 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-2.0.0.tgz", "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, - "@react-navigation/core": { - "version": "6.4.4", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.4.tgz", - "integrity": "sha512-skdTzr6sOceEusEDG+e58zaSpgy1Yz7eZGFtmkmdYAFkZDy5nkIY/0nYuXP0waUYarNXg6lNEVkF995/kZXHZg==", + "@react-navigation/bottom-tabs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-6.5.2.tgz", + "integrity": "sha512-iN3B1cgXdo64lqXdsTsCjN7n+5ILYKRexAu0VtW6EO8E6Z/0obK5JcCEropSiimRqVRs0kyuYj3F94Oth+hMrw==", "requires": { - "@react-navigation/routers": "^6.1.5", + "@react-navigation/elements": "^1.3.12", + "color": "^4.2.3", + "warn-once": "^0.1.0" + } + }, + "@react-navigation/core": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.5.tgz", + "integrity": "sha512-wcde35HeOM5r2P25EwLQZyJ1yhXDGKuWpnKfsSI1xrgYIvWdYi3j/yGnwgNGDelCmtUt1Fyk2pmOv8sEku9KkA==", + "requires": { + "@react-navigation/routers": "^6.1.6", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.1.3", @@ -23652,17 +24160,17 @@ } }, "@react-navigation/elements": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.10.tgz", - "integrity": "sha512-JFaoZG9S+Zz291CvAMeGw8kNl/g2AaY9Pbo+VcYO+JM6UF/E5Obq9ga2ydxDrn3an7wzdl6flA/4lWhqG82Vqw==", + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@react-navigation/elements/-/elements-1.3.12.tgz", + "integrity": "sha512-iVcLIYg/XJk1p6X1rSFhNhCjAJ3ORqNT2/bJqw7I/liujeJAoz1oZ5JDoEcZaA0wMDts1txxLuqAYJmhCgU2aA==", "requires": {} }, "@react-navigation/native": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.0.tgz", - "integrity": "sha512-CdjOmbE4c/UczczqeP7ZrFXJcjnXOCwY1PDNjX51Ph1b2tHXpQ41/089k3R49dc5i2sFLk6jKaryFU2dcLr8jw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.1.1.tgz", + "integrity": "sha512-iIozx9c66EjSFyzKrZPixnk6vBuivYXp0jmbKCJXNIa7MY+8OLx9CXj/+1py/l/OGlXDhI6jiUWWetOfOtMaBQ==", "requires": { - "@react-navigation/core": "^6.4.4", + "@react-navigation/core": "^6.4.5", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" @@ -23676,22 +24184,83 @@ } }, "@react-navigation/native-stack": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.5.tgz", - "integrity": "sha512-1ZIrla+b4gB8KDC6QewtZ/1yOS23bQctwR4Pf6ECA0stEH8ibbxh70iiI/LluL5CtWxrWfgOrl1jpQsVvtKY+Q==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@react-navigation/native-stack/-/native-stack-6.9.7.tgz", + "integrity": "sha512-YsBv4LldFErwQbqLCI/aWWDTpMf9SFS4IW3Qcefm+TZli9Ee7XpZMmFdotiZTz4KoYHbqhO1fuExjl2O7ZHrAQ==", "requires": { - "@react-navigation/elements": "^1.3.10", + "@react-navigation/elements": "^1.3.12", "warn-once": "^0.1.0" } }, "@react-navigation/routers": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.5.tgz", - "integrity": "sha512-JzMRiRRu8J0yUMC7BV8wOVzevjkHnIPONbpCTL/vH5yceTm+dSH/U3esIObgk8wYYbov+jYlVhwUQNGRb2to6g==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.6.tgz", + "integrity": "sha512-Z5DeCW3pUvMafbU9Cjy1qJYC2Bvl8iy3+PfsB0DsAwQ6zZ3WAXW5FTMX4Gb9H+Jg6qHWGbMFFwlYpS3UJ3tlVQ==", "requires": { "nanoid": "^3.1.23" } }, + "@react-spring/animated": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.6.1.tgz", + "integrity": "sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==", + "requires": { + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + } + }, + "@react-spring/core": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.6.1.tgz", + "integrity": "sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==", + "requires": { + "@react-spring/animated": "~9.6.1", + "@react-spring/rafz": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + } + }, + "@react-spring/native": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/native/-/native-9.6.1.tgz", + "integrity": "sha512-ZIfSytxFGLw4gYOb8gsmwG0+JZYxuM/Y1XPCXCkhuoMn+RmOYrr0kQ4gLczbmf+TRxth7OT1c8vBYz0+SCGcIQ==", + "requires": { + "@react-spring/animated": "~9.6.1", + "@react-spring/core": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + } + }, + "@react-spring/rafz": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.6.1.tgz", + "integrity": "sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ==" + }, + "@react-spring/shared": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.6.1.tgz", + "integrity": "sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==", + "requires": { + "@react-spring/rafz": "~9.6.1", + "@react-spring/types": "~9.6.1" + } + }, + "@react-spring/types": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.6.1.tgz", + "integrity": "sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==" + }, + "@react-spring/web": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.6.1.tgz", + "integrity": "sha512-X2zR6q2Z+FjsWfGAmAXlQaoUHbPmfuCaXpuM6TcwXPpLE1ZD4A1eys/wpXboFQmDkjnrlTmKvpVna1MjWpZ5Hw==", + "requires": { + "@react-spring/animated": "~9.6.1", + "@react-spring/core": "~9.6.1", + "@react-spring/shared": "~9.6.1", + "@react-spring/types": "~9.6.1" + } + }, "@react-stately/checkbox": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/@react-stately/checkbox/-/checkbox-3.3.1.tgz", @@ -23985,6 +24554,17 @@ "@react-types/shared": "^3.16.0" } }, + "@reduxjs/toolkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.1.tgz", + "integrity": "sha512-HikrdY+IDgRfRYlCTGUQaiCxxDDgM1mQrRbZ6S1HFZX5ZYuJ4o8EstNmhTwHdPl2rTmLxzwSu0b3AyeyTlR+RA==", + "requires": { + "immer": "^9.0.16", + "redux": "^4.2.0", + "redux-thunk": "^2.4.2", + "reselect": "^4.1.7" + } + }, "@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -24194,6 +24774,20 @@ "@types/node": "*" } }, + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", @@ -24203,6 +24797,11 @@ "@types/node": "*" } }, + "@types/invariant": { + "version": "2.2.35", + "resolved": "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.35.tgz", + "integrity": "sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg==" + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -24256,8 +24855,7 @@ "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "peer": true + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/qs": { "version": "6.9.7", @@ -24272,16 +24870,24 @@ "dev": true }, "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "peer": true, + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, + "@types/react-dom": { + "version": "18.0.9", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.9.tgz", + "integrity": "sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==", + "devOptional": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-native": { "version": "0.70.7", "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.70.7.tgz", @@ -24300,8 +24906,7 @@ "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "peer": true + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/serve-index": { "version": "1.9.1", @@ -24337,6 +24942,11 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/use-sync-external-store": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", + "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" + }, "@types/webpack": { "version": "5.28.0", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.0.tgz", @@ -25780,34 +26390,34 @@ } }, "babel-preset-es2015": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.14.0.tgz", - "integrity": "sha512-ogjLirrzjxgkMizNwNaTFslRhpKykJ3cboykPoBRyY1vwMAUVtu4F7jdISs9aTQlPYX2OLj5I4302vaYJ70Ohw==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha512-XfwUqG1Ry6R43m4Wfob+vHbIVBIqTg/TJY4Snku1iIzeH7mUnwHA8Vagmv+ZQbPwhS8HgsdQvy28Py3k5zpoFQ==", "requires": { - "babel-plugin-check-es2015-constants": "^6.3.13", - "babel-plugin-transform-es2015-arrow-functions": "^6.3.13", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13", - "babel-plugin-transform-es2015-block-scoping": "^6.14.0", - "babel-plugin-transform-es2015-classes": "^6.14.0", - "babel-plugin-transform-es2015-computed-properties": "^6.3.13", - "babel-plugin-transform-es2015-destructuring": "^6.9.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.6.0", - "babel-plugin-transform-es2015-for-of": "^6.6.0", - "babel-plugin-transform-es2015-function-name": "^6.9.0", - "babel-plugin-transform-es2015-literals": "^6.3.13", - "babel-plugin-transform-es2015-modules-amd": "^6.8.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.14.0", - "babel-plugin-transform-es2015-modules-umd": "^6.12.0", - "babel-plugin-transform-es2015-object-super": "^6.3.13", - "babel-plugin-transform-es2015-parameters": "^6.9.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.3.13", - "babel-plugin-transform-es2015-spread": "^6.3.13", - "babel-plugin-transform-es2015-sticky-regex": "^6.3.13", - "babel-plugin-transform-es2015-template-literals": "^6.6.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.6.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.3.13", - "babel-plugin-transform-regenerator": "^6.14.0" + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.24.1", + "babel-plugin-transform-es2015-classes": "^6.24.1", + "babel-plugin-transform-es2015-computed-properties": "^6.24.1", + "babel-plugin-transform-es2015-destructuring": "^6.22.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", + "babel-plugin-transform-es2015-for-of": "^6.22.0", + "babel-plugin-transform-es2015-function-name": "^6.24.1", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", + "babel-plugin-transform-es2015-modules-umd": "^6.24.1", + "babel-plugin-transform-es2015-object-super": "^6.24.1", + "babel-plugin-transform-es2015-parameters": "^6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.22.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", + "babel-plugin-transform-regenerator": "^6.24.1" } }, "babel-preset-es2016": { @@ -25847,6 +26457,39 @@ "babel-preset-es2017": "6.14.0", "co": "4.6.0", "modify-babel-preset": "3.2.0" + }, + "dependencies": { + "babel-preset-es2015": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.14.0.tgz", + "integrity": "sha512-ogjLirrzjxgkMizNwNaTFslRhpKykJ3cboykPoBRyY1vwMAUVtu4F7jdISs9aTQlPYX2OLj5I4302vaYJ70Ohw==", + "requires": { + "babel-plugin-check-es2015-constants": "^6.3.13", + "babel-plugin-transform-es2015-arrow-functions": "^6.3.13", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13", + "babel-plugin-transform-es2015-block-scoping": "^6.14.0", + "babel-plugin-transform-es2015-classes": "^6.14.0", + "babel-plugin-transform-es2015-computed-properties": "^6.3.13", + "babel-plugin-transform-es2015-destructuring": "^6.9.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.6.0", + "babel-plugin-transform-es2015-for-of": "^6.6.0", + "babel-plugin-transform-es2015-function-name": "^6.9.0", + "babel-plugin-transform-es2015-literals": "^6.3.13", + "babel-plugin-transform-es2015-modules-amd": "^6.8.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.14.0", + "babel-plugin-transform-es2015-modules-umd": "^6.12.0", + "babel-plugin-transform-es2015-object-super": "^6.3.13", + "babel-plugin-transform-es2015-parameters": "^6.9.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.3.13", + "babel-plugin-transform-es2015-spread": "^6.3.13", + "babel-plugin-transform-es2015-sticky-regex": "^6.3.13", + "babel-plugin-transform-es2015-template-literals": "^6.6.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.6.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.3.13", + "babel-plugin-transform-regenerator": "^6.14.0" + } + } } }, "babel-preset-fbjs": { @@ -26499,6 +27142,30 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -26512,6 +27179,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -28517,6 +29193,21 @@ } } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -28694,6 +29385,11 @@ "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==" }, + "immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -32514,7 +33210,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -32524,8 +33219,7 @@ "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, @@ -32723,11 +33417,43 @@ "nullthrows": "^1.1.1" } }, + "react-native-encrypted-storage": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/react-native-encrypted-storage/-/react-native-encrypted-storage-4.0.3.tgz", + "integrity": "sha512-0pJA4Aj2S1PIJEbU7pN/Qvf7JIJx3hFywx+i+bLHtgK0/6Zryf1V2xVsWcrD50dfiu3jY1eN2gesQ5osGxE7jA==", + "requires": {} + }, + "react-native-gesture-handler": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.8.0.tgz", + "integrity": "sha512-poOSfz/w0IyD6Qwq7aaIRRfEaVTl1ecQFoyiIbpOpfNTjm2B1niY2FLrdVQIOtIOe+K9nH55Qal04nr4jGkHdQ==", + "requires": { + "@egjs/hammerjs": "^2.0.17", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "prop-types": "^15.7.2" + } + }, "react-native-gradle-plugin": { "version": "0.70.3", "resolved": "https://registry.npmjs.org/react-native-gradle-plugin/-/react-native-gradle-plugin-0.70.3.tgz", "integrity": "sha512-oOanj84fJEXUg9FoEAQomA8ISG+DVIrTZ3qF7m69VQUJyOGYyDZmPqKcjvRku4KXlEH6hWO9i4ACLzNBh8gC0A==" }, + "react-native-reanimated": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.13.0.tgz", + "integrity": "sha512-yUHyYVIegWWIza4+nVyS3CSmI/Mc8kLFVHw2c6gnSHaYhYA4LeEjH/jBkoMzHk9Xd0Ra3cwtjYKAMG8OTp6JVg==", + "requires": { + "@babel/plugin-transform-object-assign": "^7.16.7", + "@babel/preset-typescript": "^7.16.7", + "@types/invariant": "^2.2.35", + "invariant": "^2.2.4", + "lodash.isequal": "^4.5.0", + "setimmediate": "^1.0.5", + "string-hash-64": "^1.0.3" + } + }, "react-native-safe-area-context": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz", @@ -32777,6 +33503,26 @@ "react-deep-force-update": "^1.0.0" } }, + "react-redux": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.5.tgz", + "integrity": "sha512-Q2f6fCKxPFpkXt1qNRZdEDLlScsDWyrgSj0mliK59qU6W5gvBiKkdMEG2lJzhd1rCctf0hb6EtePPLZ2e0m1uw==", + "requires": { + "@babel/runtime": "^7.12.1", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/use-sync-external-store": "^0.0.3", + "hoist-non-react-statics": "^3.3.2", + "react-is": "^18.0.0", + "use-sync-external-store": "^1.0.0" + }, + "dependencies": { + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + } + } + }, "react-refresh": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", @@ -32915,6 +33661,20 @@ "resolve": "^1.20.0" } }, + "redux": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", + "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", + "requires": { + "@babel/runtime": "^7.9.2" + } + }, + "redux-thunk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz", + "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==", + "requires": {} + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -33045,8 +33805,7 @@ "reselect": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.7.tgz", - "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==", - "dev": true + "integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A==" }, "resolve": { "version": "1.22.1", @@ -33695,6 +34454,21 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -34116,6 +34890,11 @@ } } }, + "string-hash-64": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string-hash-64/-/string-hash-64-1.0.3.tgz", + "integrity": "sha512-D5OKWKvDhyVWWn2x5Y9b+37NUllks34q1dCDhk/vYcso9fmhs+Tl3KR/gE4v5UNj2UA35cnX4KdVVGkG1deKqw==" + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", diff --git a/package.json b/package.json index 4d248d8..b68f8c1 100644 --- a/package.json +++ b/package.json @@ -12,23 +12,35 @@ "lint": "eslint ." }, "dependencies": { - "@react-navigation/native": "^6.1.0", - "@react-navigation/native-stack": "^6.9.5", + "@react-navigation/bottom-tabs": "^6.5.2", + "@react-navigation/native": "^6.1.1", + "@react-navigation/native-stack": "^6.9.7", + "@react-spring/native": "^9.6.1", + "@react-spring/web": "^9.6.1", + "@reduxjs/toolkit": "^1.9.1", + "babel-preset-es2015": "^6.24.1", "babel-preset-esnext": "^1.1.3", "babel-preset-react": "^6.24.1", "native-base": "^3.4.23", "react": "^18.1.0", "react-dom": "18.1.0", "react-native": "0.70.6", + "react-native-encrypted-storage": "^4.0.3", + "react-native-gesture-handler": "^2.8.0", + "react-native-reanimated": "^2.13.0", "react-native-safe-area-context": "^4.4.1", "react-native-screens": "^3.18.2", - "react-native-web": "^0.18.10" + "react-native-web": "^0.18.10", + "react-redux": "^8.0.5" }, "devDependencies": { "@babel/core": "^7.12.9", - "@babel/runtime": "^7.12.5", + "@babel/preset-react": "^7.18.6", + "@babel/runtime": "^7.20.6", "@react-native-community/eslint-config": "^2.0.0", "@types/node": "^18.11.10", + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.9", "@types/webpack": "^5.28.0", "babel-jest": "^26.6.3", "babel-loader": "^9.1.0", diff --git a/src/App copy.tsx b/src/App copy.tsx new file mode 100644 index 0000000..6f05eef --- /dev/null +++ b/src/App copy.tsx @@ -0,0 +1,143 @@ +import React, {useState, useEffect} from 'react'; + +import {StyleSheet, Appearance} from 'react-native'; +import { + NativeBaseProvider, + Box, + Input, + Text, + Button, + useColorMode, + useColorModeValue, + StatusBar, + VStack, + Center, + Avatar, +} from 'native-base'; +import {NavigationContainer} from '@react-navigation/native'; +import {SafeAreaProvider, SafeAreaView} from 'react-native-safe-area-context'; + +import {theme} from '@caj/configs/colors'; + +import imgSrc from '@caj/img/maimg.png'; + +interface User { + name: string; + id: number; +} + +const user: User = { + name: 'Hayes', + id: 0, +}; + +function TestContent() { + const {colorMode, toggleColorMode, setColorMode} = useColorMode(); + + //var bg = useColorModeValue('dark', 'coolGray.800'); + + const [curTheme, setTheme] = useState(1); + var bg = '#222'; + + if (curTheme !== 1) bg = curTheme === 0 ? '#000' : '#fff'; + + console.log(colorMode); + const toggleSwitch = () => { + console.log('switch'); + toggleColorMode(); + }; + + return ( + + +
+
+
+ + ma boyy :--))) + + + EM + + + + + + +
+
+
+ +
+
+
+ +
+
+
+ + + ); +} + +const Bar = () => { + const {colorMode, toggleColorMode} = useColorMode(); + + return ( + + ); +}; + +const App = () => { + useEffect(() => { + // this code will run once + }, []) + + return ( + + + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + height: '100%', + flex: 1, + }, +}); +/* +const styles = StyleSheet.create({ + baseText: { + fontFamily: 'Cochin', + }, + titleText: { + fontSize: 20, + fontWeight: 'bold', + }, + image: { + width: 500, + height: 500, + borderWidth: 1, + }, +});*/ + +export default App; diff --git a/src/App.tsx b/src/App.tsx index 755e072..a2a366e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,143 +1,69 @@ -import React, {useState} from 'react'; +import React, {useState, useEffect, Fragment} from 'react'; -import {StyleSheet, Appearance} from 'react-native'; -import { - NativeBaseProvider, - Box, - Input, - Text, - Button, - useColorMode, - useColorModeValue, - StatusBar, - VStack, - Center, - Avatar, -} from 'native-base'; +import {NativeBaseProvider} from 'native-base'; import {NavigationContainer} from '@react-navigation/native'; -import {SafeAreaProvider, SafeAreaView} from 'react-native-safe-area-context'; -import {theme} from '@caj/configs/colors'; +import {getBackgroundColor, theme, ThemeSwitcher} from '@caj/configs/colors'; -import imgSrc from '@caj/img/maimg.png'; +import StatusBar from './StatusBar'; +import Navigation, {linking} from './Navigation'; -interface User { - name: string; - id: number; -} - -const user: User = { - name: 'Hayes', - id: 0, -}; - -function TestContent() { - const {colorMode, toggleColorMode, setColorMode} = useColorMode(); - - //var bg = useColorModeValue('dark', 'coolGray.800'); - - const [curTheme, setTheme] = useState(1); - var bg = '#222'; - - if (curTheme !== 1) bg = curTheme === 0 ? '#000' : '#fff'; - - console.log(colorMode); - const toggleSwitch = () => { - console.log('switch'); - toggleColorMode(); - }; - - return ( - - -
-
-
- - ma boyy :--))) - - - EM - - - - - - -
-
-
- -
-
-
- -
-
-
- - - ); -} - -const Bar = () => { - const {colorMode, toggleColorMode} = useColorMode(); - - return ( - - ); -}; +import {Provider, useSelector} from 'react-redux'; +import {RootState, store} from '@caj/redux/store'; +import StartHelper from './appStart/StartHelper'; +import {appStatus} from '@caj/configs/appNonSaveVar'; +import {ThemeMode} from '@caj/configs/appVar'; const App = () => { useEffect(() => { - // this code will run once - }, []) + console.log('App opened.'); + }, []); return ( - + + + + ); +}; + +const OtherProviders = () => { + const globalTheme = useSelector( + (state: RootState) => state.appVariables.preferences.theme, + ); + + const navigationTheme = { + dark: globalTheme !== ThemeMode.Light, + colors: { + primary: '#ff7d4f', + background: getBackgroundColor(globalTheme), + card: '#222', + text: '#fff', + border: '#ff7d4f', + notification: '#fff', + }, + }; + + return ( + - - + ); }; -const styles = StyleSheet.create({ - container: { - height: '100%', - flex: 1, - }, -}); -/* -const styles = StyleSheet.create({ - baseText: { - fontFamily: 'Cochin', - }, - titleText: { - fontSize: 20, - fontWeight: 'bold', - }, - image: { - width: 500, - height: 500, - borderWidth: 1, - }, -});*/ +const MainComponent = () => { + const currentAppStatus = useSelector( + (state: RootState) => state.nonSaveVariables.appStatus, + ); + return ( + + + + + {currentAppStatus === appStatus.APP_RUNNING ? : null} + + ); +}; export default App; diff --git a/src/Navigation copy.tsx b/src/Navigation copy.tsx new file mode 100644 index 0000000..1671609 --- /dev/null +++ b/src/Navigation copy.tsx @@ -0,0 +1,105 @@ +import React, {useState, useEffect} from 'react'; + +import {StyleSheet, Appearance} from 'react-native'; +import {Box, Input, Text, Button, VStack, Center, Avatar} from 'native-base'; +import {NavigationContainer} from '@react-navigation/native'; +import {SafeAreaProvider, SafeAreaView} from 'react-native-safe-area-context'; + +import {useSelector, useDispatch} from 'react-redux'; +import {RootState} from '@caj/redux/store'; +import {appVarActions} from '@caj/configs/appVarReducer'; + +import imgSrc from '@caj/img/maimg.png'; +import {placeholder} from '@caj/lang/default'; +import {getBackgroundColor} from '@caj/configs/colors'; +import {saveVarChanges} from '@caj/helper/appData'; + +function CounterNum() { + const lang = useSelector((state: RootState) => state.appVariables.lang); + const version = useSelector( + (state: RootState) => state.appVariables.preferences.version, + ); + + return {placeholder(lang.curVersion, {version})}; +} + +export default function Navigation() { + const theme = useSelector( + (state: RootState) => state.appVariables.preferences.theme, + ); + + const dispatch = useDispatch(); + + //const {colorMode, toggleColorMode, setColorMode} = useColorMode(); + + //var bg = useColorModeValue('dark', 'coolGray.800'); + + //const [curTheme, setTheme] = useState(1); + + return ( + + +
+
+
+ + + + + EM + + + + + + + + + +
+
+
+ +
+
+
+ +
+
+
+ + + ); +} + +const styles = StyleSheet.create({ + container: { + height: '100%', + flex: 1, + }, +}); diff --git a/src/Navigation.tsx b/src/Navigation.tsx new file mode 100644 index 0000000..8e68491 --- /dev/null +++ b/src/Navigation.tsx @@ -0,0 +1,139 @@ +import React, {useState, useEffect} from 'react'; + +import {StyleSheet, Appearance} from 'react-native'; +import {SafeAreaProvider, SafeAreaView} from 'react-native-safe-area-context'; + +import {useSelector, useDispatch} from 'react-redux'; +import {RootState} from '@caj/redux/store'; +import {appVarActions} from '@caj/configs/appVarReducer'; + +import imgSrc from '@caj/img/maimg.png'; +import {placeholder} from '@caj/lang/default'; +import {getBackgroundColor} from '@caj/configs/colors'; +import {saveVarChanges} from '@caj/helper/appData'; + +import {Box, Input, VStack, Center, Avatar, Text, Button} from 'native-base'; +import {View} from 'react-native'; + +import { + LinkingOptions, + NavigationContainer, + useNavigation, +} from '@react-navigation/native'; +import { + createNativeStackNavigator, + NativeStackNavigationProp, +} from '@react-navigation/native-stack'; +import {createBottomTabNavigator} from '@react-navigation/bottom-tabs'; + +const styles = StyleSheet.create({ + container: { + height: '100%', + flex: 1, + }, +}); + +export const linking: LinkingOptions<{ + Auth: string; + Home: string; + Table: string; + Loading: string; +}> = { + prefixes: ['http://'], + config: { + initialRouteName: 'Loading', + screens: { + Auth: 'auth', + Home: 'home', + Table: 'table', + Loading: 'loading', + }, + }, +}; + +export type HomeStackNavigatorParamList = { + Home: undefined; + Maps: undefined; + Chat: undefined; + Test: undefined; + Settings: undefined; +}; + +export type HomeScreenNavigationProp = + NativeStackNavigationProp; + +export default function Navigation() { + const theme = useSelector( + (state: RootState) => state.appVariables.preferences.theme, + ); + + const dispatch = useDispatch(); + + return ( + + + + + + ); +} + +function ChatScreen() { + return ( + + Chat! + + ); +} + +function HomeScreen() { + const navigation = useNavigation(); + return ( + + Home screen + + + ); +} + +function SettingsScreen() { + const navigation = useNavigation(); + return ( + + Settings screen + + + ); +} + +const HomeStack = createNativeStackNavigator(); + +function HomeStackScreen() { + return ( + + + + + ); +} + +const SettingsStack = createNativeStackNavigator(); + +function SettingsStackScreen() { + return ( + + + + + ); +} + +const Tab = createBottomTabNavigator(); diff --git a/src/StatusBar.tsx b/src/StatusBar.tsx new file mode 100644 index 0000000..5ac5f46 --- /dev/null +++ b/src/StatusBar.tsx @@ -0,0 +1,15 @@ +import {useColorMode} from 'native-base'; + +import {StatusBar as NBStatusBar} from 'native-base'; + +export default function StatusBar() { + const {colorMode} = useColorMode(); + + return ( + + ); +} diff --git a/src/appStart/StartHelper.tsx b/src/appStart/StartHelper.tsx new file mode 100644 index 0000000..acb37fa --- /dev/null +++ b/src/appStart/StartHelper.tsx @@ -0,0 +1,104 @@ +import {Platform, StyleSheet, View, ScrollView} from 'react-native'; + +import {Center, Heading, Text, Spinner, HStack} from 'native-base'; +import {animated, useSpring} from '@react-spring/native'; + +import {SafeAreaView} from 'react-native-safe-area-context'; + +import {useSelector, useDispatch} from 'react-redux'; +import {RootState, store} from '@caj/redux/store'; + +import imgSrc from '@caj/img/maimg.png'; +import {placeholder} from '@caj/lang/default'; +import {getBackgroundColor} from '@caj/configs/colors'; +import {useEffect} from 'react'; +import {initAppData} from '@caj/helper/appData'; +import {appStatus} from '@caj/configs/appNonSaveVar'; +import {appNonSaveVarActions} from '@caj/configs/appNonSaveVarReducer'; + +const AnimationView = animated(View); + +function onAppStart() { + initAppData().then(() => { + console.log('finish'); + setTimeout(() => { + store.dispatch(appNonSaveVarActions.setAppStatus(appStatus.APP_RUNNING)); + }, 500); + //store.dispatch(actions.loadPreferences(appVar)); + }); +} + +function StartHelper() { + const currentAppStatus = useSelector( + (state: RootState) => state.nonSaveVariables.appStatus, + ); + + const lang = useSelector((state: RootState) => state.appVariables.lang); + const theme = useSelector( + (state: RootState) => state.appVariables.preferences.theme, + ); + + const [motionProps, api] = useSpring( + () => ({ + from: { + translateX: -150, + width: 4, + opacity: 1, + }, + }), + [], + ); + + useEffect(() => { + api.start({ + to: [ + { + translateX: 150, + width: 4, + opacity: 1, + }, + { + translateX: -150, + width: 4, + opacity: 1, + }, + ], + loop: true, + }); + }, []); + + useEffect(onAppStart, []); + + if (currentAppStatus === appStatus.APP_RUNNING) return null; + + return ( + +
+ + {lang.appName} + + + + + {lang.startHelper1} + + +
+
+ ); +} + +export default StartHelper; diff --git a/src/caj/configs/appData.ts b/src/caj/configs/appData.ts deleted file mode 100644 index 6c83f01..0000000 --- a/src/caj/configs/appData.ts +++ /dev/null @@ -1,5 +0,0 @@ - - -export function initAppData() { - -} \ No newline at end of file diff --git a/src/caj/configs/appNonSaveVar.ts b/src/caj/configs/appNonSaveVar.ts new file mode 100644 index 0000000..a9737dd --- /dev/null +++ b/src/caj/configs/appNonSaveVar.ts @@ -0,0 +1,30 @@ +//these variables should not changed by the user and will not be saved in storage + +import {getVersionByNum, VersionType} from '@caj/helper/version'; + +export const APP_VERSION = getVersionByNum(2); +export const AppVarMaxBackups: number = 10; + +export enum appStatus { + IS_LOADING, + APP_RUNNING, +} + +export enum connectionStatus { + UNKNOWN, + OFFLINE, + ONLINE, + RECONNECTING, +} + +export interface NON_SAVE_VARS { + currentAppVersion: VersionType; + appStatus: appStatus; + connectionStatus: connectionStatus; +} + +export const non_save_vars: NON_SAVE_VARS = { + currentAppVersion: APP_VERSION, + appStatus: appStatus.IS_LOADING, + connectionStatus: connectionStatus.UNKNOWN, +}; diff --git a/src/caj/configs/appNonSaveVarReducer.ts b/src/caj/configs/appNonSaveVarReducer.ts new file mode 100644 index 0000000..4f5cd0e --- /dev/null +++ b/src/caj/configs/appNonSaveVarReducer.ts @@ -0,0 +1,20 @@ +import {createSlice} from '@reduxjs/toolkit'; +import type {PayloadAction} from '@reduxjs/toolkit'; + +import {appStatus, non_save_vars} from './appNonSaveVar'; + +export const appNonSaveVariablesSlice = createSlice({ + name: 'non_save_vars', + initialState: non_save_vars, + reducers: { + setAppStatus: (state, action: PayloadAction) => { + state.appStatus = action.payload; + }, + }, +}); + +// Action creators are generated for each case reducer function +const {actions} = appNonSaveVariablesSlice; +export const appNonSaveVarActions = actions; + +export default appNonSaveVariablesSlice.reducer; diff --git a/src/caj/configs/appVar.ts b/src/caj/configs/appVar.ts new file mode 100644 index 0000000..5572010 --- /dev/null +++ b/src/caj/configs/appVar.ts @@ -0,0 +1,55 @@ +import {VersionType} from '@caj/helper/version'; +import {APP_VERSION} from './appNonSaveVar'; + +export enum ThemeMode { + Darkest = 0, + Dark = 1, + Light = 2, +} + +export function applyUpdateChanges(appVar: any): Promise { + return new Promise(function (resolve, reject) { + appVar.version += 1; + + console.log(appVar.version); + + function finish() { + resolve(); + } + + switch (appVar.version) { + case 3: { + let appVarF = appVar as PREFERENCES_VARS; + + appVar = appVarF; + finish(); + break; + } + + case 2: { + let appVarF = appVar; + + appVar = appVarF; + finish(); + break; + } + + default: { + finish(); + break; + } + } + }); +} + +//these variables may be changed by the user and will be saved in storage + +export interface PREFERENCES_VARS { + version: VersionType; + theme: ThemeMode; +} + +export const preferences_vars_default: PREFERENCES_VARS = { + version: APP_VERSION, //version of datatypes in storage + theme: ThemeMode.Dark, +}; diff --git a/src/caj/configs/appVarReducer.ts b/src/caj/configs/appVarReducer.ts new file mode 100644 index 0000000..c2dc1a5 --- /dev/null +++ b/src/caj/configs/appVarReducer.ts @@ -0,0 +1,39 @@ +import {createSlice} from '@reduxjs/toolkit'; +import type {PayloadAction} from '@reduxjs/toolkit'; + +import {PREFERENCES_VARS, preferences_vars_default, ThemeMode} from './appVar'; +import {non_save_vars, NON_SAVE_VARS} from './appNonSaveVar'; +import LangFormat from '@caj/lang/default'; +import {lang as defaultLang} from '@caj/lang/en'; + +export interface appVariablesState { + preferences: PREFERENCES_VARS; + lang: LangFormat; +} + +const initialState: appVariablesState = { + preferences: preferences_vars_default, + lang: defaultLang, +}; + +export const appVariablesSlice = createSlice({ + name: 'appVariables', + initialState, + reducers: { + setTheme: (state, action: PayloadAction) => { + state.preferences.theme = action.payload; + }, + setLang: (state, action: PayloadAction) => { + state.lang = action.payload; + }, + loadPreferences: (state, action: PayloadAction) => { + state.preferences = action.payload; + }, + }, +}); + +// Action creators are generated for each case reducer function +const {actions} = appVariablesSlice; +export const appVarActions = actions; + +export default appVariablesSlice.reducer; diff --git a/src/caj/configs/colors.ts b/src/caj/configs/colors.ts index 16d26d3..c9e17dc 100644 --- a/src/caj/configs/colors.ts +++ b/src/caj/configs/colors.ts @@ -1,4 +1,10 @@ -import { extendTheme } from 'native-base'; +import {Platform} from 'react-native'; +import {extendTheme, useColorMode} from 'native-base'; +import {ThemeMode} from './appVar'; + +import {useSelector} from 'react-redux'; +import {RootState} from '@caj/redux/store'; +import {useEffect} from 'react'; export const theme = extendTheme({ config: { @@ -18,23 +24,18 @@ export const theme = extendTheme({ 300: '#292929', 800: '#181725', }, - green: { - 300: '#53B175', - }, + primary: { - 50: '#E3F2F9', - 100: '#C5E4F3', - 200: '#A2D4EC', - 300: '#7AC1E4', - 400: '#47A9DA', - 500: '#0088CC', - 600: '#007AB8', - 700: '#006BA1', - 800: '#005885', - 900: '#003F5E', - }, - amber: { - 400: '#d97706', + 50: '#fff4f1', + 100: '#ffd6c9', + 200: '#ffb9a1', + 300: '#ff9b79', + 400: '#ff7d50', + 500: '#f96e40', + 600: '#f26030', + 700: '#e95321', + 800: '#d54b1d', + 900: '#ba4721', }, }, components: { @@ -76,4 +77,43 @@ export const theme = extendTheme({ }, }, }, -}); \ No newline at end of file +}); + +export function getBackgroundColor(tm: ThemeMode): string { + switch (tm) { + case ThemeMode.Light: + return '#fff'; + case ThemeMode.Darkest: + return '#000'; + default: + return '#282f34'; + } +} + +export function isThemeDark(tm: ThemeMode): boolean { + return tm <= 1; +} + +export function ThemeSwitcher() { + const myTheme = useSelector( + (state: RootState) => state.appVariables.preferences.theme, + ); + const {setColorMode} = useColorMode(); + + useEffect(() => { + if (myTheme === ThemeMode.Darkest || myTheme === ThemeMode.Dark) + setColorMode('dark'); + else setColorMode('light'); + + if (Platform.OS === 'web') { + document.body.setAttribute( + 'style', + 'background: ' + getBackgroundColor(myTheme) + ';', + ); + } + + console.log('refreshed'); + }, [myTheme]); + + return null; +} diff --git a/src/caj/configs/storage/appData.android.ts b/src/caj/configs/storage/appData.android.ts deleted file mode 100644 index 019cf4f..0000000 --- a/src/caj/configs/storage/appData.android.ts +++ /dev/null @@ -1,3 +0,0 @@ - - -export const testt = { data: "hellow :33 liebe diese Android"}; \ No newline at end of file diff --git a/src/caj/configs/storage/appData.ios.ts b/src/caj/configs/storage/appData.ios.ts deleted file mode 100644 index 2145b8c..0000000 --- a/src/caj/configs/storage/appData.ios.ts +++ /dev/null @@ -1,3 +0,0 @@ - - -export const testt = { data: "hellow :33 liebe diese ios"}; \ No newline at end of file diff --git a/src/caj/configs/storage/appData.web.ts b/src/caj/configs/storage/appData.web.ts deleted file mode 100644 index c0a20e9..0000000 --- a/src/caj/configs/storage/appData.web.ts +++ /dev/null @@ -1,3 +0,0 @@ - - -export const testt = { data: "hellow :33 liebe diese WEB"}; \ No newline at end of file diff --git a/src/caj/helper/animator.ts b/src/caj/helper/animator.ts new file mode 100644 index 0000000..9de6338 --- /dev/null +++ b/src/caj/helper/animator.ts @@ -0,0 +1 @@ +export {animated, useSpring} from '@react-spring/native'; diff --git a/src/caj/helper/animator.web.ts b/src/caj/helper/animator.web.ts new file mode 100644 index 0000000..5336fd8 --- /dev/null +++ b/src/caj/helper/animator.web.ts @@ -0,0 +1 @@ +export {animated, useSpring} from '@react-spring/web'; diff --git a/src/caj/helper/appData.ts b/src/caj/helper/appData.ts new file mode 100644 index 0000000..0bdad38 --- /dev/null +++ b/src/caj/helper/appData.ts @@ -0,0 +1,198 @@ +import { + applyUpdateChanges, + PREFERENCES_VARS, + preferences_vars_default, +} from '@caj/configs/appVar'; +import {AppVarMaxBackups, APP_VERSION} from '@caj/configs/appNonSaveVar'; +import {appVarActions} from '@caj/configs/appVarReducer'; +import {store} from '@caj/redux/store'; +import {getData, setData} from './storage/appData'; +import {getVersionByType, stepUpVersionCalc} from './version'; + +const APP_CHANGE_BACKUP = 'appVerChangeBackup'; + +function setAppVar(appVar: PREFERENCES_VARS) { + store.dispatch(appVarActions.loadPreferences(appVar)); +} + +function makeBackup(key: string, version: number): Promise { + return new Promise(function (resolve, reject) { + getData('appVar').then(value => { + if (value !== null) { + setData(key + '#' + version, value).then(() => { + resolve(); + }); + } else { + resolve(); + } + }); + }); +} + +function refreshVersion(from: number, to: number): Promise { + return new Promise(function (resolve, reject) { + if (from < to) { + // app upgrade + console.log('app upgrade detected!'); + finish(); + } else if (from > to) { + // app downgrade + console.log('app downgrade detected!'); + finish(); + } else { + // app version not changed + finish(); + } + + function finish() { + setData('appVersion', APP_VERSION.toString()).then(() => { + resolve(); + }); + } + }); +} + +export function initAppData(): Promise { + return new Promise(function (resolve, reject) { + let appVer: number = -1; + + getData('appVersion').then(_ver => { + appVer = typeof _ver === 'string' ? Number.parseInt(_ver) : -1; + + if (appVer === -1) { + // no version found in storage + setData('appVersion', APP_VERSION.toString()).then(() => { + appVer = APP_VERSION; + preferencesPull(); + }); + + return; + } else if (appVer < APP_VERSION) { + // found outdated version: make backup; and upgrade + makeBackup(APP_CHANGE_BACKUP, appVer).then(() => { + refreshVersion(appVer, APP_VERSION).then(() => { + preferencesPull(); + }); + }); + } else if (appVer > APP_VERSION) { + // version is too high: make backup; and "downgrade" + makeBackup(APP_CHANGE_BACKUP, appVer).then(() => { + refreshVersion(appVer, APP_VERSION).then(() => { + preferencesPull(); + }); + }); + } + preferencesPull(); + }); + + function resetPreferences() { + let appVar = preferences_vars_default; + + setData('appVar', JSON.stringify(appVar)).then(() => { + setAppVar(appVar); + resolve(); + }); + } + + function tryToApplyPreferences( + appVar: PREFERENCES_VARS, + didUpdate = false, + ) { + if (appVar.version < APP_VERSION) { + { + console.log('ver', appVar.version); + console.log('config update needed until', APP_VERSION, appVar); + applyUpdateChanges(appVar).then(() => { + tryToApplyPreferences(appVar, true); + }); + return; + } + } + + const changed = checkForUndefined(preferences_vars_default, appVar); + + if (didUpdate === true || changed === true) { + setData('appVar', JSON.stringify(appVar)).then(() => { + setAppVar(appVar); + resolve(); + }); + } else { + setAppVar(appVar); + resolve(); + } + } + + function preferencesPull() { + getData('appVar').then(value => { + if (value === null) { + resetPreferences(); + } else { + let appVarRaw = null; + let isNoJSON = false; + try { + appVarRaw = JSON.parse(value); + } catch (error) { + console.error('corrupt appVar! :('); + isNoJSON = true; + } + + if (isNoJSON) { + getData('appVarBackupIndex').then(_index => { + let index: number = + typeof _index === 'string' + ? Number.parseInt(_index) + : AppVarMaxBackups; + index--; + if (index < 0) index = AppVarMaxBackups - 1; + + setData('appVarBackup' + index, value).then(() => { + setData('appVarBackupIndex', index.toString()).then(() => { + resetPreferences(); + }); + }); + }); + } else { + let appVar: PREFERENCES_VARS = appVarRaw; + + tryToApplyPreferences(appVar); + } + } + }); + } + }); +} + +export function saveVarChanges() { + let appVar = store.getState().appVariables.preferences; + setData('appVar', JSON.stringify(appVar)).then(() => { + console.log('saved!'); + }); +} + +export function checkForUndefined(objDef: any, objReal: any): boolean { + let changed = false; + + function checkObj(objDef: any, objReal: any) { + for (const key in objDef) { + const defValue = objDef[key]; + let realValue = objReal[key]; + + if (typeof defValue === 'undefined') continue; + + if (typeof realValue === 'undefined' || realValue === null) { + objReal[key] = defValue; + + changed = true; + console.log(key); + } else if ( + typeof defValue === 'object' && + typeof realValue === 'object' + ) { + checkObj(defValue, realValue); + } + } + } + + checkObj(objDef, objReal); + return changed; +} diff --git a/src/caj/helper/storage/appData.ts b/src/caj/helper/storage/appData.ts new file mode 100644 index 0000000..18a451a --- /dev/null +++ b/src/caj/helper/storage/appData.ts @@ -0,0 +1,9 @@ +import EncryptedStorage from 'react-native-encrypted-storage'; + +export async function getData(key: string): Promise { + return EncryptedStorage.getItem(key); +} + +export async function setData(key: string, value: string): Promise { + return EncryptedStorage.setItem(key, value); +} diff --git a/src/caj/helper/storage/appData.web.ts b/src/caj/helper/storage/appData.web.ts new file mode 100644 index 0000000..ddeac7c --- /dev/null +++ b/src/caj/helper/storage/appData.web.ts @@ -0,0 +1,13 @@ +export async function getData(key: string): Promise { + return new Promise(resolve => { + const data = localStorage.getItem(key); + resolve(data); + }); +} + +export async function setData(key: string, value: string): Promise { + return new Promise(resolve => { + localStorage.setItem(key, value); + resolve(); + }); +} diff --git a/src/caj/helper/version.ts b/src/caj/helper/version.ts new file mode 100644 index 0000000..a6ceabf --- /dev/null +++ b/src/caj/helper/version.ts @@ -0,0 +1,39 @@ +export enum VersionType {} + +export function getVersionByNum(ver: number): VersionType { + return ver; +} + +export function getVersionByType(ver: VersionType): number { + return ver; +} + +export function stepUpVersionCalc( + ver: VersionType, + steps: number, +): VersionType { + return ver + steps; +} + +/*const VersionFactor = 1; + +export function getVersionByNum(ver: number): VersionType { + let verObj: VersionType; + verObj = ver * VersionFactor; + + return verObj; +} + +export function getVersionByType(ver: VersionType): number { + let verObj: number; + verObj = Math.floor(ver / VersionFactor); + + return verObj; +} + +export function stepUpVersionCalc( + ver: VersionType, + steps: number, +): VersionType { + return ver + steps * VersionFactor; +}*/ diff --git a/src/caj/lang/default.ts b/src/caj/lang/default.ts new file mode 100644 index 0000000..7b8c58f --- /dev/null +++ b/src/caj/lang/default.ts @@ -0,0 +1,47 @@ +import {type} from 'os'; + +interface LangDetails { + langCode: string; + langName: string; +} + +export default interface LangFormat { + details: LangDetails; + curVersion: string; + appName: string; + startHelper1: string; +} + +interface LangPlaceholderKeys { + version?: number; + appName?: string; +} + +export function placeholder(text: string, data: LangPlaceholderKeys): string { + let out = text; + + for (const key in data) { + const rawValue = data[key as keyof LangPlaceholderKeys]; + + let _value: any = + typeof rawValue === 'number' ? rawValue.toString() : rawValue; + + if (typeof rawValue === 'undefined') _value = 'undefined'; + let value: string = _value; + + out = out.replaceAll('${' + key + '}', value); + } + + return out; +} + +/* +var str = 'Good ${timeOfTheDay}, ${name}. I am from ${city}, ${age} years old'; + +var parts = str.split(/(\$\{\w+?})/g).map(function(v) { + var replaced = v.replace(/\$\{(\w+?)}/g, '$1'); + return content[replaced] || v; +}); + +console.log(parts.join('')); + */ diff --git a/src/caj/lang/en.ts b/src/caj/lang/en.ts new file mode 100644 index 0000000..4076eaf --- /dev/null +++ b/src/caj/lang/en.ts @@ -0,0 +1,12 @@ +import StartHelper from 'src/appStart/StartHelper'; +import LangFormat from './default'; + +export const lang: LangFormat = { + details: { + langCode: 'en', + langName: 'English', + }, + curVersion: 'Your current version is v${version}.', + appName: 'Click And Join', + startHelper1: 'Your data will be loaded :)', +}; diff --git a/src/caj/redux/store.ts b/src/caj/redux/store.ts new file mode 100644 index 0000000..bb84ec5 --- /dev/null +++ b/src/caj/redux/store.ts @@ -0,0 +1,16 @@ +import appNonSaveVarReducer from '@caj/configs/appNonSaveVarReducer'; +import {configureStore} from '@reduxjs/toolkit'; + +import appVariablesReducer from '../configs/appVarReducer'; + +export const store = configureStore({ + reducer: { + appVariables: appVariablesReducer, + nonSaveVariables: appNonSaveVarReducer, + }, +}); + +// Infer the `RootState` and `AppDispatch` types from the store itself +export type RootState = ReturnType; +// Inferred type: {posts: PostsState, comments: CommentsState, users: UsersState} +export type AppDispatch = typeof store.dispatch; diff --git a/tsconfig.json b/tsconfig.json index af6979d..d28fb39 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,8 +7,8 @@ "target": "ESNext", "allowSyntheticDefaultImports": true, "moduleResolution": "node", - "jsx": "react-native" - + "jsx": "react-native", + "strict": true, }, "include": ["**/*.ts", "**/*.tsx", "./src/caj/img/*.png"], "exclude": [ diff --git a/web/public/fonts/Outfit-Black.ttf b/web/public/fonts/Outfit-Black.ttf new file mode 100644 index 0000000..e004397 Binary files /dev/null and b/web/public/fonts/Outfit-Black.ttf differ diff --git a/web/public/fonts/Outfit-Bold.ttf b/web/public/fonts/Outfit-Bold.ttf new file mode 100644 index 0000000..8a520ab Binary files /dev/null and b/web/public/fonts/Outfit-Bold.ttf differ diff --git a/web/public/fonts/Outfit-ExtraBold.ttf b/web/public/fonts/Outfit-ExtraBold.ttf new file mode 100644 index 0000000..6897216 Binary files /dev/null and b/web/public/fonts/Outfit-ExtraBold.ttf differ diff --git a/web/public/fonts/Outfit-ExtraLight.ttf b/web/public/fonts/Outfit-ExtraLight.ttf new file mode 100644 index 0000000..a3f3703 Binary files /dev/null and b/web/public/fonts/Outfit-ExtraLight.ttf differ diff --git a/web/public/fonts/Outfit-Light.ttf b/web/public/fonts/Outfit-Light.ttf new file mode 100644 index 0000000..d11dbce Binary files /dev/null and b/web/public/fonts/Outfit-Light.ttf differ diff --git a/web/public/fonts/Outfit-Medium.ttf b/web/public/fonts/Outfit-Medium.ttf new file mode 100644 index 0000000..672f975 Binary files /dev/null and b/web/public/fonts/Outfit-Medium.ttf differ diff --git a/web/public/fonts/Outfit-Regular.ttf b/web/public/fonts/Outfit-Regular.ttf new file mode 100644 index 0000000..6c7aa16 Binary files /dev/null and b/web/public/fonts/Outfit-Regular.ttf differ diff --git a/web/public/fonts/Outfit-SemiBold.ttf b/web/public/fonts/Outfit-SemiBold.ttf new file mode 100644 index 0000000..54d208e Binary files /dev/null and b/web/public/fonts/Outfit-SemiBold.ttf differ diff --git a/web/public/fonts/Outfit-Thin.ttf b/web/public/fonts/Outfit-Thin.ttf new file mode 100644 index 0000000..ed6e71e Binary files /dev/null and b/web/public/fonts/Outfit-Thin.ttf differ diff --git a/web/public/fonts/Outfit.ttf b/web/public/fonts/Outfit.ttf new file mode 100644 index 0000000..d58aab1 Binary files /dev/null and b/web/public/fonts/Outfit.ttf differ diff --git a/web/public/index.html b/web/public/index.html index 0e85f3f..2dce563 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -6,6 +6,74 @@ Click and Join Web + + @@ -13,6 +81,13 @@ diff --git a/web/webpack.config.js b/web/webpack.config.js index ff085d9..32ba0d9 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -16,10 +16,8 @@ const babelLoaderConfiguration = { include: [ path.resolve(appDirectory, 'index.web.tsx'), path.resolve(appDirectory, 'src'), - path.resolve(appDirectory, 'node_modules'), - path.resolve(appDirectory, 'node_modules/react-native-uncompiled'), - path.resolve(appDirectory, 'node_modules/react-native-sdk'), ], + exclude: [path.resolve(appDirectory, 'node_modules')], use: { loader: 'babel-loader', options: { @@ -29,15 +27,15 @@ const babelLoaderConfiguration = { // presets: ['react-native'], presets: [require.resolve('babel-preset-react-native')], // Re-write paths to import only the modules needed by the app - plugins: ['react-native-web',], + plugins: ['react-native-web'], presets: ['react-native'], presets: ['module:metro-react-native-babel-preset'], - // plugins: [ - // // needed to support async/await - // '@babel/plugin-transform-runtime' - // ] + plugins: [ + // needed to support async/await + '@babel/plugin-transform-runtime', + ], }, - } + }, }; // This is needed for webpack to import static images in JavaScript files. @@ -46,44 +44,42 @@ const imageLoaderConfiguration = { use: { loader: 'url-loader', options: { - name: '[name].[ext]' - } - } + name: '[name].[ext]', + }, + }, }; module.exports = { mode: 'development', + target: 'web', entry: [ // load any web API polyfills // path.resolve(appDirectory, 'polyfills-web.js'), + //'babel-polyfill', // your web-specific entry file - path.resolve(appDirectory, 'index.web.tsx') + path.resolve(appDirectory, 'index.web.tsx'), ], // configures where the build ends up output: { filename: 'bundle.web.js', - path: path.resolve(appDirectory, 'dist') + path: path.resolve(appDirectory, 'dist'), }, - // ...the rest of your config module: { - rules: [ - babelLoaderConfiguration, - imageLoaderConfiguration - ] + rules: [babelLoaderConfiguration, imageLoaderConfiguration], }, resolve: { // This will only alias the exact import "react-native" alias: { 'react-native$': 'react-native-web', - '@caj': path.resolve(appDirectory, 'src/caj') + '@caj': path.resolve(appDirectory, 'src/caj'), }, // If you're working on a multi-platform React Native app, web-specific // module implementations should be written in files using the extension // `.web.js`. - extensions: ['.web.js', '.js','.web.ts', '.ts','.web.tsx', '.tsx'] - } -} \ No newline at end of file + extensions: ['.web.js', '.js', '.web.ts', '.ts', '.web.tsx', '.tsx'], + }, +};