From 0984e4c6f713ec6df603f02cdf47ad1254f8f8a8 Mon Sep 17 00:00:00 2001 From: miikii41 <130055803+miikii41@users.noreply.github.com> Date: Tue, 24 Sep 2024 21:53:46 +0900 Subject: [PATCH] MyPage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 임시 MyPage 생성 my page tab 까지 생성 --- App.tsx | 12 +- babel.config.js | 5 +- package-lock.json | 433 ++++++++++++++++++- package.json | 8 +- src/assets/Portfolio/Portfolio_1.jpg | Bin 0 -> 7852 bytes src/assets/Portfolio/Portfolio_2.jpg | Bin 0 -> 7853 bytes src/assets/Portfolio/Portfolio_3.jpg | Bin 0 -> 10137 bytes src/assets/Portfolio/Portfolio_4.jpg | Bin 0 -> 10984 bytes src/components/Home/Main/MainPage.tsx | 10 +- src/components/Home/MyPage/MyPageHome.tsx | 73 ++++ src/components/Home/MyPage/MyPageTabView.tsx | 79 ++++ src/components/Home/MyPage/PortfolioPage.tsx | 82 ++++ src/components/Home/MyPage/Review.tsx | 88 ++++ yarn.lock | 290 ++++++++++++- 14 files changed, 1054 insertions(+), 26 deletions(-) create mode 100644 src/assets/Portfolio/Portfolio_1.jpg create mode 100644 src/assets/Portfolio/Portfolio_2.jpg create mode 100644 src/assets/Portfolio/Portfolio_3.jpg create mode 100644 src/assets/Portfolio/Portfolio_4.jpg create mode 100644 src/components/Home/MyPage/MyPageHome.tsx create mode 100644 src/components/Home/MyPage/MyPageTabView.tsx create mode 100644 src/components/Home/MyPage/PortfolioPage.tsx create mode 100644 src/components/Home/MyPage/Review.tsx diff --git a/App.tsx b/App.tsx index 56ec656..6e61713 100644 --- a/App.tsx +++ b/App.tsx @@ -1,10 +1,14 @@ import React from 'react'; import { SafeAreaView, StatusBar, StyleSheet, useColorScheme } from 'react-native'; -import { NavigationContainer } from '@react-navigation/native'; // 네비게이션 컨테이너 import -import { createNativeStackNavigator } from '@react-navigation/native-stack'; // 네이티브 스택 네비게이터 import +import { NavigationContainer } from '@react-navigation/native'; +import { createNativeStackNavigator } from '@react-navigation/native-stack'; import MainPage from './src/components/Home/Main/MainPage'; import SeekerMainPage from './src/components/Home/Main/SeekerMainPage'; // SeekerMainPage 컴포넌트 불러오기 import SetterMainPage from './src/components/Home/Main/SetterMainPage'; // SeekerMainPage 컴포넌트 불러오기 +import MyPageHome from './src/components/Home/MyPage/MyPageHome'; // MyPageHomeerMainPage 컴포넌트 불러오기 +import MyPageTabView from './src/components/Home/MyPage/MyPageTabView'; +import PortfolioPage from './src/components/Home/MyPage/PortfolioPage'; +import Review from './src/components/Home/MyPage/Review'; import { Colors } from 'react-native/Libraries/NewAppScreen'; const Stack = createNativeStackNavigator(); @@ -24,6 +28,10 @@ function App(): React.JSX.Element { + + + + {/* 추가적인 스크린 설정 가능 */} diff --git a/babel.config.js b/babel.config.js index f7b3da3..f97e2f9 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,6 @@ module.exports = { - presets: ['module:@react-native/babel-preset'], + presets: [ + 'module:@react-native/babel-preset', + ], + plugins: ['react-native-reanimated/plugin'], // 추가 }; diff --git a/package-lock.json b/package-lock.json index f37727f..d4b5fa0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,16 @@ "react": "18.3.1", "react-native": "0.75.3", "react-native-chart-kit": "^6.12.0", + "react-native-collapsible-tab-view": "^8.0.0", + "react-native-pager-view": "^6.4.1", + "react-native-reanimated": "^3.15.3", "react-native-safe-area-context": "^4.11.0", "react-native-screens": "^3.34.0", "react-native-svg": "^15.7.1", "react-native-vector-icons": "^10.2.0", "react-navigation": "^4.4.4", - "react-navigation-stack": "^2.10.4" + "react-navigation-stack": "^2.10.4", + "styled-components": "^6.1.13" }, "devDependencies": { "@babel/core": "^7.20.0", @@ -30,9 +34,11 @@ "@react-native/typescript-config": "0.75.3", "@types/react": "^18.2.6", "@types/react-test-renderer": "^18.0.0", + "@types/styled-components": "^5.1.34", "babel-jest": "^29.6.3", "eslint": "^8.19.0", "jest": "^29.6.3", + "metro-react-native-babel-preset": "^0.77.0", "prettier": "2.8.8", "react-test-renderer": "18.3.1", "typescript": "5.0.4" @@ -219,6 +225,19 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.24.8", "license": "MIT", @@ -511,6 +530,26 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-class-properties": { "version": "7.18.6", "license": "MIT", @@ -553,6 +592,63 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-optional-chaining": { "version": "7.21.0", "license": "MIT", @@ -1860,6 +1956,27 @@ "node": ">=0.8.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "license": "MIT" + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "dev": true, @@ -3215,6 +3332,17 @@ "license": "MIT", "peer": true }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "license": "MIT" @@ -3283,6 +3411,24 @@ "version": "2.0.3", "license": "MIT" }, + "node_modules/@types/styled-components": { + "version": "5.1.34", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz", + "integrity": "sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT" + }, "node_modules/@types/yargs": { "version": "17.0.33", "license": "MIT", @@ -4201,6 +4347,15 @@ "node": ">=6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001663", "funding": [ @@ -4588,6 +4743,15 @@ "node": ">= 8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -4604,6 +4768,17 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-tree": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", @@ -4631,7 +4806,6 @@ }, "node_modules/csstype": { "version": "3.1.3", - "devOptional": true, "license": "MIT" }, "node_modules/data-view-buffer": { @@ -4795,6 +4969,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "license": "MIT", @@ -8038,6 +8221,70 @@ "node": ">=18" } }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.77.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz", + "integrity": "sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.20.0", + "@babel/plugin-proposal-async-generator-functions": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.18.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.20.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.18.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-async-to-generator": "^7.20.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.20.0", + "@babel/plugin-transform-flow-strip-types": "^7.20.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "babel-plugin-transform-flow-enums": "^0.0.2", + "react-refresh": "^0.4.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-react-native-babel-preset/node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/metro-resolver": { "version": "0.80.12", "license": "MIT", @@ -8781,6 +9028,40 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -8970,6 +9251,30 @@ } } }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-dom/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/react-freeze": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz", @@ -9062,6 +9367,27 @@ "react-native-svg": "> 6.4.1" } }, + "node_modules/react-native-collapsible-tab-view": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/react-native-collapsible-tab-view/-/react-native-collapsible-tab-view-8.0.0.tgz", + "integrity": "sha512-p3/CfBtCn/7qAllFeBM8KI4cCqqYfE0gzO/bh/oX6ewk2hE7HF0QQpZBGZlLdLJDo1lUXRlTSP2VLAYgky2maw==", + "license": "MIT", + "dependencies": { + "use-deep-compare": "^1.1.0" + }, + "peerDependencies": { + "@shopify/flash-list": ">=1.0.0", + "react": "*", + "react-native": "*", + "react-native-pager-view": "*", + "react-native-reanimated": ">=3.8.1" + }, + "peerDependenciesMeta": { + "@shopify/flash-list": { + "optional": true + } + } + }, "node_modules/react-native-gesture-handler": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.19.0.tgz", @@ -9088,6 +9414,40 @@ "react-native": ">=0.42.0" } }, + "node_modules/react-native-pager-view": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.4.1.tgz", + "integrity": "sha512-HnDxXTRHnR6WJ/vnOitv0C32KG9MJjxLnxswuQlBJmQ7RxF2GWOHSPIRAdZ9fLxdLstV38z9Oz1C95+t+yXkcg==", + "license": "MIT", + "peerDependencies": { + "react": "*", + "react-native": "*" + } + }, + "node_modules/react-native-reanimated": { + "version": "3.15.3", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.15.3.tgz", + "integrity": "sha512-5QBk/7PZvZ98Adxm4MRyglwzsRzReTQIe4Hd2wbBBAZ68IC4OYKvsc8cPEjgx3/1mG8HgHFYhbcDe5U2RjeFqw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-arrow-functions": "^7.0.0-0", + "@babel/plugin-transform-class-properties": "^7.0.0-0", + "@babel/plugin-transform-classes": "^7.0.0-0", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.0.0-0", + "@babel/plugin-transform-optional-chaining": "^7.0.0-0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0-0", + "@babel/plugin-transform-template-literals": "^7.0.0-0", + "@babel/plugin-transform-unicode-regex": "^7.0.0-0", + "@babel/preset-typescript": "^7.16.7", + "convert-source-map": "^2.0.0", + "invariant": "^2.2.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "react": "*", + "react-native": "*" + } + }, "node_modules/react-native-safe-area-context": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.11.0.tgz", @@ -9332,6 +9692,8 @@ }, "node_modules/react-test-renderer/node_modules/scheduler": { "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9761,6 +10123,12 @@ "node": ">=8" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "license": "MIT", @@ -9868,6 +10236,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "license": "MIT", @@ -10099,6 +10476,46 @@ "version": "1.0.5", "license": "MIT" }, + "node_modules/styled-components": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", + "license": "MIT", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT" + }, "node_modules/sudo-prompt": { "version": "9.2.1", "license": "MIT" @@ -10469,6 +10886,18 @@ "punycode": "^2.1.0" } }, + "node_modules/use-deep-compare": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-deep-compare/-/use-deep-compare-1.3.0.tgz", + "integrity": "sha512-94iG+dEdEP/Sl3WWde+w9StIunlV8Dgj+vkt5wTwMoFQLaijiEZSXXy8KtcStpmEDtIptRJiNeD4ACTtVvnIKA==", + "license": "MIT", + "dependencies": { + "dequal": "2.0.3" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, "node_modules/use-latest-callback": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.2.1.tgz", diff --git a/package.json b/package.json index ba00832..07d3160 100644 --- a/package.json +++ b/package.json @@ -15,12 +15,16 @@ "react": "18.3.1", "react-native": "0.75.3", "react-native-chart-kit": "^6.12.0", + "react-native-collapsible-tab-view": "^8.0.0", + "react-native-pager-view": "^6.4.1", + "react-native-reanimated": "^3.15.3", "react-native-safe-area-context": "^4.11.0", "react-native-screens": "^3.34.0", "react-native-svg": "^15.7.1", "react-native-vector-icons": "^10.2.0", "react-navigation": "^4.4.4", - "react-navigation-stack": "^2.10.4" + "react-navigation-stack": "^2.10.4", + "styled-components": "^6.1.13" }, "devDependencies": { "@babel/core": "^7.20.0", @@ -32,9 +36,11 @@ "@react-native/typescript-config": "0.75.3", "@types/react": "^18.2.6", "@types/react-test-renderer": "^18.0.0", + "@types/styled-components": "^5.1.34", "babel-jest": "^29.6.3", "eslint": "^8.19.0", "jest": "^29.6.3", + "metro-react-native-babel-preset": "^0.77.0", "prettier": "2.8.8", "react-test-renderer": "18.3.1", "typescript": "5.0.4" diff --git a/src/assets/Portfolio/Portfolio_1.jpg b/src/assets/Portfolio/Portfolio_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b631b626db3f5a654522446f7a323e68aab2d864 GIT binary patch literal 7852 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 literal 0 HcmV?d00001 diff --git a/src/assets/Portfolio/Portfolio_3.jpg b/src/assets/Portfolio/Portfolio_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..65aa0ebe62031f633ed7160a34e6b9f71f975ef0 GIT binary patch literal 10137 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 literal 0 HcmV?d00001 diff --git a/src/components/Home/Main/MainPage.tsx b/src/components/Home/Main/MainPage.tsx index 70ab36d..e8cebf4 100644 --- a/src/components/Home/Main/MainPage.tsx +++ b/src/components/Home/Main/MainPage.tsx @@ -1,7 +1,6 @@ import React from 'react'; import { View, Text, StyleSheet, TouchableOpacity, Dimensions } from 'react-native'; import { useNavigation } from '@react-navigation/native'; // 네비게이션 훅 추가 - const MainPage = () => { const navigation = useNavigation(); // 네비게이션 객체 사용 @@ -26,7 +25,16 @@ const MainPage = () => { + + 임시버튼(하단바 생성후 하단 바로 옮길것) + navigation.navigate('MyPageTabView')} +> + 마이페이지 + + ); }; diff --git a/src/components/Home/MyPage/MyPageHome.tsx b/src/components/Home/MyPage/MyPageHome.tsx new file mode 100644 index 0000000..226260c --- /dev/null +++ b/src/components/Home/MyPage/MyPageHome.tsx @@ -0,0 +1,73 @@ +import React from 'react'; +import { View, Text, StyleSheet, TouchableOpacity, Dimensions } from 'react-native'; + +const SetterMainPage = () => { + return ( + + Main Page + Matching + + + 현재 제안서의 수락 현황은..... + + + {/* 버튼들 */} + + + 요청서 수락하기 + + + 제안서 작성하기 + + + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + header: { + fontSize: 30, + fontWeight: 'bold', + marginBottom: 10, + }, + subHeader: { + fontSize: 20, + marginBottom: 20, + }, + chartContainer: { + alignItems: 'center', + marginBottom: 30, + }, + buttonContainer: { + flexDirection: 'row', + justifyContent: 'space-around', + width: '80%', + marginBottom: 20, + }, + singleButtonContainer: { + alignItems: 'center', + width: '80%', + }, + button: { + backgroundColor: '#e0e0e0', + padding: 10, + borderRadius: 10, + alignItems: 'center', + justifyContent: 'center', + width: 140, + height: 60, + }, + buttonText: { + fontSize: 16, + fontWeight: 'bold', + }, +}); + +export default SetterMainPage; diff --git a/src/components/Home/MyPage/MyPageTabView.tsx b/src/components/Home/MyPage/MyPageTabView.tsx new file mode 100644 index 0000000..9742670 --- /dev/null +++ b/src/components/Home/MyPage/MyPageTabView.tsx @@ -0,0 +1,79 @@ +import React, { useState } from 'react'; +import { SafeAreaView, View, Text, Image, ImageBackground } from 'react-native'; +import { Tabs, MaterialTabBar } from 'react-native-collapsible-tab-view'; +import { StackScreenProps } from '@react-navigation/stack'; +import { HomeStackParams } from '../../../pages/Home'; + +import PortfolioPage from './PortfolioPage'; +import Review from './Review'; + +export const ProfileSection = ({ navigation }: { navigation: any }) => { + const UserName = '닉네임'; + const selfIntroduce = '인스타 link /n 블로그 link 링크드인 예정'; + + + return ( + + + + + + {UserName} + + {selfIntroduce} + + + ); +}; + +const MyPageTabView = ({ navigation, route }: StackScreenProps) => { + const [routes] = useState([ + { key: 'portfolio', title: 'Portfolio' }, + { key: 'review', title: 'Review' } + ]); + + return ( + + } + headerContainerStyle={{ + shadowOpacity: 0, + borderBottomWidth: 1, + borderColor: '#D9D9D9' + }} + renderTabBar={props => ( + + )} + > + {routes.map(route => ( + + {route.key === 'portfolio' && } + {route.key === 'review' && } + + ))} + + + ); +}; + +export default MyPageTabView; diff --git a/src/components/Home/MyPage/PortfolioPage.tsx b/src/components/Home/MyPage/PortfolioPage.tsx new file mode 100644 index 0000000..3d31e60 --- /dev/null +++ b/src/components/Home/MyPage/PortfolioPage.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { View, Text, Image, FlatList, TouchableOpacity } from 'react-native'; +import { Tabs } from 'react-native-collapsible-tab-view'; +import styled from 'styled-components/native'; + +const PortfolioPage = () => { + const data = [ + { label: '실력/경력', data: '한국패션디자인공모전 동상\n업씨패션회사 인턴 6개월' }, + { label: '포트폴리오', data: 'portfolio' } + ]; + + // 로컬 이미지 데이터 + const portfolioImages = [ + { id: 1, source: require('../../../assets/Portfolio/Portfolio_1.jpg') }, + { id: 2, source: require('../../../assets/Portfolio/Portfolio_2.jpg') }, + { id: 3, source: require('../../../assets/Portfolio/Portfolio_3.jpg') }, + { id: 4, source: require('../../../assets/Portfolio/Portfolio_4.jpg') }, + ]; + + return ( + { + if (item.label === '포트폴리오') { + return ( + + {item.label} + image.id.toString()} + renderItem={({ item: image }) => ( + + + + + + )} + /> + + ); + } else { + return ( + + {item.label} + {item.data} + + ); + } + }} + keyExtractor={(item, index) => index.toString()} + /> + ); +}; + +// 스타일 정의 +const InfoSection = styled.View` + flex-direction: row; + justify-content: space-between; + padding: 16px; + border-bottom-width: 1px; + border-color: #DFDFDF; +`; + +const PortfolioSection = styled.View` + padding: 16px; + border-bottom-width: 1px; + border-color: #DFDFDF; +`; + +const ImageContainer = styled.View` + flex: 1; + margin: 5px; +`; + +const PortfolioImage = styled.Image` + width: 100px; + height: 100px; + border-radius: 8px; +`; + +export default PortfolioPage; diff --git a/src/components/Home/MyPage/Review.tsx b/src/components/Home/MyPage/Review.tsx new file mode 100644 index 0000000..ebcf46b --- /dev/null +++ b/src/components/Home/MyPage/Review.tsx @@ -0,0 +1,88 @@ +import React from 'react'; +import { View, Text, FlatList } from 'react-native'; +import { Tabs } from 'react-native-collapsible-tab-view'; +import styled from 'styled-components/native'; + +// 필요한 컴포넌트를 임포트하세요 +// import Slider from 'your-path'; +// import StarRating from 'your-path'; +// import ReviewComment from 'your-path'; +// import ReviewItem from 'your-path'; + +// 상수 정의 +const LIGHTGRAY = '#D3D3D3'; +const BLACK = '#000000'; + +// SummarySection 컴포넌트 정의 +const SummarySection = () => { + return ( + + + + 4.0 + + + {[1, 2, 3, 4, 5].map((idx) => ( + + {idx}점 + 3 + + ))} + + + + 거래 + + + 디자인 + + + ); +}; + +// 스타일 정의 +const ItemContainer = styled.View` + flex-direction: row; + padding: 5px; +`; + +const Container = styled.View` + padding-vertical: 20px; + padding-horizontal: 40px; + border-bottom-color: ${LIGHTGRAY}; + border-bottom-width: 1px; +`; + +const RatingContainer = styled.View` + align-items: center; + justify-content: center; + padding-vertical: 15px; +`; + +const SliderContainer = styled.View` + padding-horizontal: 40px; + flex: 1; +`; + +// Review 컴포넌트 정의 +interface ReviewProps { + flatListRef: React.RefObject>; +} + +const Review: React.FC = ({ flatListRef }) => { + return ( + index.toString()} + style={{ marginBottom: 60 }} + /> + ); +}; + +// Review 컴포넌트를 default export로 내보냅니다. +export default Review; diff --git a/yarn.lock b/yarn.lock index bf94f37..b843edf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,7 +14,7 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2", "@babel/compat-data@^7.25.4": version "7.25.4" "@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.13.16", "@babel/core@^7.20.0", "@babel/core@^7.23.9", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.8.0": @@ -62,7 +62,7 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8", "@babel/helper-compilation-targets@^7.25.2": version "7.25.2" dependencies: "@babel/compat-data" "^7.25.2" @@ -98,6 +98,13 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" +"@babel/helper-environment-visitor@^7.18.9": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" + "@babel/helper-member-expression-to-functions@^7.24.8": version "7.24.8" dependencies: @@ -126,7 +133,7 @@ "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.24.8" -"@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.24.7", "@babel/helper-remap-async-to-generator@^7.25.0": version "7.25.0" dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" @@ -216,7 +223,17 @@ "@babel/helper-plugin-utils" "^7.24.8" "@babel/traverse" "^7.25.0" -"@babel/plugin-proposal-class-properties@^7.13.0": +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.0": version "7.18.6" dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" @@ -228,13 +245,40 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-export-default-from" "^7.24.7" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": +"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8", "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.0": version "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12": +"@babel/plugin-proposal-numeric-separator@^7.0.0": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.0": + version "7.20.7" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.20.0": version "7.21.0" dependencies: "@babel/helper-plugin-utils" "^7.20.2" @@ -360,7 +404,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.24.7": +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.0.0-0", "@babel/plugin-transform-arrow-functions@^7.24.7": version "7.24.7" dependencies: "@babel/helper-plugin-utils" "^7.24.7" @@ -390,7 +434,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.8" -"@babel/plugin-transform-class-properties@^7.24.1", "@babel/plugin-transform-class-properties@^7.25.4": +"@babel/plugin-transform-class-properties@^7.0.0-0", "@babel/plugin-transform-class-properties@^7.24.1", "@babel/plugin-transform-class-properties@^7.25.4": version "7.25.4" dependencies: "@babel/helper-create-class-features-plugin" "^7.25.4" @@ -403,7 +447,7 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.25.4": +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.0.0-0", "@babel/plugin-transform-classes@^7.25.4": version "7.25.4" dependencies: "@babel/helper-annotate-as-pure" "^7.24.7" @@ -538,7 +582,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": +"@babel/plugin-transform-nullish-coalescing-operator@^7.0.0-0", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.1", "@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": version "7.24.7" dependencies: "@babel/helper-plugin-utils" "^7.24.7" @@ -570,14 +614,14 @@ "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.24.5", "@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": +"@babel/plugin-transform-optional-chaining@^7.0.0-0", "@babel/plugin-transform-optional-chaining@^7.24.5", "@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": version "7.24.8" dependencies: "@babel/helper-plugin-utils" "^7.24.8" "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.24.7": +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.24.7": version "7.24.7" dependencies: "@babel/helper-plugin-utils" "^7.24.7" @@ -646,7 +690,7 @@ babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.24.7": +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.0.0-0", "@babel/plugin-transform-shorthand-properties@^7.24.7": version "7.24.7" dependencies: "@babel/helper-plugin-utils" "^7.24.7" @@ -662,7 +706,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-template-literals@^7.24.7": +"@babel/plugin-transform-template-literals@^7.0.0-0", "@babel/plugin-transform-template-literals@^7.24.7": version "7.24.7" dependencies: "@babel/helper-plugin-utils" "^7.24.7" @@ -692,7 +736,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.24.7" "@babel/helper-plugin-utils" "^7.24.7" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.24.7": +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.0.0-0", "@babel/plugin-transform-unicode-regex@^7.24.7": version "7.24.7" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.24.7" @@ -805,7 +849,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-typescript@^7.13.0": +"@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7": version "7.24.7" dependencies: "@babel/helper-plugin-utils" "^7.24.7" @@ -866,6 +910,23 @@ dependencies: "@types/hammerjs" "^2.0.36" +"@emotion/is-prop-valid@1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz" + integrity sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw== + dependencies: + "@emotion/memoize" "^0.8.1" + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/unitless@0.8.1": + version "0.8.1" + resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" dependencies: @@ -1552,6 +1613,14 @@ resolved "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.45.tgz" integrity sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ== +"@types/hoist-non-react-statics@*": + version "3.3.5" + resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" @@ -1598,6 +1667,20 @@ "@types/stack-utils@^2.0.0": version "2.0.3" +"@types/styled-components@^5.1.34": + version "5.1.34" + resolved "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.34.tgz" + integrity sha512-mmiVvwpYklFIv9E8qfxuPyIt/OuyIrn6gMOAMOFUO3WJfSrSE+sGUoa4PiZj77Ut7bKZpaa6o1fBKS/4TOEvnA== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" + +"@types/stylis@4.2.5": + version "4.2.5" + resolved "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz" + integrity sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw== + "@types/yargs-parser@*": version "21.0.3" @@ -2052,6 +2135,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: camelcase@^6.2.0: version "6.3.0" +camelize@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== + caniuse-lite@^1.0.30001646: version "1.0.30001663" @@ -2264,6 +2352,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" + integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== + css-select@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" @@ -2275,6 +2368,15 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" +css-to-react-native@3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + css-tree@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" @@ -2288,7 +2390,7 @@ css-what@^6.1.0: resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -csstype@^3.0.2: +csstype@^3.0.2, csstype@3.1.3: version "3.1.3" data-view-buffer@^1.0.1: @@ -2377,6 +2479,11 @@ denodeify@^1.2.1: depd@2.0.0: version "2.0.0" +dequal@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" @@ -3913,6 +4020,51 @@ metro-minify-terser@0.80.12: flow-enums-runtime "^0.0.6" terser "^5.15.0" +metro-react-native-babel-preset@^0.77.0: + version "0.77.0" + resolved "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.77.0.tgz" + integrity sha512-HPPD+bTxADtoE4y/4t1txgTQ1LVR6imOBy7RMHUsqMVTbekoi8Ph5YI9vKX2VMPtVWeFt0w9YnCSLPa76GcXsA== + dependencies: + "@babel/core" "^7.20.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-class-properties" "^7.18.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.20.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-default-from" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.18.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.20.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.20.0" + "@babel/plugin-transform-flow-strip-types" "^7.20.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + "@babel/plugin-transform-runtime" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.5.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + "@babel/template" "^7.0.0" + babel-plugin-transform-flow-enums "^0.0.2" + react-refresh "^0.4.0" + metro-resolver@0.80.12: version "0.80.12" dependencies: @@ -4074,7 +4226,7 @@ ms@^2.1.3, ms@2.1.3: ms@2.0.0: version "2.0.0" -nanoid@^3.1.23: +nanoid@^3.1.23, nanoid@^3.3.7: version "3.3.7" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -4350,6 +4502,20 @@ point-in-polygon@^1.0.1: possible-typed-array-names@^1.0.0: version "1.0.0" +postcss-value-parser@^4.0.2: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@8.4.38: + version "8.4.38" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" + integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== + dependencies: + nanoid "^3.3.7" + picocolors "^1.0.0" + source-map-js "^1.2.0" + prelude-ls@^1.2.1: version "1.2.1" @@ -4443,6 +4609,14 @@ react-devtools-core@^5.3.1: shell-quote "^1.6.1" ws "^7" +"react-dom@>= 16.8.0": + version "18.3.1" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.2" + react-freeze@^1.0.0: version "1.0.4" resolved "https://registry.npmjs.org/react-freeze/-/react-freeze-1.0.4.tgz" @@ -4476,6 +4650,13 @@ react-native-chart-kit@^6.12.0: paths-js "^0.4.10" point-in-polygon "^1.0.1" +react-native-collapsible-tab-view@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/react-native-collapsible-tab-view/-/react-native-collapsible-tab-view-8.0.0.tgz" + integrity sha512-p3/CfBtCn/7qAllFeBM8KI4cCqqYfE0gzO/bh/oX6ewk2hE7HF0QQpZBGZlLdLJDo1lUXRlTSP2VLAYgky2maw== + dependencies: + use-deep-compare "^1.1.0" + "react-native-gesture-handler@>= 1.5.0": version "2.19.0" resolved "https://registry.npmjs.org/react-native-gesture-handler/-/react-native-gesture-handler-2.19.0.tgz" @@ -4491,6 +4672,28 @@ react-native-iphone-x-helper@^1.3.0: resolved "https://registry.npmjs.org/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.3.1.tgz" integrity sha512-HOf0jzRnq2/aFUcdCJ9w9JGzN3gdEg0zFE4FyYlp4jtidqU03D5X7ZegGKfT1EWteR0gPBGp9ye5T5FvSWi9Yg== +react-native-pager-view@*, react-native-pager-view@^6.4.1: + version "6.4.1" + resolved "https://registry.npmjs.org/react-native-pager-view/-/react-native-pager-view-6.4.1.tgz" + integrity sha512-HnDxXTRHnR6WJ/vnOitv0C32KG9MJjxLnxswuQlBJmQ7RxF2GWOHSPIRAdZ9fLxdLstV38z9Oz1C95+t+yXkcg== + +react-native-reanimated@^3.15.3, react-native-reanimated@>=3.8.1: + version "3.15.3" + resolved "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.15.3.tgz" + integrity sha512-5QBk/7PZvZ98Adxm4MRyglwzsRzReTQIe4Hd2wbBBAZ68IC4OYKvsc8cPEjgx3/1mG8HgHFYhbcDe5U2RjeFqw== + dependencies: + "@babel/plugin-transform-arrow-functions" "^7.0.0-0" + "@babel/plugin-transform-class-properties" "^7.0.0-0" + "@babel/plugin-transform-classes" "^7.0.0-0" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" + "@babel/plugin-transform-optional-chaining" "^7.0.0-0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0-0" + "@babel/plugin-transform-template-literals" "^7.0.0-0" + "@babel/plugin-transform-unicode-regex" "^7.0.0-0" + "@babel/preset-typescript" "^7.16.7" + convert-source-map "^2.0.0" + invariant "^2.2.4" + react-native-safe-area-context@^4.11.0, "react-native-safe-area-context@>= 0.6.0", "react-native-safe-area-context@>= 3.0.0": version "4.11.0" resolved "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.11.0.tgz" @@ -4590,6 +4793,11 @@ react-navigation@^4.1.1, react-navigation@^4.4.4: react-refresh@^0.14.0: version "0.14.2" +react-refresh@^0.4.0: + version "0.4.3" + resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz" + integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== + react-shallow-renderer@^16.15.0: version "16.15.0" dependencies: @@ -4603,7 +4811,7 @@ react-test-renderer@18.3.1: react-shallow-renderer "^16.15.0" scheduler "^0.23.2" -react@*, "react@^16.0.0 || ^17.0.0 || ^18.0.0", react@^18.2.0, react@^18.3.1, "react@> 16.7.0", react@>=16.0, react@>=16.8, react@>=17.0.0, react@18.3.1: +react@*, "react@^16.0.0 || ^17.0.0 || ^18.0.0", react@^18.2.0, react@^18.3.1, "react@> 16.7.0", "react@>= 16.8.0", react@>=16.0, react@>=16.8, react@>=16.8.0, react@>=17.0.0, react@18.3.1: version "18.3.1" dependencies: loose-envify "^1.1.0" @@ -4774,6 +4982,8 @@ safe-regex-test@^1.0.3: scheduler@^0.23.2: version "0.23.2" + resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -4869,6 +5079,11 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallowequal@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^2.0.0: version "2.0.0" dependencies: @@ -4911,6 +5126,11 @@ slice-ansi@^2.0.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +source-map-js@^1.2.0: + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-support@^0.5.16, source-map-support@~0.5.20: version "0.5.21" dependencies: @@ -5058,6 +5278,26 @@ strip-json-comments@^3.1.1: strnum@^1.0.5: version "1.0.5" +styled-components@^6.1.13: + version "6.1.13" + resolved "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz" + integrity sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw== + dependencies: + "@emotion/is-prop-valid" "1.2.2" + "@emotion/unitless" "0.8.1" + "@types/stylis" "4.2.5" + css-to-react-native "3.2.0" + csstype "3.1.3" + postcss "8.4.38" + shallowequal "1.1.0" + stylis "4.3.2" + tslib "2.6.2" + +stylis@4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz" + integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== + sudo-prompt@^9.0.0: version "9.2.1" @@ -5137,6 +5377,11 @@ tslib@^1.8.1: tslib@^2.0.1: version "2.7.0" +tslib@2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" dependencies: @@ -5241,6 +5486,13 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-deep-compare@^1.1.0: + version "1.3.0" + resolved "https://registry.npmjs.org/use-deep-compare/-/use-deep-compare-1.3.0.tgz" + integrity sha512-94iG+dEdEP/Sl3WWde+w9StIunlV8Dgj+vkt5wTwMoFQLaijiEZSXXy8KtcStpmEDtIptRJiNeD4ACTtVvnIKA== + dependencies: + dequal "2.0.3" + use-latest-callback@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.2.1.tgz"