From 0f1e10d50f8d32fa43618227958162405fd091af Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Fri, 18 Jun 2021 13:00:12 +0900 Subject: [PATCH] basic tab navigation other things --- App.tsx | 71 +++- index.js | 3 + package-lock.json | 677 +++++++++++++++++++++++++++++++++++- package.json | 11 + res/mic_on-fill.png | Bin 0 -> 5729 bytes res/mic_on.png | Bin 0 -> 6679 bytes res/music_notes-fill.png | Bin 0 -> 4349 bytes res/music_notes.png | Bin 0 -> 6289 bytes res/settings-fill.png | Bin 0 -> 7138 bytes res/settings.png | Bin 0 -> 11678 bytes src/components/Settings.tsx | 90 ++++- src/state/artists.ts | 16 +- src/state/settings.ts | 47 +++ src/storage/db.ts | 4 +- src/storage/music.ts | 2 +- src/storage/settings.ts | 50 +-- 16 files changed, 912 insertions(+), 59 deletions(-) create mode 100644 res/mic_on-fill.png create mode 100644 res/mic_on.png create mode 100644 res/music_notes-fill.png create mode 100644 res/music_notes.png create mode 100644 res/settings-fill.png create mode 100644 res/settings.png create mode 100644 src/state/settings.ts diff --git a/App.tsx b/App.tsx index 5b7a91a..8fee37b 100644 --- a/App.tsx +++ b/App.tsx @@ -1,10 +1,79 @@ import React from 'react'; +import { NavigationContainer } from '@react-navigation/native'; +import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; + +import { Image } from 'react-native'; import { RecoilRoot } from 'recoil'; + import SettingsView from './src/components/Settings'; +import ArtistsList from './src/components/ArtistsList'; +import NowPlayingLayout from './src/components/NowPlayingLayout'; + + +const SettingsIcon: React.FC<{ focused: boolean }> = ({ focused }) => ( + +); + +const NowPlayingIcon: React.FC<{ focused: boolean }> = ({ focused }) => ( + +); + +const ArtistsIcon: React.FC<{ focused: boolean }> = ({ focused }) => ( + +); + +const Tab = createBottomTabNavigator(); const App = () => ( - + + + + + + + ); diff --git a/index.js b/index.js index 8f869d4..99a6e59 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,6 @@ +import 'react-native-gesture-handler'; +import 'react-native-get-random-values'; + import { AppRegistry, LogBox } from 'react-native'; // ignore recoil's timer warning on android: diff --git a/package-lock.json b/package-lock.json index e68e36b..fb2f57a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,21 @@ "name": "subsonify", "version": "0.0.1", "dependencies": { + "@react-native-community/masked-view": "^0.1.11", + "@react-navigation/bottom-tabs": "^5.11.11", + "@react-navigation/native": "^5.9.4", + "@react-navigation/stack": "^5.14.5", "md5": "^2.3.0", "react": "17.0.1", "react-native": "0.64.1", + "react-native-gesture-handler": "^1.10.3", + "react-native-get-random-values": "^1.7.0", + "react-native-reanimated": "^2.2.0", + "react-native-safe-area-context": "^3.2.0", + "react-native-screens": "^3.4.0", "react-native-sqlite-storage": "^5.0.0", "recoil": "^0.3.1", + "uuid": "^8.3.2", "xmldom": "^0.5.0" }, "devDependencies": { @@ -24,6 +34,7 @@ "@types/react-native": "^0.64.5", "@types/react-native-sqlite-storage": "^5.0.0", "@types/react-test-renderer": "^16.9.2", + "@types/uuid": "^8.3.0", "@types/xmldom": "^0.1.30", "babel-jest": "^26.6.3", "eslint": "^7.14.0", @@ -1504,6 +1515,17 @@ "node": ">=0.1.95" } }, + "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.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", @@ -2925,6 +2947,15 @@ "integrity": "sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==", "dev": true }, + "node_modules/@react-native-community/masked-view": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz", + "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==", + "peerDependencies": { + "react": ">=16.0", + "react-native": ">=0.57" + } + }, "node_modules/@react-native/assets": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", @@ -2940,6 +2971,104 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" }, + "node_modules/@react-navigation/bottom-tabs": { + "version": "5.11.11", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-5.11.11.tgz", + "integrity": "sha512-hThj6Vfw+ITzAVj5TgLEoxkVEcBD+gYeieWOe6FryBRgokgKNCzFQzqArJ5UCmNMxklNH0rstJfcdyHflLuPtw==", + "dependencies": { + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + }, + "peerDependencies": { + "@react-navigation/native": "^5.0.5", + "react": "*", + "react-native": "*", + "react-native-safe-area-context": ">= 0.6.0", + "react-native-screens": ">= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0" + } + }, + "node_modules/@react-navigation/core": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.15.3.tgz", + "integrity": "sha512-3ZdyDInh8qg1kygCNkmh9lFgpDf29lTvPsaMe2mm/qvmxLKSgttWBz07P2fc181aV9jTdgQpzYfWZ5KWT036zw==", + "dependencies": { + "@react-navigation/routers": "^5.7.2", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15", + "query-string": "^6.13.6", + "react-is": "^16.13.0" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@react-navigation/core/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-navigation/core/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/@react-navigation/native": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", + "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", + "dependencies": { + "@react-navigation/core": "^5.15.3", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/@react-navigation/native/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@react-navigation/routers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.2.tgz", + "integrity": "sha512-BxNSMLHpU+oS37Xok0ql6rc9U7IC8aUD4+U5ZPbjDJ0pwzZxGGh0YOEBzfV4k/Ig3cbPdvVWbc1C9HHbCVr2oQ==", + "dependencies": { + "nanoid": "^3.1.15" + } + }, + "node_modules/@react-navigation/stack": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.5.tgz", + "integrity": "sha512-hpdn1SS0tc3/3atkV2Q2y++n5B4e0rUcCj4W43PODMu72yX2m0LkKAAcpkPDCWAvwnLLIoLAEl5BEifZigl/6A==", + "dependencies": { + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + }, + "peerDependencies": { + "@react-native-community/masked-view": ">= 0.1.0", + "@react-navigation/native": "^5.0.5", + "react": "*", + "react-native": "*", + "react-native-gesture-handler": ">= 1.0.0", + "react-native-safe-area-context": ">= 0.6.0", + "react-native-screens": ">= 2.0.0-alpha.0 || >= 2.0.0-beta.0 || >= 2.0.0" + } + }, "node_modules/@sideway/address": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", @@ -3040,6 +3169,11 @@ "@types/node": "*" } }, + "node_modules/@types/hammerjs": { + "version": "2.0.39", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", + "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -3167,6 +3301,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "node_modules/@types/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "dev": true + }, "node_modules/@types/xmldom": { "version": "0.1.30", "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.30.tgz", @@ -4439,6 +4579,15 @@ "node": ">=0.10.0" } }, + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4452,6 +4601,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -4646,6 +4804,14 @@ "node": ">=4" } }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dependencies": { + "node-fetch": "2.6.1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -5909,6 +6075,11 @@ "node": ">=0.10.0" } }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5941,6 +6112,33 @@ "bser": "2.1.1" } }, + "node_modules/fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "dependencies": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/fbjs/node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5964,6 +6162,14 @@ "node": ">=8" } }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -6449,6 +6655,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", @@ -9699,11 +9918,27 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -10556,6 +10791,23 @@ "node": ">=6" } }, + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -10648,6 +10900,74 @@ "nullthrows": "^1.1.1" } }, + "node_modules/react-native-gesture-handler": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", + "integrity": "sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw==", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "fbjs": "^3.0.0", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + } + }, + "node_modules/react-native-get-random-values": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.7.0.tgz", + "integrity": "sha512-zDhmpWUekGRFb9I+MQkxllHcqXN9HBSsgPwBQfrZ1KZYpzDspWLZ6/yLMMZrtq4pVqNR7C7N96L3SuLpXv1nhQ==", + "dependencies": { + "fast-base64-decode": "^1.0.0" + }, + "peerDependencies": { + "react-native": ">=0.56" + } + }, + "node_modules/react-native-iphone-x-helper": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", + "peerDependencies": { + "react-native": ">=0.42.0" + } + }, + "node_modules/react-native-reanimated": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.2.0.tgz", + "integrity": "sha512-lOJDd+5w1gY6DHGXG2jD1dsjzQmXQ2699HUc3IztvI2WP4zUT+UAA+zSG+5JiBS5DUnTL8YhhkmUQmr1KNGO5w==", + "dependencies": { + "@babel/plugin-transform-object-assign": "^7.10.4", + "fbjs": "^3.0.0", + "mockdate": "^3.0.2", + "string-hash-64": "^1.0.3" + }, + "peerDependencies": { + "react": "*", + "react-native": "*", + "react-native-gesture-handler": "*" + } + }, + "node_modules/react-native-safe-area-context": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", + "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-screens": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.4.0.tgz", + "integrity": "sha512-cg+q9MRnVdeOcJyvJtqffoXLur/C2wHA/7IO2+FAipzTlgHbbM1mTuSM7qG+SeiQjoIs4mHOEf7A0ziPKW04sA==", + "dependencies": { + "warn-once": "^0.1.0" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-sqlite-storage": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-native-sqlite-storage/-/react-native-sqlite-storage-5.0.0.tgz", @@ -11523,6 +11843,11 @@ "node": ">=0.10.0" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, "node_modules/setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -11623,6 +11948,19 @@ "plist": "^3.0.1" } }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "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", @@ -11895,6 +12233,14 @@ "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -12060,6 +12406,14 @@ "node": ">= 0.10.0" } }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "engines": { + "node": ">=4" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -12068,6 +12422,11 @@ "safe-buffer": "~5.1.0" } }, + "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", @@ -12604,6 +12963,24 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", @@ -12822,8 +13199,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true, "bin": { "uuid": "dist/bin/uuid" } @@ -12909,6 +13284,11 @@ "makeerror": "1.0.x" } }, + "node_modules/warn-once": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.0.tgz", + "integrity": "sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA==" + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -14383,6 +14763,14 @@ "minimist": "^1.2.0" } }, + "@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.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz", @@ -15488,6 +15876,12 @@ "integrity": "sha512-W/J0fNYVO01tioHjvYWQ9m6RgndVtbElzYozBq1ZPrHO/iCzlqoySHl4gO/fpCl9QEFjvJfjPgtPMTMlsoq5DQ==", "dev": true }, + "@react-native-community/masked-view": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@react-native-community/masked-view/-/masked-view-0.1.11.tgz", + "integrity": "sha512-rQfMIGSR/1r/SyN87+VD8xHHzDYeHaJq6elOSCAD+0iLagXkSI2pfA0LmSXP21uw5i3em7GkkRjfJ8wpqWXZNw==", + "requires": {} + }, "@react-native/assets": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@react-native/assets/-/assets-1.0.0.tgz", @@ -15503,6 +15897,73 @@ "resolved": "https://registry.npmjs.org/@react-native/polyfills/-/polyfills-1.0.0.tgz", "integrity": "sha512-0jbp4RxjYopTsIdLl+/Fy2TiwVYHy4mgeu07DG4b/LyM0OS/+lPP5c9sbnt/AMlnF6qz2JRZpPpGw1eMNS6A4w==" }, + "@react-navigation/bottom-tabs": { + "version": "5.11.11", + "resolved": "https://registry.npmjs.org/@react-navigation/bottom-tabs/-/bottom-tabs-5.11.11.tgz", + "integrity": "sha512-hThj6Vfw+ITzAVj5TgLEoxkVEcBD+gYeieWOe6FryBRgokgKNCzFQzqArJ5UCmNMxklNH0rstJfcdyHflLuPtw==", + "requires": { + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + } + }, + "@react-navigation/core": { + "version": "5.15.3", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-5.15.3.tgz", + "integrity": "sha512-3ZdyDInh8qg1kygCNkmh9lFgpDf29lTvPsaMe2mm/qvmxLKSgttWBz07P2fc181aV9jTdgQpzYfWZ5KWT036zw==", + "requires": { + "@react-navigation/routers": "^5.7.2", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15", + "query-string": "^6.13.6", + "react-is": "^16.13.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "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==" + } + } + }, + "@react-navigation/native": { + "version": "5.9.4", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-5.9.4.tgz", + "integrity": "sha512-BUCrOXfZDdKWBqM8OhOKQhCX5we4HUo5XG6tCQtVqQAep+7UcApZmMUuemUXDxVe8NPESUpoUlB0RaEpyIdfTQ==", + "requires": { + "@react-navigation/core": "^5.15.3", + "escape-string-regexp": "^4.0.0", + "nanoid": "^3.1.15" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@react-navigation/routers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-5.7.2.tgz", + "integrity": "sha512-BxNSMLHpU+oS37Xok0ql6rc9U7IC8aUD4+U5ZPbjDJ0pwzZxGGh0YOEBzfV4k/Ig3cbPdvVWbc1C9HHbCVr2oQ==", + "requires": { + "nanoid": "^3.1.15" + } + }, + "@react-navigation/stack": { + "version": "5.14.5", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-5.14.5.tgz", + "integrity": "sha512-hpdn1SS0tc3/3atkV2Q2y++n5B4e0rUcCj4W43PODMu72yX2m0LkKAAcpkPDCWAvwnLLIoLAEl5BEifZigl/6A==", + "requires": { + "color": "^3.1.3", + "react-native-iphone-x-helper": "^1.3.0" + } + }, "@sideway/address": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz", @@ -15600,6 +16061,11 @@ "@types/node": "*" } }, + "@types/hammerjs": { + "version": "2.0.39", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.39.tgz", + "integrity": "sha512-lYR2Y/tV2ujpk/WyUc7S0VLI0a9hrtVIN9EwnrNo5oSEJI2cK2/XrgwOQmXLL3eTulOESvh9qP6si9+DWM9cOA==" + }, "@types/istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", @@ -15729,6 +16195,12 @@ "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", "dev": true }, + "@types/uuid": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", + "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "dev": true + }, "@types/xmldom": { "version": "0.1.30", "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.30.tgz", @@ -16665,6 +17137,15 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -16678,6 +17159,15 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -16846,6 +17336,14 @@ } } }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "requires": { + "node-fetch": "2.6.1" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -17788,6 +18286,11 @@ } } }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -17820,6 +18323,35 @@ "bser": "2.1.1" } }, + "fbjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", + "integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", + "requires": { + "cross-fetch": "^3.0.4", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -17837,6 +18369,11 @@ "to-regex-range": "^5.0.1" } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -18202,6 +18739,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", @@ -20709,11 +21261,21 @@ "minimist": "^1.2.5" } }, + "mockdate": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", + "integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==" + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -21353,6 +21915,17 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -21440,6 +22013,57 @@ "nullthrows": "^1.1.1" } }, + "react-native-gesture-handler": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-1.10.3.tgz", + "integrity": "sha512-cBGMi1IEsIVMgoox4RvMx7V2r6bNKw0uR1Mu1o7NbuHS6BRSVLq0dP34l2ecnPlC+jpWd3le6Yg1nrdCjby2Mw==", + "requires": { + "@egjs/hammerjs": "^2.0.17", + "fbjs": "^3.0.0", + "hoist-non-react-statics": "^3.3.0", + "invariant": "^2.2.4", + "prop-types": "^15.7.2" + } + }, + "react-native-get-random-values": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/react-native-get-random-values/-/react-native-get-random-values-1.7.0.tgz", + "integrity": "sha512-zDhmpWUekGRFb9I+MQkxllHcqXN9HBSsgPwBQfrZ1KZYpzDspWLZ6/yLMMZrtq4pVqNR7C7N96L3SuLpXv1nhQ==", + "requires": { + "fast-base64-decode": "^1.0.0" + } + }, + "react-native-iphone-x-helper": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz", + "integrity": "sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg==", + "requires": {} + }, + "react-native-reanimated": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.2.0.tgz", + "integrity": "sha512-lOJDd+5w1gY6DHGXG2jD1dsjzQmXQ2699HUc3IztvI2WP4zUT+UAA+zSG+5JiBS5DUnTL8YhhkmUQmr1KNGO5w==", + "requires": { + "@babel/plugin-transform-object-assign": "^7.10.4", + "fbjs": "^3.0.0", + "mockdate": "^3.0.2", + "string-hash-64": "^1.0.3" + } + }, + "react-native-safe-area-context": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.2.0.tgz", + "integrity": "sha512-k2Nty4PwSnrg9HwrYeeE+EYqViYJoOFwEy9LxL5RIRfoqxAq/uQXNGwpUg2/u4gnKpBbEPa9eRh15KKMe/VHkA==", + "requires": {} + }, + "react-native-screens": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.4.0.tgz", + "integrity": "sha512-cg+q9MRnVdeOcJyvJtqffoXLur/C2wHA/7IO2+FAipzTlgHbbM1mTuSM7qG+SeiQjoIs4mHOEf7A0ziPKW04sA==", + "requires": { + "warn-once": "^0.1.0" + } + }, "react-native-sqlite-storage": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/react-native-sqlite-storage/-/react-native-sqlite-storage-5.0.0.tgz", @@ -22113,6 +22737,11 @@ } } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -22195,6 +22824,21 @@ "plist": "^3.0.1" } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "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", @@ -22425,6 +23069,11 @@ "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", "dev": true }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", @@ -22555,6 +23204,11 @@ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=" }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -22563,6 +23217,11 @@ "safe-buffer": "~5.1.0" } }, + "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", @@ -22971,6 +23630,11 @@ "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", "dev": true }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" + }, "uglify-es": { "version": "3.3.9", "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", @@ -23137,9 +23801,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "optional": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", @@ -23212,6 +23874,11 @@ "makeerror": "1.0.x" } }, + "warn-once": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.0.tgz", + "integrity": "sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA==" + }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index a0ea4b9..3a664a5 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,21 @@ "lint": "eslint . --ext .js,.jsx,.ts,.tsx" }, "dependencies": { + "@react-native-community/masked-view": "^0.1.11", + "@react-navigation/bottom-tabs": "^5.11.11", + "@react-navigation/native": "^5.9.4", + "@react-navigation/stack": "^5.14.5", "md5": "^2.3.0", "react": "17.0.1", "react-native": "0.64.1", + "react-native-gesture-handler": "^1.10.3", + "react-native-get-random-values": "^1.7.0", + "react-native-reanimated": "^2.2.0", + "react-native-safe-area-context": "^3.2.0", + "react-native-screens": "^3.4.0", "react-native-sqlite-storage": "^5.0.0", "recoil": "^0.3.1", + "uuid": "^8.3.2", "xmldom": "^0.5.0" }, "devDependencies": { @@ -26,6 +36,7 @@ "@types/react-native": "^0.64.5", "@types/react-native-sqlite-storage": "^5.0.0", "@types/react-test-renderer": "^16.9.2", + "@types/uuid": "^8.3.0", "@types/xmldom": "^0.1.30", "babel-jest": "^26.6.3", "eslint": "^7.14.0", diff --git a/res/mic_on-fill.png b/res/mic_on-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..648bb2f0c1bfcf3f25c3bb70061ece5a4cc01e22 GIT binary patch literal 5729 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 Zvn)KnjDJqbR0akH22WQ%mvv4FO#sKfgB}0? literal 0 HcmV?d00001 diff --git a/res/mic_on.png b/res/mic_on.png new file mode 100644 index 0000000000000000000000000000000000000000..480fbe289dff62177e5a688c27e4abf6b078f09f GIT binary patch literal 6679 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 KpUXO@geCy_P3*k@ literal 0 HcmV?d00001 diff --git a/res/music_notes.png b/res/music_notes.png new file mode 100644 index 0000000000000000000000000000000000000000..81194187fd914494ba2791d7461daa57b3895697 GIT binary patch literal 6289 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 literal 0 HcmV?d00001 diff --git a/res/settings-fill.png b/res/settings-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff813ec3e35f65517a4037d197affa5311bdbd1 GIT binary patch literal 7138 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 { +const RecreateDbButton: React.FC<{ db: DbStorage, title: string }> = ({ db, title }) => { + const [inProgress, setInProgress] = useState(false); - const recreateMusicDb = async () => { - try { await musicDb.deleteDb(); } catch {} - await musicDb.createDb(); - } - - const recreateSettingsDb = async () => { - try { await settingsDb.deleteDb(); } catch {} - await settingsDb.createDb(); + const recreateDb = async () => { + setInProgress(true); + try{ + try { await db.deleteDb(); } catch {} + await db.createDb(); + } finally { + setInProgress(false); + } } + return ( +