From 4560600a4ce59440bd34c81ffdcd13104a2037d6 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 14 May 2024 11:15:40 +0800 Subject: [PATCH 001/118] potai port --- vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index c5d5a03..12878c6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,7 +6,7 @@ import { resolve } from 'node:path'; export default defineConfig({ plugins: [react()], server: { - port: 3042, + port: 3061, proxy: { '/api': { target: 'http://192.168.10.120:5555', From 8f9ac7614fe59c92c7bae35738f09fdfd9fb1c76 Mon Sep 17 00:00:00 2001 From: json Date: Tue, 14 May 2024 18:14:31 +0800 Subject: [PATCH 002/118] login --- src/assets/authbg.png | Bin 0 -> 439864 bytes src/main.tsx | 4 +- src/pages/AuthLayout/AuthLayout.tsx | 55 +++++++++++++ src/pages/AuthLayout/index.ts | 2 + src/pages/AuthLayout/styles.module.scss | 32 ++++++++ src/pages/AuthRouter.tsx | 32 ++++++++ src/pages/PublicLayout/PublicLayout.tsx | 2 +- src/pages/login/index.tsx | 104 ++++++++++++++++++++++++ 8 files changed, 229 insertions(+), 2 deletions(-) create mode 100644 src/assets/authbg.png create mode 100644 src/pages/AuthLayout/AuthLayout.tsx create mode 100644 src/pages/AuthLayout/index.ts create mode 100644 src/pages/AuthLayout/styles.module.scss create mode 100644 src/pages/AuthRouter.tsx create mode 100644 src/pages/login/index.tsx diff --git a/src/assets/authbg.png b/src/assets/authbg.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2106a4c9dce8df095bc192f29cbb7131d5a847 GIT binary patch literal 439864 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 z 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

!SH)Qj`;AlXbxIj?JOx5*GcfN?o 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

Kosuxeq3LxSj- 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 z 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

1S7^K_MJa4>v+ADO6bzowv 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 D!YMi! literal 0 HcmV?d00001 diff --git a/src/main.tsx b/src/main.tsx index c65a675..d318384 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -6,6 +6,7 @@ import { ConfigProvider, theme } from 'antd'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import AppRouter from './pages/AppRouter'; +import AuthRouter from './pages/AuthRouter'; import FallbackLoading from './components/FallbackLoading'; import NotifyProvider from './components/NotifyProvider'; @@ -33,11 +34,12 @@ const App: React.FunctionComponent = () => { }, }, token: { colorPrimary: '#F39D1B' }, - + }} > + diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx new file mode 100644 index 0000000..9328455 --- /dev/null +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { Flex, Layout } from 'antd'; +import AuthImg from '../../assets/authbg.png'; +import PT_logo from '../../assets/PTFintech_logo.png'; +import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; + +const { Header, Footer, Sider, Content } = Layout; + +const headerStyle: React.CSSProperties = { + color: '#fff', + height: 56, + margin: '0 16', + padding: 0, + display: 'flex', + alignItems: 'center', + backgroundColor: 'rgb(31, 31, 31', + opacity: '10', +}; + +const contentStyle: React.CSSProperties = { + textAlign: 'center', + minHeight: 120, + lineHeight: '120px', + color: '#fff', +}; + +const footerStyle: React.CSSProperties = { + height: '656px', + color: '#fff', + backgroundColor: '#000', +}; + +const layoutStyle = { + overflow: 'hidden', + width: '100%', + height: '1677px', + maxWidth: '1920px', + backgroundImage: `url(${AuthImg})`, + backgroundSize: 'cover', + backgroundPosition: 'center', +}; + +const App: React.FC = () => ( + + +

+
+
+ Content +
Footer
+ + +); + +export default App; \ No newline at end of file diff --git a/src/pages/AuthLayout/index.ts b/src/pages/AuthLayout/index.ts new file mode 100644 index 0000000..93806bb --- /dev/null +++ b/src/pages/AuthLayout/index.ts @@ -0,0 +1,2 @@ +import AuthLayout from "./AuthLayout"; +export default AuthLayout; \ No newline at end of file diff --git a/src/pages/AuthLayout/styles.module.scss b/src/pages/AuthLayout/styles.module.scss new file mode 100644 index 0000000..ae71b77 --- /dev/null +++ b/src/pages/AuthLayout/styles.module.scss @@ -0,0 +1,32 @@ +.layout { + min-height: 100vh; + min-width: 100vw; + display: grid; + grid-auto-rows: 1fr 11fr; + grid-auto-columns: 1fr 11fr; + grid-template-rows: 1fr 11fr; + grid-template-columns: 1fr 11fr; + gap: 10px; +} + + +.header { + border: 2px solid rgb(0, 124, 128); + grid-column: 1 / span 2 ; + grid-row: 1; + height: 100%; +} + +.sider { + border: 2px solid rgb(10, 57, 119); + grid-column: 1; + grid-row: 2; +} + + +.content { + border: 2px solid rgb(19, 0, 128); + grid-column: 2 ; + grid-row: 2 ; +} + diff --git a/src/pages/AuthRouter.tsx b/src/pages/AuthRouter.tsx new file mode 100644 index 0000000..7b46404 --- /dev/null +++ b/src/pages/AuthRouter.tsx @@ -0,0 +1,32 @@ +import { lazy } from 'react'; +import { HashRouter, Navigate, Route, Routes } from 'react-router-dom'; + +interface IAuthRouterProps {} + +const AuthLayout = lazy(() => import('./AuthLayout')); +const Login = lazy(() => import('../pages/login/index')); +const AuthRouter: React.FunctionComponent = (props) => { + const {} = props || {}; + + return ( + + + } + /> + } + > + } + /> + + + + ); +}; + +export default AuthRouter; diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index ecdd111..42fc609 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -14,7 +14,7 @@ interface IPublicLayoutProps { } const PublicLayout: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; const route = { routes: [ { diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx new file mode 100644 index 0000000..998e0a7 --- /dev/null +++ b/src/pages/login/index.tsx @@ -0,0 +1,104 @@ +import { List, Avatar, Button, Collapse, CollapseProps, Space, theme } from 'antd'; +import * as React from 'react'; +import logo from '../../assets/PTFintech_logo.png' +import AccountMenu from '../account/components/AccountMenu'; +import mt4 from '../../assets/mt4.png'; +import mt5 from '../../assets/mt5.png'; + +interface IAccountProps { +} + +const Login: React.FunctionComponent = (props) => { + const { } = props || {}; + const PTAccount = [ + { + account: 'email@qq.com', + accountType: '寶泰帳戶', + icon: logo, + balance: '$ 0.00', + currency: '$', + isReal: '' + }, + ] + const MT4Account = [ + { + account: '3000000015', + accountType: 'MT4', + balance: '$ 0.00', + currency: '$', + isReal: '真實' + }, + { + account: '3000000016', + accountType: 'MT4', + balance: '$ 0.00', + currency: '$', + isReal: '模擬' + }, + ] + const genExtra = () => ( + { + event.stopPropagation(); + }}> + + + + + ); + const { token } = theme.useToken(); + const panelStyle: React.CSSProperties = { + marginBottom: 20, + background: token.colorFillAlter, + borderRadius: token.borderRadiusLG, + border: 'none', + }; + const items: CollapseProps['items'] = [ + { + key: 'MT4 帳戶', + label: + + + MT4 帳戶(2) + , + children: + ( + + ]} + > + {item.accountType} {item.isReal}帳戶} + /> +
+ 結餘 {item.balance} +
+
+ )} + />, + extra: genExtra(), + style: panelStyle, + }, + { + key: 'MT5 帳戶', + label: + + + MT5 帳戶(0) + , + children:
, + extra: genExtra(), + style: panelStyle, + }, + ]; + + return ( +
+
+ ); +}; + +export default Login; From 3315ed8809a52f31f516571b22ac3217c0f268c8 Mon Sep 17 00:00:00 2001 From: json Date: Fri, 17 May 2024 18:37:36 +0800 Subject: [PATCH 003/118] register --- src/api/auth/index.ts | 3 +- src/api/auth/types.ts | 6 - src/api/auth/useLogin.ts | 35 ++ src/api/auth/useRegister.ts | 85 +++++ src/assets/appStore.png | Bin 0 -> 4931 bytes src/assets/eye-solid.svg | 1 + src/assets/googlePlay.png | Bin 0 -> 8199 bytes src/assets/logo.png | Bin 0 -> 20397 bytes src/assets/openPassword.png | Bin 0 -> 1868 bytes src/main.tsx | 2 - src/pages/AppRouter.tsx | 55 ++- src/pages/AuthLayout/AuthLayout.tsx | 79 +++- src/pages/AuthLayout/components/UseFooter.tsx | 90 +++++ src/pages/AuthRouter.tsx | 32 -- src/pages/login/LoginPage.tsx | 74 ++++ src/pages/login/RegisterPage.tsx | 356 ++++++++++++++++++ src/pages/login/VerifyEmail.tsx | 67 ++++ src/pages/login/components/OuterFrame.tsx | 32 ++ src/pages/login/components/Test.tsx | 10 + src/pages/login/components/UseButton.tsx | 12 + src/pages/login/components/UseInput.tsx | 22 ++ src/pages/login/components/index.ts | 9 + src/pages/login/index.tsx | 104 ----- src/pages/login/login.tsx | 58 +++ 24 files changed, 937 insertions(+), 195 deletions(-) delete mode 100644 src/api/auth/types.ts create mode 100644 src/api/auth/useLogin.ts create mode 100644 src/api/auth/useRegister.ts create mode 100644 src/assets/appStore.png create mode 100644 src/assets/eye-solid.svg create mode 100644 src/assets/googlePlay.png create mode 100644 src/assets/logo.png create mode 100644 src/assets/openPassword.png create mode 100644 src/pages/AuthLayout/components/UseFooter.tsx delete mode 100644 src/pages/AuthRouter.tsx create mode 100644 src/pages/login/LoginPage.tsx create mode 100644 src/pages/login/RegisterPage.tsx create mode 100644 src/pages/login/VerifyEmail.tsx create mode 100644 src/pages/login/components/OuterFrame.tsx create mode 100644 src/pages/login/components/Test.tsx create mode 100644 src/pages/login/components/UseButton.tsx create mode 100644 src/pages/login/components/UseInput.tsx create mode 100644 src/pages/login/components/index.ts delete mode 100644 src/pages/login/index.tsx create mode 100644 src/pages/login/login.tsx diff --git a/src/api/auth/index.ts b/src/api/auth/index.ts index fcdac2d..01f77d1 100644 --- a/src/api/auth/index.ts +++ b/src/api/auth/index.ts @@ -1 +1,2 @@ -export * from './types'; \ No newline at end of file +export * from './useLogin'; +export * from './useRegister'; \ No newline at end of file diff --git a/src/api/auth/types.ts b/src/api/auth/types.ts deleted file mode 100644 index f256d0c..0000000 --- a/src/api/auth/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -type LoginRes = { - id: string; - token: string; -}; - -export type { LoginRes }; diff --git a/src/api/auth/useLogin.ts b/src/api/auth/useLogin.ts new file mode 100644 index 0000000..9e6d47c --- /dev/null +++ b/src/api/auth/useLogin.ts @@ -0,0 +1,35 @@ +import { UseTestMutationProps, useTestMutation } from "@/utils"; +import { axiosRoot } from "@/utils/axiosRoot"; + +type LoginRes = { + id: string; + token: string; +}; +type LoginProps ={ + email:string; + password: string; +} +type Other ={} + +const useLogin =(useProps: UseTestMutationProps) =>{ + const {...config} = useProps; + + const testMutation = useTestMutation({ + ...config, + mutationFn: (props) =>{ + const request = axiosRoot.post('/login', props).then(({data})=>data); + return request; + }, + delay: 1000, + onTest: (props )=>{ + return Promise.resolve({ + id: props.email , + token: props.password, + }) + } + }) + return testMutation; +} + +export {useLogin} +export type { LoginRes, LoginProps }; diff --git a/src/api/auth/useRegister.ts b/src/api/auth/useRegister.ts new file mode 100644 index 0000000..8d0ecf1 --- /dev/null +++ b/src/api/auth/useRegister.ts @@ -0,0 +1,85 @@ +import { UseTestMutationProps, useTestMutation } from '@/utils'; +import { useState } from 'react'; +import { axiosRoot } from '@/utils/axiosRoot'; + +type RegisterRes = { + userName: string; + userPhone: string; + userEmail: string; +}; + +type RegisterProps = { + userName: string; + userPhone: string; + userCountryCode: string; + userEmail: string; +}; + +// 註冊 +const useRegister = (useProps: UseTestMutationProps) => { + const { ...config } = useProps; + const [verificationCode, setVerificationCode] = useState(''); + const { mutate, isPending, error } = useTestMutation({ + ...config, + mutationFn: async (props) => { + try { + // 生成验证码并设置到状态中 + const sentVerificationCode = generateVerificationCode(); + setVerificationCode(sentVerificationCode); + console.log('123', verificationCode); + const { data } = await axiosRoot.post('/check-email', { email: props.userEmail }); + if (data.exists) { + throw new Error('此郵件地址已被註冊'); + } + + // 發送驗證郵件 + await axiosRoot.post('/send-verification-email', { + email: props.userEmail, + verificationCode: sentVerificationCode, + }); + } catch (error) { + throw error; + } + }, + delay: 1000, + }); + return { mutate, isPending, error, verificationCode }; +}; + +//重新寄出驗證碼 +const useSendVerificationCode = () => { + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + const [verificationCode, setVerificationCode] = useState(''); + + const sendVerificationCode = async (email: string) => { + setLoading(true); + setError(null); + const sentVerificationCode = generateVerificationCode(); + setVerificationCode(sentVerificationCode); + + try { + const sentVerificationCode = generateVerificationCode(); + setVerificationCode(sentVerificationCode); + await axiosRoot.post('/send-verification-email', { email, sentVerificationCode }); + setLoading(false); + alert(`驗證碼已發送到 ${email}`); + } catch (error) { + const [errorMessage, setErrorMessage] = useState(null); + setLoading(false); + setErrorMessage(errorMessage || '寄送驗證碼失敗'); + } + }; + + return { sendVerificationCode,verificationCode, loading, error }; +}; + +// 生成驗證碼的函數 +function generateVerificationCode() { + return Math.floor(100000 + Math.random() * 900000) + .toString() + .slice(0, 4); // 生成一個六位數的隨機數字,取前四位 +} + +export { useRegister, useSendVerificationCode }; +export type { RegisterRes, RegisterProps }; diff --git a/src/assets/appStore.png b/src/assets/appStore.png new file mode 100644 index 0000000000000000000000000000000000000000..905e783e0369039ffbe0cbb06320b1bc56df61a5 GIT binary patch literal 4931 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 S5_QGItgpZ?SDXKR|33lV1 \ No newline at end of file diff --git a/src/assets/googlePlay.png b/src/assets/googlePlay.png new file mode 100644 index 0000000000000000000000000000000000000000..db5ae4a5e398583c9db338925e6554e14f625d7a GIT binary patch literal 8199 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 A+W-In literal 0 HcmV?d00001 diff --git a/src/assets/logo.png b/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2acbb59179fb1f55740ab43c68a1aa16e7dcdb10 GIT binary patch literal 20397 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 { > - diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index f840eb9..ed64617 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -1,44 +1,39 @@ -import { lazy } from 'react'; +import { lazy, Suspense } from 'react'; import { HashRouter, Navigate, Route, Routes } from 'react-router-dom'; -interface IAppRouterProps { } - const PublicLayout = lazy(() => import('./PublicLayout')); +const AuthLayout = lazy(() => import('./AuthLayout')); const Home = lazy(() => import('./Home')); const Account = lazy(() => import('../pages/account/index')); const Property = lazy(() => import('../pages/property/index')); const User = lazy(() => import('../pages/user/index')); const History = lazy(() => import('../pages/history/index')); -const AppRouter: React.FunctionComponent = (props) => { - const { } = props || {}; +const Login = lazy(() => import('./login/login')); +const LoginPage = lazy(() => import('./login/LoginPage')); +const RegisterPage = lazy(() => import('./login/RegisterPage')); +const VerifyEmail = lazy(() => import('./login/VerifyEmail')); +const AppRouter: React.FunctionComponent = () => { return ( - - } /> - }> - } - /> - } - /> - } - /> - } - /> - } - /> - - + Loading...}> + + } /> + }> + } /> + } /> + } /> + } /> + } /> + + }> + } /> + } /> + } /> + } /> + + + ); }; diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 9328455..d9fb70e 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -1,22 +1,22 @@ import React from 'react'; -import { Flex, Layout } from 'antd'; +import { Layout, Dropdown } from 'antd'; +import { GlobalOutlined } from '@ant-design/icons'; import AuthImg from '../../assets/authbg.png'; -import PT_logo from '../../assets/PTFintech_logo.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; +import UseFooter from './components/UseFooter'; +import { Outlet } from 'react-router-dom'; -const { Header, Footer, Sider, Content } = Layout; +const { Header, Footer, Content } = Layout; const headerStyle: React.CSSProperties = { - color: '#fff', height: 56, - margin: '0 16', + width: '100vw', + maxWidth: '1920px', padding: 0, - display: 'flex', alignItems: 'center', - backgroundColor: 'rgb(31, 31, 31', + backgroundColor: 'rgb(31, 31, 31)', opacity: '10', }; - const contentStyle: React.CSSProperties = { textAlign: 'center', minHeight: 120, @@ -30,26 +30,65 @@ const footerStyle: React.CSSProperties = { backgroundColor: '#000', }; -const layoutStyle = { +const layoutStyle: React.CSSProperties = { overflow: 'hidden', width: '100%', height: '1677px', maxWidth: '1920px', + margin: '0 auto', backgroundImage: `url(${AuthImg})`, backgroundSize: 'cover', backgroundPosition: 'center', }; -const App: React.FC = () => ( - - -

-
-
- Content -
Footer
- - +const AuthLayout: React.FC = () => ( + +
+
+
+
+ +
+
+ + + +
+
+
+
+ +
+ +
+
+
+ +
+
); -export default App; \ No newline at end of file +export default AuthLayout; diff --git a/src/pages/AuthLayout/components/UseFooter.tsx b/src/pages/AuthLayout/components/UseFooter.tsx new file mode 100644 index 0000000..1beae23 --- /dev/null +++ b/src/pages/AuthLayout/components/UseFooter.tsx @@ -0,0 +1,90 @@ +import PT_logo_ from '../../../assets/logo.png'; +import Google_play from '../../../assets/googlePlay.png'; +import App_store from '../../../assets/appStore.png'; + +const liStyle = { + listStyleType: 'none', + padding: 0, +}; +const UlMargin = { + width: '145px', + marginRight: '58px', +}; + +const UseFooter: React.FC = () => ( +
+
+
+
+ +
+
+
+
+
+
投資市場
+
    +
  • 貨幣
  • +
  • 指數
  • +
  • 股票
  • +
  • 大宗商品
  • +
  • 加密貨幣
  • +
+
+
+
幫助中心
+
    +
  • 如何入金
  • +
  • 如何出金
  • +
  • 如何開立帳戶
  • +
  • 如何驗證帳戶
  • +
+
+
+
關於我們
+
    +
  • 簡介
  • +
  • 最新公告
  • +
+
+
+
隱私和法規
+
    +
  • 客戶協議書
  • +
  • 風險紕漏聲明
  • +
  • 免責協議
  • +
  • 保密協議
  • +
+
+
+
+
+ +
+
+ +
+
+
+
+
進行差價合約(CFD) 交易存在損失風險,您的投資價值可能會有波動。差價合約為複雜的金融產品,由於槓桿作用而存在迅速虧損的高風險。請您在交易前充分了解差價合約產品的運作方式,並評估自己能否承擔資金損失的高風險。
+
宝泰Fintech 通過瓦努阿圖共和國金融服務委員會完成註冊並受其監管,牌照號:40361,註冊辦事處:1st Floor, B & P House, Kumul Highway, Portvila, Vanuatu。
+
+
Copyright © 2023 宝泰 Fintech. All rights reserved.
+
+
+); + +export default UseFooter; diff --git a/src/pages/AuthRouter.tsx b/src/pages/AuthRouter.tsx deleted file mode 100644 index 7b46404..0000000 --- a/src/pages/AuthRouter.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { lazy } from 'react'; -import { HashRouter, Navigate, Route, Routes } from 'react-router-dom'; - -interface IAuthRouterProps {} - -const AuthLayout = lazy(() => import('./AuthLayout')); -const Login = lazy(() => import('../pages/login/index')); -const AuthRouter: React.FunctionComponent = (props) => { - const {} = props || {}; - - return ( - - - } - /> - } - > - } - /> - - - - ); -}; - -export default AuthRouter; diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx new file mode 100644 index 0000000..af3bccd --- /dev/null +++ b/src/pages/login/LoginPage.tsx @@ -0,0 +1,74 @@ +import { useLogin } from '@/api'; +import { Button, Card, Checkbox, Form, Input, Typography } from 'antd'; +import { useState } from 'react'; +import { Link } from 'react-router-dom'; + +const { Title, Text } = Typography; +interface ILoginPageProps {} +const LoginPage: React.FunctionComponent = (props) => { + const {} = props || {}; + const [remember, setRemember] = useState(false); + // mutation + const { mutate: login, isPending: underLogin } = useLogin({ isTest: false }); + + return ( + + 登入 +
login(values)} + > + + + + + + + { + setRemember(e.target.checked); + }} + > + 記住我 + + + + +
+ + 還沒有帳戶前往註冊 + +
+ ); +}; + +export default LoginPage; diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx new file mode 100644 index 0000000..fecfbcb --- /dev/null +++ b/src/pages/login/RegisterPage.tsx @@ -0,0 +1,356 @@ +import { useRegister, useSendVerificationCode } from '@/api'; +import { ExclamationCircleOutlined } from '@ant-design/icons'; +import { Button, Card, Checkbox, Form, Input, Select, Typography } from 'antd'; +import { useState } from 'react'; +import { Link } from 'react-router-dom'; + +interface IRegisterPageProps {} +const { Title, Text } = Typography; + +const RegisterPage: React.FunctionComponent = () => { + const [checked, setChecked] = useState(false); + const [verificationCode, setVerificationCode] = useState(''); + const [currentStep, setCurrentStep] = useState('register'); // 'register', 'verify', 'setPassword' + const [disabled, setDisabled] = useState(false); + const [countdown, setCountdown] = useState('3:00'); + const { + mutate: register, + isPending: underRegister, + error: registerError, + verificationCode: getVerificationCode, + } = useRegister(''); + const { error: verifyError } = useRegister({ isTest: false }); + const { mutate: setPassword, isPending: underSetPassword, error: setPasswordError } = useRegister({ isTest: false }); + const { + sendVerificationCode, + verificationCode: newVerificationCode, + error: sendCodeError, + } = useSendVerificationCode(); + const [userData, setUserData] = useState({ + userName: '', + userCountryCode: '', + userPhone: '', + userEmail: '', + }); + const countryCodes = [ + { value: '+1', label: '美國 (+1)' }, + { value: '+886', label: '台灣 (+886)' }, + ]; + + const handleClick = () => { + setDisabled(true); + + let secondsLeft = 180; + const timer = setInterval(() => { + const minutes = Math.floor(secondsLeft / 60); + const seconds = secondsLeft % 60; + setCountdown(`${minutes}:${seconds < 10 ? '0' : ''}${seconds}`); + + if (secondsLeft === 0) { + clearInterval(timer); + setDisabled(false); + setCountdown('3:00'); + } else { + secondsLeft--; + } + }, 1000); + }; + + const onRegisterFinish = (values: any) => { + setCurrentStep('verify'); + register(values); + }; + const allVerificationCode = newVerificationCode ?? getVerificationCode; + const onVerifyFinish = (values: any) => { + if (values.verificationCode !== allVerificationCode) { + return; + } + setCurrentStep('setPassword'); + setPassword(values); + }; + + const onSetPasswordFinish = (values: any) => { + if (values.password !== values.confirmPassword) { + return; + } + + setCurrentStep('login'); + console.log(values); + setPassword(values); + }; + + return ( + +
+ {currentStep === 'register' && ( + <> + 註冊 +
+ + + 請確保註冊資訊是正確無誤的。不正確的資訊可能導致帳戶無法使用或無法接收重要通知。 + +
+ {registerError && ( + + {registerError.message},請檢查輸入的資訊是否正確。 + + )} +
+ + setUserData({ ...userData, userName: e.target.value })} + /> + +
+ + setUserData({ ...userData, userPhone: e.target.value })} + /> + +
+ + setUserData({ ...userData, userEmail: e.target.value })} + /> + + setChecked(e.target.checked)} + > + + 我已閱讀並同意客戶協議書 + 風險披露聲明 + 免責聲明 + 保密協議 + + + + + +
+ + 已有帳戶前往登入 + + + )} + {currentStep === 'verify' && ( + <> + 驗證電子信箱 + + 已發送驗證碼至 + {userData.userEmail} + + {verifyError && ( + + {verifyError.message},請檢查輸入的資訊是否正確。 + + )} +
+ + setVerificationCode(e.target.value)} + /> + + + {verificationCode ? ( + + ) : ( + + )} + + {sendCodeError && ( + + {sendCodeError} + + )} +
+ + + 嘗試多次仍無法收到驗證碼?聯絡客服 + + + )} + {currentStep === 'setPassword' && ( + <> + 設定密碼 + + 設置安全係數高的密碼 (使用字母、數字和符號的組合) + + {setPasswordError && ( + + {setPasswordError.message},請檢查輸入的資訊是否正確。 + + )} +
+ 姓名 + {userData.userName} +
+
+
+ 電話號碼 + {userData.userCountryCode} {userData.userPhone} +
+
+ 電子信箱 + {userData.userEmail} +
+
+ {setPasswordError && ( + + {setPasswordError.message},請檢查輸入的資訊是否正確。 + + )} +
+ + + + ({ + validator(_, value) { + if (!value || getFieldValue('password') === value) { + return Promise.resolve(); + } + return Promise.reject(new Error('兩次輸入的密碼不一致')); + }, + }), + ]} + > + + + + + +
+ + )} +
+
+ ); +}; + +export default RegisterPage; diff --git a/src/pages/login/VerifyEmail.tsx b/src/pages/login/VerifyEmail.tsx new file mode 100644 index 0000000..58efe52 --- /dev/null +++ b/src/pages/login/VerifyEmail.tsx @@ -0,0 +1,67 @@ +import { useRegister } from '@/api'; +import { Button, Card, Form, Input, Typography } from 'antd'; +import { Link } from 'react-router-dom'; + +const { Title, Text } = Typography; + +interface IVerifyEmailProps {} + +const VerifyEmail: React.FunctionComponent = () => { + // mutation + const { mutate: Register, isPending: underRegister, error } = useRegister({ isTest: false }); + + return ( + + 驗證電子信箱 + + 已發送驗證碼至 + SSSS@SSSS + + {error && ( + + {error.message},請檢查輸入的資訊是否正確。 + + )} +
Register(values)} + > + + + + + + +
+ + 嘗試多次仍無法收到驗證碼?聯絡客服 + +
+ ); +}; + +export default VerifyEmail; diff --git a/src/pages/login/components/OuterFrame.tsx b/src/pages/login/components/OuterFrame.tsx new file mode 100644 index 0000000..18b7ae8 --- /dev/null +++ b/src/pages/login/components/OuterFrame.tsx @@ -0,0 +1,32 @@ +import React, { ReactNode } from 'react'; + +interface OuterFrameProps { + children: ReactNode; + title: string; +} + +const OuterFrame: React.FC = ({ children,title }) => ( +
+
+
+
{title}
+ {children} +
+
+
+); + +export default OuterFrame; diff --git a/src/pages/login/components/Test.tsx b/src/pages/login/components/Test.tsx new file mode 100644 index 0000000..923d802 --- /dev/null +++ b/src/pages/login/components/Test.tsx @@ -0,0 +1,10 @@ + +interface ITestProps { +} +const Test: React.FunctionComponent = (props) => { + return
+ this is test +
; +}; + +export default Test; diff --git a/src/pages/login/components/UseButton.tsx b/src/pages/login/components/UseButton.tsx new file mode 100644 index 0000000..7b101a9 --- /dev/null +++ b/src/pages/login/components/UseButton.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +interface UseButtonProps { + ButtonType?: "button" | "submit" | "reset" | undefined; + Title?: String; +} + +const UseButton: React.FC = ({ ButtonType = 'button',Title = ''}) => ( + +); + +export default UseButton; diff --git a/src/pages/login/components/UseInput.tsx b/src/pages/login/components/UseInput.tsx new file mode 100644 index 0000000..8da3520 --- /dev/null +++ b/src/pages/login/components/UseInput.tsx @@ -0,0 +1,22 @@ +import React, { ReactNode } from 'react'; + +interface UseInputProps { + InputType?: string; + title?: string; + error?: ReactNode; +} + +const UseInput: React.FC = ({ InputType = 'text', title = '', error = '' }) => ( + +); + +export default UseInput; diff --git a/src/pages/login/components/index.ts b/src/pages/login/components/index.ts new file mode 100644 index 0000000..b80548e --- /dev/null +++ b/src/pages/login/components/index.ts @@ -0,0 +1,9 @@ +import Test from './Test' + +const compoenents ={ + Test, + Item: Test, +} +export default Test +export {compoenents +} \ No newline at end of file diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx deleted file mode 100644 index 998e0a7..0000000 --- a/src/pages/login/index.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import { List, Avatar, Button, Collapse, CollapseProps, Space, theme } from 'antd'; -import * as React from 'react'; -import logo from '../../assets/PTFintech_logo.png' -import AccountMenu from '../account/components/AccountMenu'; -import mt4 from '../../assets/mt4.png'; -import mt5 from '../../assets/mt5.png'; - -interface IAccountProps { -} - -const Login: React.FunctionComponent = (props) => { - const { } = props || {}; - const PTAccount = [ - { - account: 'email@qq.com', - accountType: '寶泰帳戶', - icon: logo, - balance: '$ 0.00', - currency: '$', - isReal: '' - }, - ] - const MT4Account = [ - { - account: '3000000015', - accountType: 'MT4', - balance: '$ 0.00', - currency: '$', - isReal: '真實' - }, - { - account: '3000000016', - accountType: 'MT4', - balance: '$ 0.00', - currency: '$', - isReal: '模擬' - }, - ] - const genExtra = () => ( - { - event.stopPropagation(); - }}> - - - - - ); - const { token } = theme.useToken(); - const panelStyle: React.CSSProperties = { - marginBottom: 20, - background: token.colorFillAlter, - borderRadius: token.borderRadiusLG, - border: 'none', - }; - const items: CollapseProps['items'] = [ - { - key: 'MT4 帳戶', - label: - - - MT4 帳戶(2) - , - children: - ( - - ]} - > - {item.accountType} {item.isReal}帳戶} - /> -
- 結餘 {item.balance} -
-
- )} - />, - extra: genExtra(), - style: panelStyle, - }, - { - key: 'MT5 帳戶', - label: - - - MT5 帳戶(0) - , - children:
, - extra: genExtra(), - style: panelStyle, - }, - ]; - - return ( -
-
- ); -}; - -export default Login; diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx new file mode 100644 index 0000000..6d89ff4 --- /dev/null +++ b/src/pages/login/login.tsx @@ -0,0 +1,58 @@ +import React, { useState } from 'react'; +import OuterFrame from './components/OuterFrame'; +import UseInput from './components/UseInput'; +import UseButton from './components/UseButton'; +import OpenPassword from '../../assets/openPassword.png'; +import ClosedPassword from '../../assets/openPassword.png'; + +const Login: React.FC = () => { + const [showPassword, setShowPassword] = useState(false); // 新增一個狀態來追蹤密碼顯示/隱藏的狀態 + + return ( + +
+ +
+
+ {' '} + {/* 根據 showPassword 狀態切換密碼輸入框的類型 */} +
setShowPassword(!showPassword)} + > + {' '} +
+
+
+ +
+
+ +
+
+ 還沒有帳戶?前往註冊 +
+
+ ); +}; + +export default Login; From ced283c02bca8f21911472ea3d869bb37878182e Mon Sep 17 00:00:00 2001 From: json Date: Mon, 20 May 2024 18:07:32 +0800 Subject: [PATCH 004/118] InvestmentMarket --- src/api/auth/useRegister.ts | 42 +-- .../InvestmentMarket/HotInvestments.tsx | 249 ++++++++++++++++++ .../InvestmentMarket/InvestmentMarket.tsx | 59 +++++ src/components/ProtectBanner.tsx | 50 ++-- src/pages/AppRouter.tsx | 2 - src/pages/AuthLayout/AuthLayout.tsx | 8 +- src/pages/login/LoginPage.tsx | 2 +- src/pages/login/RegisterPage.tsx | 125 +++++---- src/pages/login/login.tsx | 58 ---- 9 files changed, 443 insertions(+), 152 deletions(-) create mode 100644 src/components/InvestmentMarket/HotInvestments.tsx create mode 100644 src/components/InvestmentMarket/InvestmentMarket.tsx delete mode 100644 src/pages/login/login.tsx diff --git a/src/api/auth/useRegister.ts b/src/api/auth/useRegister.ts index 8d0ecf1..792b276 100644 --- a/src/api/auth/useRegister.ts +++ b/src/api/auth/useRegister.ts @@ -1,6 +1,7 @@ -import { UseTestMutationProps, useTestMutation } from '@/utils'; +// src/api/auth/useRegister.ts import { useState } from 'react'; import { axiosRoot } from '@/utils/axiosRoot'; +import { UseTestMutationProps, useTestMutation } from '@/utils'; type RegisterRes = { userName: string; @@ -15,7 +16,6 @@ type RegisterProps = { userEmail: string; }; -// 註冊 const useRegister = (useProps: UseTestMutationProps) => { const { ...config } = useProps; const [verificationCode, setVerificationCode] = useState(''); @@ -23,16 +23,13 @@ const useRegister = (useProps: UseTestMutationProps { try { - // 生成验证码并设置到状态中 const sentVerificationCode = generateVerificationCode(); setVerificationCode(sentVerificationCode); - console.log('123', verificationCode); const { data } = await axiosRoot.post('/check-email', { email: props.userEmail }); if (data.exists) { throw new Error('此郵件地址已被註冊'); } - // 發送驗證郵件 await axiosRoot.post('/send-verification-email', { email: props.userEmail, verificationCode: sentVerificationCode, @@ -46,10 +43,9 @@ const useRegister = (useProps: UseTestMutationProps { const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); + const [error, setError] = useState(null); const [verificationCode, setVerificationCode] = useState(''); const sendVerificationCode = async (email: string) => { @@ -59,27 +55,41 @@ const useSendVerificationCode = () => { setVerificationCode(sentVerificationCode); try { - const sentVerificationCode = generateVerificationCode(); - setVerificationCode(sentVerificationCode); - await axiosRoot.post('/send-verification-email', { email, sentVerificationCode }); + await axiosRoot.post('/send-verification-email', { email, verificationCode: sentVerificationCode }); setLoading(false); alert(`驗證碼已發送到 ${email}`); } catch (error) { - const [errorMessage, setErrorMessage] = useState(null); setLoading(false); - setErrorMessage(errorMessage || '寄送驗證碼失敗'); + setError('寄送驗證碼失敗'); } }; - return { sendVerificationCode,verificationCode, loading, error }; + return { sendVerificationCode, verificationCode, loading, error }; +}; + +const onSetPasswordFinish = async (values: any, navigate: any) => { + try { + await axiosRoot.post('/save-password', { + password: values.password, + email: values.userEmail, + phone: values.userCountryCode + values.userPhone, + name: values.userName, + }); + setTimeout(() => { + navigate('/auth/loginPage'); + }, 3000); + return { successVisible: true }; + } catch (error) { + console.error('Error saving password:', error); + return { successVisible: false }; + } }; -// 生成驗證碼的函數 function generateVerificationCode() { return Math.floor(100000 + Math.random() * 900000) .toString() - .slice(0, 4); // 生成一個六位數的隨機數字,取前四位 + .slice(0, 4); } -export { useRegister, useSendVerificationCode }; +export { useRegister, useSendVerificationCode, onSetPasswordFinish }; export type { RegisterRes, RegisterProps }; diff --git a/src/components/InvestmentMarket/HotInvestments.tsx b/src/components/InvestmentMarket/HotInvestments.tsx new file mode 100644 index 0000000..d3f40d2 --- /dev/null +++ b/src/components/InvestmentMarket/HotInvestments.tsx @@ -0,0 +1,249 @@ +import { Card, Col, List, Row } from 'antd'; +import { Typography } from 'antd'; +const { Title, Text } = Typography; + +const HotInvestments = () => { + const data = [ + { + title: '市場', + }, + { + title: '漲跌幅', + }, + { + title: '1天', + }, + { + title: '賣出', + }, + { + title: '買入', + }, + { + title: '52周區間', + }, + { + title: '情緒', + }, + { + title: '交易', + }, + { + title: '關注', + }, + ]; + return ( +
+ 熱門投資 + + +
+ col-6 +
+ + +
+ col-6 +
+ + +
+ col-6 +
+ + +
+ col-6 +
+ +
+
+ 每日波動 + + +
+
+
123
+
123
+
+
+
123
+
123
+
+
+
+ + +
+
+
123
+
123
+
+
+
123
+
123
+
+
+
+ +
+
+
+ ( + + + Card content + + Card content + Card content + Card content + Card content + Card content + Card content + Card content + {/* 其他 Card 內容 */} + + )} + /> +
+
+
+
+ 新會員 尚未實名驗證 + 實名驗證審核中 + 已通過實名驗證 +
+
+
+
+ 未驗證,可限額入金 USD 2000 + 不可 交易、出金 +
+
+
+
+ ); +}; + +export default HotInvestments; diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx new file mode 100644 index 0000000..7600ba1 --- /dev/null +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -0,0 +1,59 @@ +import React, { useState } from 'react'; +import { ProCard } from '@ant-design/pro-card'; +import { Card } from 'antd'; +import Title from 'antd/lib/typography/Title'; +import HotInvestments from './HotInvestments'; + +const YourComponent = () => { + const [activeTab, setActiveTab] = useState('總覽'); + + const handleTabChange = (key: string) => { + setActiveTab(key); + }; + + return ( + + 投資市場 + + {/* 根據 activeTab 的值顯示不同的內容 */} + {activeTab === '總覽' && } + {activeTab === '貨幣' &&
貨幣內容
} + {activeTab === '指數' &&
指數內容
} + {activeTab === '股票' &&
股票內容
} + {activeTab === '大宗商品' &&
大宗商品內容
} + {activeTab === '加密貨幣' &&
加密貨幣內容
} +
+ ); +}; + +export default YourComponent; diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 51d7199..7e66d0c 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -1,22 +1,20 @@ import { Avatar, Button, Card, Col, Row, Space, Statistic, Typography } from 'antd'; -import * as React from 'react'; -import ProtectBannerImg_1 from '../assets/ProtectBanner_img_1.png' -import ProtectBannerImg_2 from '../assets/ProtectBanner_img_2.png' -import ProtectBannerImg_3 from '../assets/ProtectBanner_img_3.png' +import React, { useState } from 'react'; import { CheckOutlined, CloseOutlined } from '@ant-design/icons'; -import KYCModal from '@/pages/user/components/KYCModal'; -import { useState } from 'react'; -import { StatisticCard } from '@ant-design/pro-components'; import { Link } from 'react-router-dom'; +import ProtectBannerImg_1 from '../assets/ProtectBanner_img_1.png'; +import ProtectBannerImg_2 from '../assets/ProtectBanner_img_2.png'; +import ProtectBannerImg_3 from '../assets/ProtectBanner_img_3.png'; +import KYCModal from '@/pages/user/components/KYCModal'; import DownloadMT4 from './DownloadMT4'; +import InvestmentMarket from './InvestmentMarket/InvestmentMarket'; +import { StatisticCard } from '@ant-design/pro-components'; -interface IProtectBannerProps { -} +interface IProtectBannerProps {} -const ProtectBanner: React.FunctionComponent = (props) => { - const { } = props || {}; +const ProtectBanner: React.FunctionComponent = () => { const { Title, Text } = Typography; - const [OpenKYCModal, setOpenKYCModal] = useState(false); + const [openKYCModal, setOpenKYCModal] = useState(false); const { Divider } = StatisticCard; return ( @@ -25,8 +23,8 @@ const ProtectBanner: React.FunctionComponent = (props) => { - 歡迎登入 寶泰! - 通過實名驗證,開始投資 + 歡迎登入 寶泰! + 通過實名驗證,開始投資
@@ -65,11 +63,13 @@ const ProtectBanner: React.FunctionComponent = (props) => {
- +
- + Protect Banner 1
@@ -77,8 +77,8 @@ const ProtectBanner: React.FunctionComponent = (props) => { - 歡迎登入 寶泰! - 驗證審核中,不妨先存入資金! + 歡迎登入 寶泰! + 驗證審核中,不妨先存入資金!
@@ -126,7 +126,7 @@ const ProtectBanner: React.FunctionComponent = (props) => { - + Protect Banner 2 @@ -134,8 +134,7 @@ const ProtectBanner: React.FunctionComponent = (props) => { - 歡迎登入 寶泰! - + 歡迎登入 寶泰! 我的總價值} @@ -178,20 +177,21 @@ const ProtectBanner: React.FunctionComponent = (props) => { - + - + - + Protect Banner 3 - setOpenKYCModal(false)} /> + setOpenKYCModal(false)} /> +
); }; diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index ed64617..2b7e8ab 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -8,7 +8,6 @@ const Account = lazy(() => import('../pages/account/index')); const Property = lazy(() => import('../pages/property/index')); const User = lazy(() => import('../pages/user/index')); const History = lazy(() => import('../pages/history/index')); -const Login = lazy(() => import('./login/login')); const LoginPage = lazy(() => import('./login/LoginPage')); const RegisterPage = lazy(() => import('./login/RegisterPage')); const VerifyEmail = lazy(() => import('./login/VerifyEmail')); @@ -27,7 +26,6 @@ const AppRouter: React.FunctionComponent = () => { } /> }> - } /> } /> } /> } /> diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index d9fb70e..582b7f2 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -9,8 +9,8 @@ import { Outlet } from 'react-router-dom'; const { Header, Footer, Content } = Layout; const headerStyle: React.CSSProperties = { - height: 56, width: '100vw', + height: 56, maxWidth: '1920px', padding: 0, alignItems: 'center', @@ -39,6 +39,7 @@ const layoutStyle: React.CSSProperties = { backgroundImage: `url(${AuthImg})`, backgroundSize: 'cover', backgroundPosition: 'center', + position:'relative', }; const AuthLayout: React.FC = () => ( @@ -47,7 +48,8 @@ const AuthLayout: React.FC = () => (
(
-
+
diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index af3bccd..7be5a53 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -1,9 +1,9 @@ import { useLogin } from '@/api'; import { Button, Card, Checkbox, Form, Input, Typography } from 'antd'; +const { Title, Text } = Typography; import { useState } from 'react'; import { Link } from 'react-router-dom'; -const { Title, Text } = Typography; interface ILoginPageProps {} const LoginPage: React.FunctionComponent = (props) => { const {} = props || {}; diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index fecfbcb..e820980 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -1,37 +1,53 @@ -import { useRegister, useSendVerificationCode } from '@/api'; +import { useRegister, useSendVerificationCode, onSetPasswordFinish } from '@/api'; +import { useTestMutation } from '@/utils'; import { ExclamationCircleOutlined } from '@ant-design/icons'; -import { Button, Card, Checkbox, Form, Input, Select, Typography } from 'antd'; +import { Alert, Button, Card, Checkbox, Form, Input, Select, Typography } from 'antd'; import { useState } from 'react'; -import { Link } from 'react-router-dom'; - -interface IRegisterPageProps {} +import { Link, useNavigate } from 'react-router-dom'; const { Title, Text } = Typography; -const RegisterPage: React.FunctionComponent = () => { +const RegisterPage = () => { const [checked, setChecked] = useState(false); const [verificationCode, setVerificationCode] = useState(''); const [currentStep, setCurrentStep] = useState('register'); // 'register', 'verify', 'setPassword' const [disabled, setDisabled] = useState(false); const [countdown, setCountdown] = useState('3:00'); + const [successVisible, setSuccessVisible] = useState(false); + + const navigate = useNavigate(); // 使用 useNavigate 來獲取導航函數 + const { mutate: register, isPending: underRegister, error: registerError, - verificationCode: getVerificationCode, - } = useRegister(''); - const { error: verifyError } = useRegister({ isTest: false }); - const { mutate: setPassword, isPending: underSetPassword, error: setPasswordError } = useRegister({ isTest: false }); + verificationCode: oldVerificationCode, + } = useRegister({ onSuccess: () => setCurrentStep('verify') }); + const { sendVerificationCode, verificationCode: newVerificationCode, error: sendCodeError, } = useSendVerificationCode(); + + const { + mutate: setPassword, + isPending: underSetPassword, + error: setPasswordError, + } = useTestMutation({ + mutationFn: (values) => onSetPasswordFinish(values, navigate), // 傳遞 navigate 給 onSetPasswordFinish + onSuccess: () => { + setCurrentStep('login'); + setSuccessVisible(true); // 設置成功提示可見 + }, + }); + const [userData, setUserData] = useState({ userName: '', userCountryCode: '', userPhone: '', userEmail: '', }); + const countryCodes = [ { value: '+1', label: '美國 (+1)' }, { value: '+886', label: '台灣 (+886)' }, @@ -57,25 +73,29 @@ const RegisterPage: React.FunctionComponent = () => { }; const onRegisterFinish = (values: any) => { - setCurrentStep('verify'); + setUserData(values); register(values); + setCurrentStep('verify'); }; - const allVerificationCode = newVerificationCode ?? getVerificationCode; - const onVerifyFinish = (values: any) => { - if (values.verificationCode !== allVerificationCode) { + + const allVerificationCode = newVerificationCode || oldVerificationCode; + + const onVerifyFinish = () => { + if (verificationCode !== allVerificationCode) { + console.log(verificationCode); + console.log(allVerificationCode); + alert('驗證碼不正確'); return; } setCurrentStep('setPassword'); - setPassword(values); }; - const onSetPasswordFinish = (values: any) => { + const onSetPasswordFormFinish = (values: any) => { if (values.password !== values.confirmPassword) { + setUserData(values); + alert('兩次輸入的密碼不一致'); return; } - - setCurrentStep('login'); - console.log(values); setPassword(values); }; @@ -191,15 +211,14 @@ const RegisterPage: React.FunctionComponent = () => { type='secondary' style={{ display: 'flex', gap: 10, marginBottom: 30 }} > - 已發送驗證碼至 - {userData.userEmail} + 已發送驗證碼至{userData.userEmail} - {verifyError && ( + {sendCodeError && ( - {verifyError.message},請檢查輸入的資訊是否正確。 + {sendCodeError} )}
= () => { onChange={(e) => setVerificationCode(e.target.value)} /> - - {verificationCode ? ( + {verificationCode ? ( // 如果驗證碼不為空,顯示送出按鈕 + - ) : ( + + ) : ( + // 如果驗證碼為空,顯示寄送驗證碼按鈕 + - )} - - {sendCodeError && ( - - {sendCodeError} - + )}
@@ -290,25 +304,19 @@ const RegisterPage: React.FunctionComponent = () => {
電話號碼 - {userData.userCountryCode} {userData.userPhone} + + {userData.userCountryCode} {userData.userPhone} +
電子信箱 {userData.userEmail}
- {setPasswordError && ( - - {setPasswordError.message},請檢查輸入的資訊是否正確。 - - )}
= () => { )}
+ {successVisible && ( +
+ 成功} + description='註冊成功' + type='success' + showIcon + style={{ display: 'flex', alignItems: 'center', background: 'black', border: '1px solid white' }} + /> +
+ )}
); }; diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx deleted file mode 100644 index 6d89ff4..0000000 --- a/src/pages/login/login.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { useState } from 'react'; -import OuterFrame from './components/OuterFrame'; -import UseInput from './components/UseInput'; -import UseButton from './components/UseButton'; -import OpenPassword from '../../assets/openPassword.png'; -import ClosedPassword from '../../assets/openPassword.png'; - -const Login: React.FC = () => { - const [showPassword, setShowPassword] = useState(false); // 新增一個狀態來追蹤密碼顯示/隱藏的狀態 - - return ( - -
- -
-
- {' '} - {/* 根據 showPassword 狀態切換密碼輸入框的類型 */} -
setShowPassword(!showPassword)} - > - {' '} -
-
-
- -
-
- -
-
- 還沒有帳戶?前往註冊 -
-
- ); -}; - -export default Login; From c1af28d8f4b62ad57038c12db7daeed1f95e84de Mon Sep 17 00:00:00 2001 From: json Date: Thu, 23 May 2024 18:36:23 +0800 Subject: [PATCH 005/118] loading --- src/components/AccountChart.tsx | 40 +- src/components/AddAccount.tsx | 149 +++++++ src/components/GoToTrade.tsx | 167 ++++++++ .../InvestmentMarket/InvestmentMarket.tsx | 4 +- src/pages/AppRouter.tsx | 6 +- .../HotInvestMents/HotInvestMents.tsx} | 81 ++-- src/pages/HotInvestMents/MyFocus.tsx | 159 ++++++++ src/pages/PublicLayout/PublicLayout.tsx | 10 +- src/pages/PublicLayout/UserChat.tsx | 116 ++++++ .../history/accountHistory/AccountHistory.tsx | 40 ++ .../history/accountHistory/ClosePosition.tsx | 127 ++++++ src/pages/history/index.tsx | 44 ++- src/pages/login/VerifyEmail.tsx | 67 ---- src/pages/property/Transfer.tsx | 112 ++++-- src/pages/property/Withdraw.tsx | 205 ++++++---- .../property/components/DepositUsdtTrc20.tsx | 204 ++++++---- .../components/SafetyVerification.tsx | 374 ++++++++++++++++++ .../property/components/TransferLoading.tsx | 93 +++++ src/pages/property/components/USDTLoading.tsx | 115 ++++++ src/pages/property/components/UseLoading.tsx | 108 +++++ 20 files changed, 1887 insertions(+), 334 deletions(-) create mode 100644 src/components/AddAccount.tsx create mode 100644 src/components/GoToTrade.tsx rename src/{components/InvestmentMarket/HotInvestments.tsx => pages/HotInvestMents/HotInvestMents.tsx} (80%) create mode 100644 src/pages/HotInvestMents/MyFocus.tsx create mode 100644 src/pages/PublicLayout/UserChat.tsx create mode 100644 src/pages/history/accountHistory/AccountHistory.tsx create mode 100644 src/pages/history/accountHistory/ClosePosition.tsx delete mode 100644 src/pages/login/VerifyEmail.tsx create mode 100644 src/pages/property/components/SafetyVerification.tsx create mode 100644 src/pages/property/components/TransferLoading.tsx create mode 100644 src/pages/property/components/USDTLoading.tsx create mode 100644 src/pages/property/components/UseLoading.tsx diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index fe6f1a1..6d4b1e0 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -5,11 +5,10 @@ import { CaretLeftOutlined, CaretRightOutlined } from '@ant-design/icons'; import SelectAccount from './SelectAccount'; import { Link } from 'react-router-dom'; -interface IAccountChartProps { -} +interface IAccountChartProps {} const AccountChart: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; const data = [ { type: '可用', @@ -36,8 +35,8 @@ const AccountChart: React.FunctionComponent = (props) => { }, label: { style: { - color: '#fff' - } + color: '#fff', + }, }, radius: 0.8, padding: 'auto', @@ -74,7 +73,11 @@ const AccountChart: React.FunctionComponent = (props) => { + + + + + - } /> - + ); }; diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx new file mode 100644 index 0000000..e4fcbfb --- /dev/null +++ b/src/components/AddAccount.tsx @@ -0,0 +1,149 @@ +import React, { useState } from 'react'; +import { Modal, Typography, Button, Dropdown, Menu, Radio, Form, Input } from 'antd'; +import Mt4 from '../assets/mt4.png'; + +const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visible, onClose }) => { + const [selectedPlatform, setSelectedPlatform] = useState(null); + const [accountType, setAccountType] = useState('real'); + + const platforms = [ + { name: 'metaTrade 4', key: 'mt4' }, + { name: 'metaTrade 5', key: 'mt5' }, + ]; + + const handleSelectPlatform = (key: string) => { + setSelectedPlatform(key); + }; + + const platformMenu = ( + + + window + mac + + + iphoen + ios + + + ); + + const onFinish = (values: any) => { + console.log('Received values:', values); + }; + + return ( + 新增帳戶} + visible={visible} + onCancel={onClose} // 確保在點擊 Modal 外部或點擊 X 按鈕時會調用 onClose 函數 + footer={null} + > + + 選擇交易平台 + {platforms.map((platform) => ( + + ))} + 選擇帳戶類型 + + setAccountType(e.target.value)} + value={accountType} + style={{ marginTop: 20 }} + > + 真實帳戶 + 虛擬帳戶 + + + 設定帳戶密碼 + + + + + + + + + + ); +}; + +export default AddAccount; diff --git a/src/components/GoToTrade.tsx b/src/components/GoToTrade.tsx new file mode 100644 index 0000000..6ee022b --- /dev/null +++ b/src/components/GoToTrade.tsx @@ -0,0 +1,167 @@ +import React, { useState } from 'react'; +import { Modal, Typography, Button, Dropdown, Menu } from 'antd'; +import AddAccount from './AddAccount'; // 請替換成實際的路徑 +import Mt4 from '../assets/mt4.png'; + +interface GoToTradeProps { + isModalVisible: boolean; + handleOk: () => void; + handleCancel: () => void; +} + +const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleCancel }) => { + const [selectedPlatform, setSelectedPlatform] = useState(null); + const [showAddAccount, setShowAddAccount] = useState(false); // 控制顯示新增帳戶彈窗的狀態 + + const platforms = [ + { name: 'metaTrade 4', key: 'mt4' }, + { name: 'metaTrade 5', key: 'mt5' }, + ]; + + const handleSelectPlatform = (key: string) => { + setSelectedPlatform(key); + }; + + const platformMenu = ( + + + window + mac + + + iphone + ios + + + ); + + const AccountMenuContent = ( + + + MT4-1505050505 + MT4-1505050505 + + + setShowAddAccount(true)} // 點擊時顯示新增帳戶彈窗 + > + + + + ); + + return ( + <> + + + 前往交易 + +
+
+
+ + AUDJPY + 市場開放 + +
+ 1231123123 + + 123 + 123 + +
+
+
+ + } + visible={isModalVisible} + onOk={handleOk} + onCancel={handleCancel} + > + 選擇交易平台 + {platforms.map((platform) => ( + + ))} + + 選擇帳戶 + 依上方選擇篩選 + + +
+ xxxxx帳戶 +
+
+ 帳戶可用資金:$ 78763 +
+ {showAddAccount && ( // 顯示 AddAccount 組件的條件 + setShowAddAccount(false)} + footer={null} // 不顯示底部按鈕 + > + setShowAddAccount(false)} /> + + )} + + ); +}; + +export default GoToTrade; diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index 7600ba1..d89d752 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { ProCard } from '@ant-design/pro-card'; import { Card } from 'antd'; import Title from 'antd/lib/typography/Title'; -import HotInvestments from './HotInvestments'; +import HotInvestMents from '../../pages/HotInvestMents/HotInvestMents'; const YourComponent = () => { const [activeTab, setActiveTab] = useState('總覽'); @@ -46,7 +46,7 @@ const YourComponent = () => { }} /> {/* 根據 activeTab 的值顯示不同的內容 */} - {activeTab === '總覽' && } + {activeTab === '總覽' && } {activeTab === '貨幣' &&
貨幣內容
} {activeTab === '指數' &&
指數內容
} {activeTab === '股票' &&
股票內容
} diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 2b7e8ab..39829cc 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -10,7 +10,8 @@ const User = lazy(() => import('../pages/user/index')); const History = lazy(() => import('../pages/history/index')); const LoginPage = lazy(() => import('./login/LoginPage')); const RegisterPage = lazy(() => import('./login/RegisterPage')); -const VerifyEmail = lazy(() => import('./login/VerifyEmail')); +const HotInvestMents = lazy(() => import('../pages/HotInvestMents/HotInvestMents')); +const MyFocus = lazy(() => import('../pages/HotInvestMents/MyFocus')); const AppRouter: React.FunctionComponent = () => { return ( @@ -24,11 +25,12 @@ const AppRouter: React.FunctionComponent = () => { } /> } /> } /> + } /> + } /> }> } /> } /> - } /> diff --git a/src/components/InvestmentMarket/HotInvestments.tsx b/src/pages/HotInvestMents/HotInvestMents.tsx similarity index 80% rename from src/components/InvestmentMarket/HotInvestments.tsx rename to src/pages/HotInvestMents/HotInvestMents.tsx index d3f40d2..f807b1c 100644 --- a/src/components/InvestmentMarket/HotInvestments.tsx +++ b/src/pages/HotInvestMents/HotInvestMents.tsx @@ -1,45 +1,67 @@ -import { Card, Col, List, Row } from 'antd'; -import { Typography } from 'antd'; +import React, { useState } from 'react'; +import { Button, Card, Col, List, Row, Typography } from 'antd'; +import GoToTrade from '../../components/GoToTrade'; + const { Title, Text } = Typography; const HotInvestments = () => { + const [isModalVisible, setIsModalVisible] = useState(false); + + const showModal = () => { + setIsModalVisible(true); + }; + + const handleOk = () => { + setIsModalVisible(false); + }; + + const handleCancel = () => { + setIsModalVisible(false); + }; + const data = [ { title: '市場', + content: '1' }, { title: '漲跌幅', }, { title: '1天', + content: '1' }, { title: '賣出', + content: '1' }, { title: '買入', + content: '1' }, { title: '52周區間', + content: '1' }, { title: '情緒', + content: '1' }, { title: '交易', + content: }, { title: '關注', + content: '1' }, ]; + return (
熱門投資 - +
{ col-6
- +
{ col-6
- +
{ col-6
- +
{
每日波動 - - + +
{
- +
{ ( + renderItem={(item) => ( - Card content + {item.content ? item.content : '錯誤'} - Card content - Card content - Card content - Card content - Card content - Card content - Card content - {/* 其他 Card 內容 */} )} /> @@ -242,6 +238,11 @@ const HotInvestments = () => {
+
); }; diff --git a/src/pages/HotInvestMents/MyFocus.tsx b/src/pages/HotInvestMents/MyFocus.tsx new file mode 100644 index 0000000..c1bf7dc --- /dev/null +++ b/src/pages/HotInvestMents/MyFocus.tsx @@ -0,0 +1,159 @@ +import { ProCard } from '@ant-design/pro-components'; +import { Button, Card, Progress, Table, Tabs } from 'antd'; +import { key } from 'localforage'; +import React from 'react'; + +interface TabContentProps { + content: string; +} +const HotInvestments = () => { + const TabContent: React.FC = ({}) => { + const data = [ + { + title:'市場', + dataIndex:'market', + key:'market', + render: () => <>買入, + }, + { + title: '漲跌幅', + dataIndex:'quoteChange', + key:'quoteChange', + render: () => <>買入, + }, + { + title: '1天', + dataIndex:'OneDay', + key:'OneDay', + render: () => <>123, + }, + { + title: '賣出', + dataIndex:'sell', + key:'sell', + render: () => <>123, + }, + { + title: '買入', + dataIndex:'buy', + key:'buy', + render: () => <>123, + }, + { + title: '52周區間', + dataIndex:'52week', + key:'52week', + render: () => 123, + }, + { + title: '情緒', + dataIndex:'mood', + key:'mood', + render: () => ( + '買入 63%'} + /> + ), + }, + { + title: '交易', + dataIndex:'trade', + key:'trade', + render: () => , + }, + { + title: '關注', + dataIndex:'focus', + key:'focus', + render: () => <>買入, + }, + ]; + const contentData = [ + { + market:'123', + }, + {render: () => <>123,} + ] + + return ( + + ); + }; + + const InvestmentCommodities = () => { + return ( + + + + + + + + + + + + + + + + + + ); + }; + + return ( + + , + }, + { + label: '投資者', + key: '投資者', + children: , + }, + { + label: '投資組合', + key: '投資組合', + children: , + }, + ]} + /> + + ); +}; + +export default HotInvestments; diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 42fc609..cd727d9 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -3,6 +3,7 @@ import { ProLayout, PageContainer, } from '@ant-design/pro-components'; +import UserChat from './UserChat' import PT_logo from '../../assets/PTFintech_logo.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; import AD_USDTpay from '../../assets/AD_USDTpay.png'; @@ -57,8 +58,8 @@ const PublicLayout: React.FunctionComponent = (props) => { name: '客戶服務', icon: , children: [ - { path: '/', name: '投資市場' }, - { path: '/', name: '我的關注' }, + { path: '/投資市場', name: 投資市場 }, + { path: '/我的關注', name: 我的關注 }, { path: '/', name: '新聞' }, { path: '/', name: '工具' }, ] @@ -66,7 +67,7 @@ const PublicLayout: React.FunctionComponent = (props) => { { key: '優惠活動', path: '/', name: '優惠活動', icon: , }, { key: '交易社區', path: '/', name: '交易社區', icon: , }, ], - }; + }; const data = [ { title: 'Title 1', @@ -147,7 +148,9 @@ const PublicLayout: React.FunctionComponent = (props) => {
總價值
$ 0.00
+ + + ( + + } /> : null + } + title={message.type === 'customerService' ? '客服' : '我'} + description={message.content} + style={{ textAlign: message.type === 'customerService' ? 'left' : 'right' }} + /> + + )} + /> + +
+ + + + + + +
+
+ + ); +}; + +export default CustomerService; diff --git a/src/pages/history/accountHistory/AccountHistory.tsx b/src/pages/history/accountHistory/AccountHistory.tsx new file mode 100644 index 0000000..209416f --- /dev/null +++ b/src/pages/history/accountHistory/AccountHistory.tsx @@ -0,0 +1,40 @@ +import * as React from 'react'; +import ClosePosition from './ClosePosition'; // 需要确保正确导入 InSuccess 组件 +import { Tabs } from 'antd'; +import { useLocation } from 'react-router-dom'; + +interface IAccountHistoryTabsProps {} + +const AccountHistoryTabs: React.FunctionComponent = (props) => { + const {} = props || {}; + const location = useLocation(); + const pageState = location.state; + + + return ( +
+ , + }, + { + label: '持倉', + key: '持倉', + children: , + }, + { + label: '掛單', + key: '掛單', + children: , + }, + ]} + /> +
+ ); +}; + +export default AccountHistoryTabs; diff --git a/src/pages/history/accountHistory/ClosePosition.tsx b/src/pages/history/accountHistory/ClosePosition.tsx new file mode 100644 index 0000000..14fbe8e --- /dev/null +++ b/src/pages/history/accountHistory/ClosePosition.tsx @@ -0,0 +1,127 @@ +import { ProCard } from '@ant-design/pro-components'; +import { Card, List, Tabs } from 'antd'; +import * as React from 'react'; + +interface IClosePosition {} + +interface TabContentProps { + content: string; +} + +const TabContent: React.FC = ({ content }) => { + const data = [ + { + title: '開立倉位()', + content: '買入', + }, + { + title: '單位', + content: '1', + }, + { + title: '開倉', + content: '123', + }, + { + title: '平倉', + content: '123', + }, + { + title: '止損', + content: '123', + }, + { + title: '止盈', + content: '123', + }, + { + title: '傭金', + content: '買入', + footer: '0', + }, + { + title: '稅收', + content: '買入', + footer: '0', + }, + { + title: '過夜利息', + content: '買入', + footer: '0', + ProfitAndLoss: '損益', + }, + { + title: '盈虧', + content: '買入', + ProfitAndLoss: '-8763', + }, + ]; + + return ( + + ( + + + {item.content} + + {item.footer} + + {item.ProfitAndLoss} + + {/* 其他 Card 內容 */} + + )} + /> + + ); +}; + +const InSuccess: React.FunctionComponent = (props) => { + const {} = props || {}; + + return ( + + + + + + + + + + + + + + + + + + ); +}; + +export default InSuccess; diff --git a/src/pages/history/index.tsx b/src/pages/history/index.tsx index 0034851..646b7ee 100644 --- a/src/pages/history/index.tsx +++ b/src/pages/history/index.tsx @@ -1,31 +1,35 @@ import { ProCard } from '@ant-design/pro-components'; +import { DatePicker } from 'antd'; import * as React from 'react'; import PropertyHistoryTabs from './propertyHistory/PropertyHistoryTabs'; +import AccountHistoryTabs from './accountHistory/AccountHistory'; -interface IHistoryProps { -} +interface IHistoryProps {} const History: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; return ( - ', - }, - { - label: '資產報表', - key: '資產報表', - children: , - }, - ] - }} - /> +
+ , + }, + { + label: '資產報表', + key: '資產報表', + children: , + }, + ], + }} + /> + +
); }; diff --git a/src/pages/login/VerifyEmail.tsx b/src/pages/login/VerifyEmail.tsx deleted file mode 100644 index 58efe52..0000000 --- a/src/pages/login/VerifyEmail.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { useRegister } from '@/api'; -import { Button, Card, Form, Input, Typography } from 'antd'; -import { Link } from 'react-router-dom'; - -const { Title, Text } = Typography; - -interface IVerifyEmailProps {} - -const VerifyEmail: React.FunctionComponent = () => { - // mutation - const { mutate: Register, isPending: underRegister, error } = useRegister({ isTest: false }); - - return ( - - 驗證電子信箱 - - 已發送驗證碼至 - SSSS@SSSS - - {error && ( - - {error.message},請檢查輸入的資訊是否正確。 - - )} -
Register(values)} - > - - - - - - - - - 嘗試多次仍無法收到驗證碼?聯絡客服 - -
- ); -}; - -export default VerifyEmail; diff --git a/src/pages/property/Transfer.tsx b/src/pages/property/Transfer.tsx index 88af060..edb5f16 100644 --- a/src/pages/property/Transfer.tsx +++ b/src/pages/property/Transfer.tsx @@ -1,56 +1,88 @@ import { Button, Form, Input, Space } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; +import SafetyVerification from './components/SafetyVerification'; -interface ITransferProps { -} +interface ITransferProps {} const Transfer: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; + const [openTransfer, setOpenTransfer] = React.useState(false); + const [currentStep, setCurrentStep] = React.useState('login'); + const [withdrawal, setWithdrawal] = React.useState('transfer'); const [form] = Form.useForm(); const onReset = () => { form.resetFields(); }; + const handleNextStep = () => { + setOpenTransfer(true); + }; return ( -
- - - - - - - -
-
- + - - - - - - - - - + + + + + + + +
+
+ + + + + + + + + + + { + setOpenTransfer(false); + setCurrentStep('login'); + setWithdrawal('transfer') + }} + currentStep={currentStep} + setCurrentStep={setCurrentStep} + withdrawal={withdrawal} + setWithdrawal={setWithdrawal} + /> + ); }; diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 35c3112..904aaa2 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -1,99 +1,152 @@ import { Button, Form, Input, Select, Space, Tooltip, Typography } from 'antd'; import * as React from 'react'; import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; +import SafetyVerification from './components/SafetyVerification'; -interface IWithdrawProps { -} +interface IWithdrawProps {} const Withdraw: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; const { Text } = Typography; const [form] = Form.useForm(); + const [openSafetyVerification, setOpenSafetyVerification] = React.useState(false); + const [currentStep, setCurrentStep] = React.useState('login'); + const [withdrawal, setWithdrawal] = React.useState('USDT-TRC20'); + const { Option } = Select; + const onReset = () => { form.resetFields(); }; - const { Option } = Select; + + const handleNextStep = () => { + setOpenSafetyVerification(true); + }; + const selectAfter = ( - setWithdrawal(value)} + > + + ); + return ( -
- + - - 宝泰帳戶 - {'email@qq.com'} - - 使用轉帳功能,將其他帳戶的可用資金轉移至寶泰帳戶後進行出金 - - } - > - - - - + + + 宝泰帳戶 - {'email@qq.com'} + + 使用轉帳功能,將其他帳戶的可用資金轉移至寶泰帳戶後進行出金 + + } + > + + + + - -
$ 0.00
-
- - - + +
$ 0.00
+
+ + + + + + +
+
+ + +
- -
+ + + + 變更 + + } + /> + } + /> + } + /> - - + + + + + + - - - {/* CNY 帶入KYC資料*/} - 變更 - } - /> - {/* USDT-TRC20 */} - } /> - } - /> - - - - - - - - + + { + setOpenSafetyVerification(false); + setCurrentStep('login'); + }} + currentStep={currentStep} + setCurrentStep={setCurrentStep} + withdrawal={withdrawal} + setWithdrawal={setWithdrawal} + /> + ); }; diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index 5bf5551..6202003 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -1,6 +1,7 @@ import { Avatar, Button, Collapse, CollapseProps, Divider, Flex, Form, List, Modal, QRCode, Space, Typography } from 'antd'; import * as React from 'react'; -import K100U_logo from '../../../assets/k100u_logo.png' +import K100U_logo from '../../../assets/k100u_logo.png'; +import USDTLoading from './USDTLoading'; interface IDepositUsdtTrc20Props { open: boolean; @@ -14,21 +15,14 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope { key: '1', label: '注意事項', - children: + children: (
    -
  • - 請於時限內完成付款 -
  • -
  • - 轉帳後請保留轉帳明細截圖 -
  • -
  • - 轉帳完成後請務必點擊我已完成付款 -
  • -
  • - 每筆交易均需酌收手續費用請詢問您的錢包平台商 -
  • -
, +
  • 請於時限內完成付款
  • +
  • 轉帳後請保留轉帳明細截圖
  • +
  • 轉帳完成後請務必點擊我已完成付款
  • +
  • 每筆交易均需酌收手續費用請詢問您的錢包平台商
  • + + ), }, ]; const data = [ @@ -39,65 +33,131 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope }, ]; - return ( - - 支付USDT-TRC20 - - 流水號: - in000000000000001 - - - } - open={open} - destroyOnClose - width={480} - footer={ - - - - 沒有加密貨幣錢包嗎? - 選擇下列平台 開始支付 - ( - - } - title={item.title} - description={item.description} - /> - - )} - /> - - } - > -
    - - - 收款地址 - - {Trc20Address} - - - - 59:43 - - - USDT-TRC20 100.00 - - - - - + const [loading, setLoading] = React.useState(false); // 加載狀態 + const [paymentCompleted, setPaymentCompleted] = React.useState(false); // 付款完成狀態 -
    + const handlePaymentCompletion = () => { + setLoading(true); + setTimeout(() => { + setLoading(false); + setPaymentCompleted(true); + }, 3000); + }; + return ( + <> + {paymentCompleted ? ( + + ) : ( + + + 支付USDT-TRC20 + + + 流水號: + in000000000000001 + + + } + open={open} + destroyOnClose + width={480} + footer={ + + + + + 沒有加密貨幣錢包嗎? + + 選擇下列平台 開始支付 + ( + + } + title={item.title} + description={item.description} + /> + + )} + /> + + } + > +
    + + + 收款地址 + + + {Trc20Address} + + + + + + 59:43 + + + + USDT-TRC20{' '} + + 100.00 + + + + + + +
    + )} + ); }; diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx new file mode 100644 index 0000000..d9d8dd3 --- /dev/null +++ b/src/pages/property/components/SafetyVerification.tsx @@ -0,0 +1,374 @@ +import { Button, Form, Input, Modal, Space, Typography } from 'antd'; +import * as React from 'react'; +import { useState } from 'react'; +import UseLoading from './UseLoading' +import TransferLoading from './TransferLoading' + +interface ISafetyVerificationProps { + open: boolean; + onCancel: () => void; + currentStep: string; + setCurrentStep: (step: string) => void; + withdrawal: string; + setWithdrawal: (step: string) => void; +} + +const SafetyVerification: React.FunctionComponent = ({ + open, + onCancel, + currentStep, + setCurrentStep, + withdrawal, +}) => { + const { Title, Text } = Typography; + const [disabled, setDisabled] = useState(false); + const [countdown, setCountdown] = useState('3:00'); + const [verificationCode, setVerificationCode] = useState(''); + + const handleClick = () => { + setDisabled(true); + + let secondsLeft = 180; + const timer = setInterval(() => { + const minutes = Math.floor(secondsLeft / 60); + const seconds = secondsLeft % 60; + setCountdown(`${minutes}:${seconds < 10 ? '0' : ''}${seconds}`); + + if (secondsLeft === 0) { + clearInterval(timer); + setDisabled(false); + setCountdown('3:00'); + } else { + secondsLeft--; + } + }, 1000); + }; + + const sendVerificationCode = (email: string) => { + // 假設有一個函數來發送驗證碼到用戶的郵箱 + console.log(`Sending verification code to ${email}`); + }; + + const handleVerificationSubmit = () => { + // 在這裡添加提交驗證碼的邏輯 + console.log(withdrawal); + if (withdrawal === 'transfer') { + setCurrentStep('getTransfer'); + return currentStep; + } + setCurrentStep(withdrawal); + console.log(456, currentStep); + }; + + return ( +
    + {currentStep === 'login' && ( + + + 安全驗證 + + 為保證資金安全,請輸入寶泰會員的登入資訊 +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + + + + + +
    + + +
    + +
    + + )} + {currentStep === 'verify' && ( + + + 驗證電子信箱 + + 已發送驗證碼至您的電子信箱 + + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + setVerificationCode(e.target.value)} + /> + + {verificationCode ? ( + + + + ) : ( + + + + )} + +
    +
    + )} + {currentStep === withdrawal && ( + + + 確認出金 + + + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + 出金帳戶: + gmail +
    +
    + 帳戶可用現金: + gmail +
    +
    + 出金金額: + gmail +
    +
    + 手續費: + gmail +
    +
    + 提取為: + gmail +
    +
    + 出金匯率: + gmail +
    +
    + 提取至
    +
    +
    + {withdrawal} +
    +
    + 錢包地址: + gmail +
    +
    + 銀行戶名: + gmail +
    +
    + 銀行帳號: + gmail +
    +
    + 銀行名稱: + gmail +
    +
    + 開戶行: + gmail +
    +
    + + +
    +
    +
    + )} + {currentStep === 'getTransfer' && ( + + + 確認轉帳 + + + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + 從: + gmail +
    +
    + 轉帳金額: + gmail +
    +
    + 手續費: + gmail +
    +
    + 轉至: + gmail +
    +
    + + +
    +
    +
    + )} + {currentStep === 'UseLoading' && ( + + )} + {currentStep === 'TransferLoading' && ( + + )} + + ); +}; + +export default SafetyVerification; diff --git a/src/pages/property/components/TransferLoading.tsx b/src/pages/property/components/TransferLoading.tsx new file mode 100644 index 0000000..2d3c89d --- /dev/null +++ b/src/pages/property/components/TransferLoading.tsx @@ -0,0 +1,93 @@ +import React, { useState } from 'react'; +import { Modal, Typography, Spin, Space, message, Form, Button } from 'antd'; +import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; +import copy from 'copy-to-clipboard'; + +const TransferLoading = () => { + const [open, setOpen] = useState(true); + + const onCancel = () => { + setOpen(false); + }; + + const copyToClipboard = (text: any) => { + copy(text); + message.success('已成功複製流水號'); + }; + + return ( + + + 轉帳處理中 + +
    + 流水號: + copyToClipboard('1233242')} // 替換成實際的流水號 + > + 1233242 + + +
    + + } + open={open} + destroyOnClose + width={480} + footer={null} + > +
    + + } + /> +
    + +
    + 從: + 2131421412412 +
    +
    + 轉帳金額: + $131321 +
    +
    +
    +
    +
    + 轉至: + gmail +
    +
    + + +
    +
    + ); +}; + +export default TransferLoading; diff --git a/src/pages/property/components/USDTLoading.tsx b/src/pages/property/components/USDTLoading.tsx new file mode 100644 index 0000000..394dc72 --- /dev/null +++ b/src/pages/property/components/USDTLoading.tsx @@ -0,0 +1,115 @@ +import React, { useState } from 'react'; +import { Modal, Typography, Spin, Space, message, Form, Button } from 'antd'; +import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; +import copy from 'copy-to-clipboard'; + +const USDTLoading = () => { + const [open, setOpen] = useState(true); + + const onCancel = () => { + setOpen(false); + }; + + const copyToClipboard = (text:any) => { + copy(text); + message.success('已成功複製流水號'); + }; + + return ( + + + 支付USDT-TRC20 + +
    + 流水號: + copyToClipboard('1233242')} // 替換成實際的流水號 + > + 1233242 + + +
    + + } + open={open} + destroyOnClose + width={480} + footer={null} + > +
    + + } + /> + 系統審核中,請稍後 +
    + +
    + 支付USDT-TRC20 + copyToClipboard('2131421412412')} + > + 2131421412412 + + +
    +
    + 收款地址 + + + copyToClipboard('1234')} + > + 1234 + + copyToClipboard('1234')} + > + 1234 + + + copyToClipboard('1234')} + /> + +
    +
    + + +
    +
    + ); +}; + +export default USDTLoading; diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx new file mode 100644 index 0000000..971f4c9 --- /dev/null +++ b/src/pages/property/components/UseLoading.tsx @@ -0,0 +1,108 @@ +import { useState } from 'react'; +import { Modal, Typography, Spin, Space, message, Form, Button } from 'antd'; +import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; +import copy from 'copy-to-clipboard'; + +const useLogin = () => { + const [open, setOpen] = useState(true); + + const onCancel = () => { + setOpen(false); + }; + + const copyToClipboard = (text: any) => { + copy(text); + message.success('已成功複製流水號'); + }; + + return ( + + + 出金申請成功 + +
    + 流水號: + copyToClipboard('1233242')} // 替換成實際的流水號 + > + 1233242 + + +
    + + } + open={open} + destroyOnClose + width={480} + footer={null} + > +
    + + } + /> + 預計到帳時間 + 30分鐘 +
    + +
    + 提取為: + gmail +
    +
    + 提取至
    +
    +
    + 錢包地址: + gmail +
    +
    + 銀行戶名: + gmail +
    +
    + 銀行帳號: + gmail +
    +
    + 銀行名稱: + gmail +
    +
    + 開戶行: + gmail +
    +
    +
    +
    + + +
    + ); +}; + +export default useLogin; From ebc01b0df4c4bd5190064be8c7f8cf30473789e8 Mon Sep 17 00:00:00 2001 From: json Date: Fri, 24 May 2024 18:03:18 +0800 Subject: [PATCH 006/118] modal --- src/components/AddAccount.tsx | 2 +- .../InvestmentMarket/InvestmentMarket.tsx | 10 +- src/components/TradingPlatform.tsx | 144 +++++++++++++++ src/pages/AppRouter.tsx | 8 +- src/pages/HotInvestMents/HotInvestMents.tsx | 113 +++++++++--- src/pages/HotInvestMents/MyFocus.tsx | 171 ++++++++++++------ src/pages/K100U/K100U.tsx | 150 +++++++++++++++ src/pages/PublicLayout/PublicLayout.tsx | 10 +- src/pages/account/index.tsx | 115 +++++++----- src/pages/currencydetails/CurrencyDetails.tsx | 126 +++++++++++++ .../history/accountHistory/ClosePosition.tsx | 1 - src/pages/property/InProgress.tsx | 163 ++++++++++------- 12 files changed, 814 insertions(+), 199 deletions(-) create mode 100644 src/components/TradingPlatform.tsx create mode 100644 src/pages/K100U/K100U.tsx create mode 100644 src/pages/currencydetails/CurrencyDetails.tsx diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx index e4fcbfb..3b7ced6 100644 --- a/src/components/AddAccount.tsx +++ b/src/components/AddAccount.tsx @@ -36,7 +36,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib 新增帳戶} visible={visible} - onCancel={onClose} // 確保在點擊 Modal 外部或點擊 X 按鈕時會調用 onClose 函數 + onCancel={onClose} footer={null} >
    { setActiveTab(key); }; + return ( - - 投資市場 + + + 投資市場 + <Input.Search placeholder="input search text" allowClear style={{ width: 200 }} /> + { + const menu = ( + + +
    +
    +
    + MetaTrader 4 +
    +
    MetaTrader 4
    +
    +
    立即下載
    + + WIN + + + MAC + + + Android + + + iOS + +
    +
    +
    +
    + MetaTrader 4 +
    +
    MetaTrader 4
    +
    +
    立即下載
    + + WIN + + + MAC + + + Android + + + iOS + +
    +
    +
    +
    + + +
    +
    其他平台
    +
    + Platform 3 +
    +
    Title 2
    +
    description 3
    +
    +
    +
    + Platform 3 +
    +
    Title 2
    +
    description 3
    +
    +
    +
    + Platform 3 +
    +
    Title 2
    +
    description 3
    +
    +
    +
    + + + + ); + + return ( + +
    + 交易平台 +
    +
    + ); +}; + +export default App; diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 39829cc..18b70df 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -10,14 +10,17 @@ const User = lazy(() => import('../pages/user/index')); const History = lazy(() => import('../pages/history/index')); const LoginPage = lazy(() => import('./login/LoginPage')); const RegisterPage = lazy(() => import('./login/RegisterPage')); -const HotInvestMents = lazy(() => import('../pages/HotInvestMents/HotInvestMents')); +const InvestmentMarket = lazy(() => import('../components/InvestmentMarket/InvestmentMarket')); const MyFocus = lazy(() => import('../pages/HotInvestMents/MyFocus')); +const CurrencyDetails = lazy(() => import('../pages/currencydetails/CurrencyDetails')); +const K100U = lazy(() => import('../pages/K100U/K100U')); const AppRouter: React.FunctionComponent = () => { return ( Loading...}> + } /> } /> }> } /> @@ -25,8 +28,9 @@ const AppRouter: React.FunctionComponent = () => { } /> } /> } /> - } /> + } /> } /> + } /> }> } /> diff --git a/src/pages/HotInvestMents/HotInvestMents.tsx b/src/pages/HotInvestMents/HotInvestMents.tsx index f807b1c..3f3f5ae 100644 --- a/src/pages/HotInvestMents/HotInvestMents.tsx +++ b/src/pages/HotInvestMents/HotInvestMents.tsx @@ -1,6 +1,7 @@ import React, { useState } from 'react'; -import { Button, Card, Col, List, Row, Typography } from 'antd'; +import { Button, Card, Col, List, Row, Typography, Table, Progress, Slider, Rate } from 'antd'; import GoToTrade from '../../components/GoToTrade'; +import { Link } from 'react-router-dom'; const { Title, Text } = Typography; @@ -10,6 +11,10 @@ const HotInvestments = () => { const showModal = () => { setIsModalVisible(true); }; + const [focus, setFocus] = useState(false); + const handleFocusChange = (value: number) => { + setFocus(value > 0); + }; const handleOk = () => { setIsModalVisible(false); @@ -19,41 +24,108 @@ const HotInvestments = () => { setIsModalVisible(false); }; - const data = [ + const columns = [ { title: '市場', - content: '1' + dataIndex: 'market', + key: 'market', }, { title: '漲跌幅', + dataIndex: 'quoteChange', + key: 'quoteChange', }, { title: '1天', - content: '1' + dataIndex: 'oneDay', + key: 'oneDay', }, { title: '賣出', - content: '1' + dataIndex: 'sell', + key: 'sell', }, { title: '買入', - content: '1' + dataIndex: 'buy', + key: 'buy', }, { title: '52周區間', - content: '1' + dataIndex: 'weeks52', + key: 'weeks52', + width: '200px', }, { title: '情緒', - content: '1' + dataIndex: 'mood', + key: 'mood', + width: '200px', }, { title: '交易', - content: + dataIndex: 'trade', + key: 'trade', + width: '150px', }, { title: '關注', - content: '1' + dataIndex: 'focus', + key: 'focus', + render: () => ( + ★} + style={{ + fontSize: 24, + color: focus ? '#F39D1B' : '#d9d9d9', + }} + /> + ), + }, + ]; + + const data = [ + { + key: '1', + market: 123, + quoteChange: '456', + oneDay: '123', + sell: '123', + buy: '123', + weeks52: ( + + + 0 + + + + + + 5 + + + ), + mood: ( +
    + '買入 63%'} + /> +
    + ), + trade: ( + + ), + focus: focus ? 1 : 0, }, ]; @@ -208,20 +280,7 @@ const HotInvestments = () => {
    - ( - - - {item.content ? item.content : '錯誤'} - - - )} - /> +
    @@ -238,11 +297,7 @@ const HotInvestments = () => {
    - + ); }; diff --git a/src/pages/HotInvestMents/MyFocus.tsx b/src/pages/HotInvestMents/MyFocus.tsx index c1bf7dc..5f37451 100644 --- a/src/pages/HotInvestMents/MyFocus.tsx +++ b/src/pages/HotInvestMents/MyFocus.tsx @@ -1,92 +1,161 @@ -import { ProCard } from '@ant-design/pro-components'; -import { Button, Card, Progress, Table, Tabs } from 'antd'; -import { key } from 'localforage'; -import React from 'react'; +import { Button, Card, Progress, Table, Tabs, Slider, Row, Col, Typography, Rate } from 'antd'; +import React, { useState } from 'react'; +import GoToTrade from '../../components/GoToTrade'; // 确保导入路径正确 +import { Link } from 'react-router-dom'; interface TabContentProps { content: string; } + const HotInvestments = () => { const TabContent: React.FC = ({}) => { - const data = [ + const [focus, setFocus] = useState(false); + const [isModalVisible, setIsModalVisible] = useState(false); + + const handleFocusChange = (value: number) => { + setFocus(value > 0); + }; + + const showModal = () => { + setIsModalVisible(true); + }; + + const handleOk = () => { + setIsModalVisible(false); + }; + + const handleCancel = () => { + setIsModalVisible(false); + }; + + const columns = [ { - title:'市場', - dataIndex:'market', - key:'market', - render: () => <>買入, + title: '市場', + dataIndex: 'market', + key: 'market', }, { title: '漲跌幅', - dataIndex:'quoteChange', - key:'quoteChange', - render: () => <>買入, + dataIndex: 'quoteChange', + key: 'quoteChange', }, { title: '1天', - dataIndex:'OneDay', - key:'OneDay', - render: () => <>123, + dataIndex: 'OneDay', + key: 'OneDay', }, { title: '賣出', - dataIndex:'sell', - key:'sell', - render: () => <>123, + dataIndex: 'sell', + key: 'sell', }, { title: '買入', - dataIndex:'buy', - key:'buy', - render: () => <>123, + dataIndex: 'buy', + key: 'buy', }, { title: '52周區間', - dataIndex:'52week', - key:'52week', - render: () => 123, + dataIndex: 'weeks52', + key: 'Weeks52', + width: '200px', }, { title: '情緒', - dataIndex:'mood', - key:'mood', - render: () => ( - '買入 63%'} - /> - ), + dataIndex: 'mood', + key: 'mood', + width: '200px', }, { title: '交易', - dataIndex:'trade', - key:'trade', - render: () => , + dataIndex: 'trade', + key: 'trade', + width: '150px', }, { title: '關注', - dataIndex:'focus', - key:'focus', - render: () => <>買入, + dataIndex: 'focus', + key: 'focus', + render: () => ( + ★} + style={{ + fontSize: 24, + color: focus ? '#F39D1B' : '#d9d9d9', + }} + /> + ), }, ]; + const contentData = [ { - market:'123', + market: 123, + quoteChange: '456', + OneDay: '123', + sell: '123', + buy: '123', + weeks52: ( + + + 0 + + + + + + 5 + + + ), + mood: ( +
    + '買入 63%'} + /> +
    + ), + trade: ( + + ), + focus: focus ? 1 : 0, }, - {render: () => <>123,} - ] + ]; return ( -
    +
    +
    + + ); }; diff --git a/src/pages/K100U/K100U.tsx b/src/pages/K100U/K100U.tsx new file mode 100644 index 0000000..752e7ba --- /dev/null +++ b/src/pages/K100U/K100U.tsx @@ -0,0 +1,150 @@ +import React, { useState } from 'react'; +import { Layout, Menu, Button, Input, Row, Col, Typography, Space, Card, Select, Modal } from 'antd'; +import { LeftOutlined, StarOutlined } from '@ant-design/icons'; +import { Link } from 'react-router-dom'; +import GoToTrade from '../../components/GoToTrade'; + +const { Option } = Select; + +const App = () => { + const [modalVisible, setModalVisible] = useState(false); + + const handleConfirm = () => { + Modal.success({ + content: '資料已送出!', + }); + setModalVisible(false); + }; + + return ( +
    +
    +
    +
      + K100U 交易須知 +
      +
    • + + 為保證交易雙方帳戶安全,轉帳時請勿備註敏感字眼。 + +
    • +
    • + + 本平台目前只提供USDT交易,其他數字貨幣交易將不予接受。 + +
    • +
    • + + 本平台資金地址充值或轉出,均由USDT區塊鏈系統網路確認。 + +
    • +
    • + + 本平台錢包地址可以重新充值或轉出;如因系統更新,我們會通過網站或口訊告知。 + +
    • +
    • + + 請不要向錢袋地址充值任何非USDT資產,否則資產將不可尋回。 + +
    • +
    • + + 最低充值金:1000USDT,小於最低充值將不會上帳號且無法退出。 + +
    • +
    • + + 請務必確認電腦及瀏覽器安全,防止訊息被欺騙或洩漏。 + +
    • +
    • + + 如有其他問題或要求提出爭辯,可透過網頁上的客服對話框聯繫我們。 + +
    • +
      +
    +
    +
    + 訂單資訊 +
    +
    + 我要購買 +
    +
    + 100 + USDT +
    +
    +
    +
    + 我要支付 +
    +
    + 100 + CYN +
    +
    + 選擇付款帳戶 + +
    + + 請使用通過實名驗證的銀行住戶進行轉帳,帳戶不符時將不受理原路退回款項 + +
    + +
    +
    + setModalVisible(false)} + styles={{ + content:{ + backgroundColor: 'blue' + } + }} + > +

    確認要送出嗎?

    +
    +
    + ); +}; + +export default App; diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index cd727d9..1db7470 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -10,12 +10,16 @@ import AD_USDTpay from '../../assets/AD_USDTpay.png'; import { Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space } from 'antd'; import { ApartmentOutlined, BellFilled, DollarOutlined, DownOutlined, FileSearchOutlined, GlobalOutlined, LogoutOutlined, NotificationOutlined, PlusOutlined, ProductFilled, SlidersOutlined, TeamOutlined, UserOutlined } from '@ant-design/icons'; import AccountChart from '@/components/AccountChart'; +import AddAccount from '../../components/AddAccount'; +import { useState } from 'react'; +import TradingPlatform from '../../components/TradingPlatform'; interface IPublicLayoutProps { } const PublicLayout: React.FunctionComponent = (props) => { const {} = props || {}; + const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); const route = { routes: [ { @@ -31,7 +35,7 @@ const PublicLayout: React.FunctionComponent = (props) => { icon: , children: [ { path: 'account', name: 我的帳戶 }, - { path: '/新增帳戶', name: '新增帳戶' }, + { path: '/新增帳戶', name:
    setIsAddAccountVisible(true)}>新增帳戶
    }, ] }, { @@ -114,6 +118,9 @@ const PublicLayout: React.FunctionComponent = (props) => { } + headerContentRender={() => + + } // 右上 avatarProps={{ render: () => { @@ -214,6 +221,7 @@ const PublicLayout: React.FunctionComponent = (props) => { + setIsAddAccountVisible(false)} /> ); }; diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index b0065c5..06144ac 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -1,15 +1,16 @@ -import { List, Avatar, Button, Collapse, CollapseProps, Space, theme } from 'antd'; +import { List, Avatar, Button, Collapse, CollapseProps, Space, theme, Dropdown, Menu } from 'antd'; import * as React from 'react'; -import logo from '../../assets/PTFintech_logo.png' +import logo from '../../assets/PTFintech_logo.png'; import AccountMenu from './components/AccountMenu'; +import AddAccount from '../../components/AddAccount'; import mt4 from '../../assets/mt4.png'; import mt5 from '../../assets/mt5.png'; -interface IAccountProps { -} +interface IAccountProps {} const Account: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; + const [isAddAccountVisible, setIsAddAccountVisible] = React.useState(false); const PTAccount = [ { account: 'email@qq.com', @@ -17,33 +18,53 @@ const Account: React.FunctionComponent = (props) => { icon: logo, balance: '$ 0.00', currency: '$', - isReal: '' + isReal: '', }, - ] + ]; + const platformMenu = ( + + + window + mac + + + iphone + ios + + + ); const MT4Account = [ { account: '3000000015', accountType: 'MT4', balance: '$ 0.00', currency: '$', - isReal: '真實' + isReal: '真實', }, { account: '3000000016', accountType: 'MT4', balance: '$ 0.00', currency: '$', - isReal: '模擬' + isReal: '模擬', }, - ] + ]; const genExtra = () => ( - { - event.stopPropagation(); - }}> - - + { + event.stopPropagation(); + }} + > + + + + - ); const { token } = theme.useToken(); const panelStyle: React.CSSProperties = { @@ -55,40 +76,49 @@ const Account: React.FunctionComponent = (props) => { const items: CollapseProps['items'] = [ { key: 'MT4 帳戶', - label: + label: ( - + MT4 帳戶(2) - , - children: + + ), + children: ( ( - - ]} - > + ]}> {item.accountType} {item.isReal}帳戶} + description={ +
    + {item.accountType} {item.isReal}帳戶 +
    + } /> -
    - 結餘 {item.balance} -
    +
    結餘 {item.balance}
    )} - />, + /> + ), extra: genExtra(), style: panelStyle, }, { key: 'MT5 帳戶', - label: + label: ( - + MT5 帳戶(0) - , + + ), children:
    , extra: genExtra(), style: panelStyle, @@ -100,19 +130,19 @@ const Account: React.FunctionComponent = (props) => { ( - - ]} - > + ]}> } + avatar={ + + } title={item.account} description={item.accountType} /> -
    - 結餘 {item.balance} -
    +
    結餘 {item.balance}
    )} /> @@ -121,6 +151,7 @@ const Account: React.FunctionComponent = (props) => { bordered={false} size='large' /> + setIsAddAccountVisible(false)} /> ); }; diff --git a/src/pages/currencydetails/CurrencyDetails.tsx b/src/pages/currencydetails/CurrencyDetails.tsx new file mode 100644 index 0000000..020f58a --- /dev/null +++ b/src/pages/currencydetails/CurrencyDetails.tsx @@ -0,0 +1,126 @@ +import React, { useState } from 'react'; +import { Layout, Menu, Button, Input, Row, Col, Typography, Space, Card } from 'antd'; +import { LeftOutlined, StarOutlined } from '@ant-design/icons'; +import { Link } from 'react-router-dom'; +import GoToTrade from '../../components/GoToTrade'; + +const { Header, Content } = Layout; +const { Title, Paragraph } = Typography; + +const data = { + labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], +}; + +const App = () => { + const [isStarred, setIsStarred] = useState(false); + const [isModalVisible, setIsModalVisible] = useState(false); + + const handleStarClick = () => { + setIsStarred(!isStarred); + }; + + const handleOk = () => { + setIsModalVisible(false); + }; + + const handleCancel = () => { + setIsModalVisible(false); + }; + + const showModal = () => { + setIsModalVisible(true); + }; + + return ( + + +
    + +
    {/* Your navigation button here */} + + + + + + + + + +
    + AUDJPY +
    + + AUDJPY + <span style={{ fontSize: '14px', marginLeft: '16px', color:'grey' }}> + 2189.05 <span style={{ fontSize: '12px', color: 'grey' }}>0.15%</span> + </span> + + + AUDJPY + <span style={{ fontSize: '14px', marginLeft: '16px', color: '#52c41a' }}> + 2189.05 <span style={{ fontSize: '12px', color: '#52c41a' }}>0.15%</span> + </span> + +
    + + +
    +
    + + 该货币对在世界各地的多个交易所进行交易。这意味着投资者在不同的交易时间有许多不同的交易机会交易AUDJPY。根据您居住的地方,您可能在白天或晚上 + 的任何时候都可以交易AUDJPY。对于那些想利用这些机会的人来说,知道AUDJPY的交易时间开始和结束是很重要的。 + +
    + {/* Chart can be placed here */} +
    +
    +
    + + + + + + + ); +}; + +export default App; diff --git a/src/pages/history/accountHistory/ClosePosition.tsx b/src/pages/history/accountHistory/ClosePosition.tsx index 14fbe8e..111ea37 100644 --- a/src/pages/history/accountHistory/ClosePosition.tsx +++ b/src/pages/history/accountHistory/ClosePosition.tsx @@ -74,7 +74,6 @@ const TabContent: React.FC = ({ content }) => { {item.ProfitAndLoss} - {/* 其他 Card 內容 */} )} /> diff --git a/src/pages/property/InProgress.tsx b/src/pages/property/InProgress.tsx index 830662b..50990e6 100644 --- a/src/pages/property/InProgress.tsx +++ b/src/pages/property/InProgress.tsx @@ -1,11 +1,16 @@ -import { Flex, List, Space, Tag } from 'antd'; +import { useState } from 'react'; +import { List, Space, Tag, Switch, Divider, Input } from 'antd'; import * as React from 'react'; -interface IInProgressProps { -} +interface IInProgressProps {} const InProgress: React.FunctionComponent = (props) => { - const { } = props || {}; + const [filterType, setFilterType] = useState('all'); // 狀態用於過濾列表 + + const handleFilterChange = (type: string) => { + setFilterType(type); + }; + const data = [ { type: 1, @@ -37,73 +42,93 @@ const InProgress: React.FunctionComponent = (props) => { to: '寶泰帳戶-email@qq.com', }, ]; + return ( - ( - - - - +
    + + handleFilterChange('all')} + > + 全部 + + handleFilterChange('in')} + > + 入金 + + handleFilterChange('out')} + > + 出金 + + handleFilterChange('transfer')} + > + 轉帳 + + + +
    + + { + if (filterType === 'all') return true; + if (filterType === 'in' && item.type === 1) return true; + if (filterType === 'out' && item.type === 2) return true; + if (filterType === 'transfer' && item.type === 3) return true; + return false; + })} + renderItem={(item) => ( + + + + + {(item.type === 1 && '購買') || (item.type === 2 && '出售') || (item.type === 3 && '轉帳')} + + {item.remainTime &&
    支付時間:{item.remainTime}
    } +
    + - { - item.type === 1 && '購買' - || - item.type === 2 && '出售' - || - item.type === 3 && '轉帳' - } -
    - {item.remainTime && -
    支付時間:{item.remainTime}
    - } -
    - -
    {item.currency}
    -
    {item.amount}
    -
    - } - description={ -
    - {item.account && -
    帳戶:{item.account}
    - } - {item.from && -
    從:{item.from}
    - } - {item.to && -
    轉至:{item.to}
    - } -
    流水號:{item.serialNum}
    -
    建立時間:{item.creatDate}
    -
    - } - /> -
    - )} - /> +
    {item.currency}
    +
    {item.amount}
    + + + } + description={ +
    + {item.account &&
    帳戶:{item.account}
    } + {item.from &&
    從:{item.from}
    } + {item.to &&
    轉至:{item.to}
    } +
    流水號:{item.serialNum}
    +
    建立時間:{item.creatDate}
    +
    + } + /> + + )} + /> + ); }; From f88d50e38a6eb9d4b65f8511b84f935460f52b22 Mon Sep 17 00:00:00 2001 From: benPeng Date: Mon, 27 May 2024 13:31:58 +0800 Subject: [PATCH 007/118] theme global store --- src/main.tsx | 9 ++++++--- src/store/index.ts | 1 + src/store/useThemeStore.ts | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 src/store/useThemeStore.ts diff --git a/src/main.tsx b/src/main.tsx index 1ecd430..b60d4c3 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -8,9 +8,12 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import AppRouter from './pages/AppRouter'; import FallbackLoading from './components/FallbackLoading'; import NotifyProvider from './components/NotifyProvider'; +import { useThemeStore } from './store'; const App: React.FunctionComponent = () => { const queryClient = new QueryClient(); + const { isDark } = useThemeStore(); + const algorithm = isDark ? theme.darkAlgorithm : theme.defaultAlgorithm; return ( @@ -19,7 +22,7 @@ const App: React.FunctionComponent = () => { }> { }, }, token: { colorPrimary: '#F39D1B' }, - + }} > - + diff --git a/src/store/index.ts b/src/store/index.ts index adff81b..209ffc9 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -1 +1,2 @@ +export * from './useThemeStore'; export * from './useNotifyStore'; \ No newline at end of file diff --git a/src/store/useThemeStore.ts b/src/store/useThemeStore.ts new file mode 100644 index 0000000..815b75b --- /dev/null +++ b/src/store/useThemeStore.ts @@ -0,0 +1,32 @@ +import { create } from 'zustand'; + +type ThemeStoreInit = { + isDark: boolean; +}; + +interface ThemeStoreOptions extends ThemeStoreInit { + setIsDark: (isDark?: boolean) => void; +} + +const init: ThemeStoreInit = { + isDark: true, +}; + +const useThemeStore = create((set) => { + return { + ...init, + setIsDark: (isDark) => { + if (isDark === undefined) { + set((origin) => { + const pureState = { ...origin }; + pureState.isDark = !origin.isDark; + return pureState; + }); + } else { + set({ isDark }); + } + }, + }; +}); + +export { useThemeStore }; From dad917ae97b8ccad4a4d683dc32c67d020d2f536 Mon Sep 17 00:00:00 2001 From: Kirito Date: Mon, 27 May 2024 13:40:05 +0800 Subject: [PATCH 008/118] switch base --- .eslintrc.cjs | 2 +- src/pages/PublicLayout/PublicLayout.tsx | 121 ++++++++++++++++-------- 2 files changed, 82 insertions(+), 41 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 6d61808..63eb98f 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -21,7 +21,7 @@ module.exports = { 'react/function-component-definition': [ 2, { - namedComponents: ['function-expression' | 'arrow-function'], + namedComponents: ['function-expression', 'arrow-function'], unnamedComponents: ['function-expression'], }, ], diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 1db7470..8943d98 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -1,32 +1,43 @@ import { Link, Outlet } from 'react-router-dom'; -import { - ProLayout, - PageContainer, -} from '@ant-design/pro-components'; -import UserChat from './UserChat' +import { ProLayout, PageContainer } from '@ant-design/pro-components'; +import UserChat from './UserChat'; import PT_logo from '../../assets/PTFintech_logo.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; import AD_USDTpay from '../../assets/AD_USDTpay.png'; -import { Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space } from 'antd'; -import { ApartmentOutlined, BellFilled, DollarOutlined, DownOutlined, FileSearchOutlined, GlobalOutlined, LogoutOutlined, NotificationOutlined, PlusOutlined, ProductFilled, SlidersOutlined, TeamOutlined, UserOutlined } from '@ant-design/icons'; +import { Switch, Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space } from 'antd'; +import { + ApartmentOutlined, + BellFilled, + DollarOutlined, + DownOutlined, + FileSearchOutlined, + GlobalOutlined, + LogoutOutlined, + NotificationOutlined, + PlusOutlined, + ProductFilled, + SlidersOutlined, + TeamOutlined, + UserOutlined, +} from '@ant-design/icons'; import AccountChart from '@/components/AccountChart'; import AddAccount from '../../components/AddAccount'; import { useState } from 'react'; import TradingPlatform from '../../components/TradingPlatform'; -interface IPublicLayoutProps { } - +interface IPublicLayoutProps {} const PublicLayout: React.FunctionComponent = (props) => { const {} = props || {}; const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); + const [darkMode, setDarkMode] = useState(false); const route = { routes: [ { key: '總覽', path: '/', name: 總覽, - icon: + icon: , }, // { path: '/public', name: 帳戶管理 }, { @@ -35,8 +46,8 @@ const PublicLayout: React.FunctionComponent = (props) => { icon: , children: [ { path: 'account', name: 我的帳戶 }, - { path: '/新增帳戶', name:
    setIsAddAccountVisible(true)}>新增帳戶
    }, - ] + { path: '/新增帳戶', name:
    setIsAddAccountVisible(true)}>新增帳戶
    }, + ], }, { key: '資產管理', @@ -46,7 +57,7 @@ const PublicLayout: React.FunctionComponent = (props) => { { path: '/入金', name: 入金 }, { path: '/出金', name: 出金 }, { path: '/轉帳', name: 轉帳 }, - ] + ], }, { key: '報表查詢', @@ -55,7 +66,7 @@ const PublicLayout: React.FunctionComponent = (props) => { children: [ { path: '/帳戶報表', name: 帳戶報表 }, { path: '/資產報表', name: 資產報表 }, - ] + ], }, { key: '客戶服務', @@ -66,12 +77,12 @@ const PublicLayout: React.FunctionComponent = (props) => { { path: '/我的關注', name: 我的關注 }, { path: '/', name: '新聞' }, { path: '/', name: '工具' }, - ] + ], }, - { key: '優惠活動', path: '/', name: '優惠活動', icon: , }, - { key: '交易社區', path: '/', name: '交易社區', icon: , }, + { key: '優惠活動', path: '/', name: '優惠活動', icon: }, + { key: '交易社區', path: '/', name: '交易社區', icon: }, ], - }; + }; const data = [ { title: 'Title 1', @@ -91,13 +102,11 @@ const PublicLayout: React.FunctionComponent = (props) => { dataSource={data} renderItem={(items) => ( - {items.title}} - /> + {items.title}} /> )} /> - ) + ); return ( <> = (props) => { colorBgMenuItemSelected: 'rgba(0,0,0,0.04)', }, }} - headerTitleRender={() => + headerTitleRender={() => ( - + - } - + )} logo={ - + } - headerContentRender={() => - - } + headerContentRender={() => } // 右上 avatarProps={{ render: () => { @@ -156,7 +168,12 @@ const PublicLayout: React.FunctionComponent = (props) => {
    總價值
    $ 0.00
    -
    + - +
    @@ -221,7 +259,10 @@ const PublicLayout: React.FunctionComponent = (props) => { - setIsAddAccountVisible(false)} /> + setIsAddAccountVisible(false)} + /> ); }; From c656721d159322e98eb1409efd9464f800080610 Mon Sep 17 00:00:00 2001 From: benPeng Date: Mon, 27 May 2024 13:42:58 +0800 Subject: [PATCH 009/118] dark switch --- src/pages/PublicLayout/PublicLayout.tsx | 44 +++++++++++++------------ 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 8943d98..914ef17 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -1,9 +1,5 @@ import { Link, Outlet } from 'react-router-dom'; import { ProLayout, PageContainer } from '@ant-design/pro-components'; -import UserChat from './UserChat'; -import PT_logo from '../../assets/PTFintech_logo.png'; -import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; -import AD_USDTpay from '../../assets/AD_USDTpay.png'; import { Switch, Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space } from 'antd'; import { ApartmentOutlined, @@ -21,8 +17,13 @@ import { UserOutlined, } from '@ant-design/icons'; import AccountChart from '@/components/AccountChart'; -import AddAccount from '../../components/AddAccount'; import { useState } from 'react'; +import { useThemeStore } from '@/store'; +import UserChat from './UserChat'; +import PT_logo from '../../assets/PTFintech_logo.png'; +import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; +import AD_USDTpay from '../../assets/AD_USDTpay.png'; +import AddAccount from '../../components/AddAccount'; import TradingPlatform from '../../components/TradingPlatform'; interface IPublicLayoutProps {} @@ -30,13 +31,14 @@ interface IPublicLayoutProps {} const PublicLayout: React.FunctionComponent = (props) => { const {} = props || {}; const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); - const [darkMode, setDarkMode] = useState(false); + const { isDark, setIsDark } = useThemeStore(); + const route = { routes: [ { key: '總覽', path: '/', - name: 總覽, + name: 總覽, icon: , }, // { path: '/public', name: 帳戶管理 }, @@ -45,7 +47,7 @@ const PublicLayout: React.FunctionComponent = (props) => { name: '帳戶管理', icon: , children: [ - { path: 'account', name: 我的帳戶 }, + { path: 'account', name: 我的帳戶 }, { path: '/新增帳戶', name:
    setIsAddAccountVisible(true)}>新增帳戶
    }, ], }, @@ -54,9 +56,9 @@ const PublicLayout: React.FunctionComponent = (props) => { name: '資產管理', icon: , children: [ - { path: '/入金', name: 入金 }, - { path: '/出金', name: 出金 }, - { path: '/轉帳', name: 轉帳 }, + { path: '/入金', name: 入金 }, + { path: '/出金', name: 出金 }, + { path: '/轉帳', name: 轉帳 }, ], }, { @@ -64,8 +66,8 @@ const PublicLayout: React.FunctionComponent = (props) => { name: '報表查詢', icon: , children: [ - { path: '/帳戶報表', name: 帳戶報表 }, - { path: '/資產報表', name: 資產報表 }, + { path: '/帳戶報表', name: 帳戶報表 }, + { path: '/資產報表', name: 資產報表 }, ], }, { @@ -73,8 +75,8 @@ const PublicLayout: React.FunctionComponent = (props) => { name: '客戶服務', icon: , children: [ - { path: '/投資市場', name: 投資市場 }, - { path: '/我的關注', name: 我的關注 }, + { path: '/投資市場', name: 投資市場 }, + { path: '/我的關注', name: 我的關注 }, { path: '/', name: '新聞' }, { path: '/', name: '工具' }, ], @@ -132,7 +134,7 @@ const PublicLayout: React.FunctionComponent = (props) => { /> } - headerContentRender={() => } + headerContentRender={() => } // 右上 avatarProps={{ render: () => { @@ -154,7 +156,7 @@ const PublicLayout: React.FunctionComponent = (props) => { }} > - 歡迎登入!{'用戶名稱'} + 歡迎登入!用戶名稱 @@ -167,7 +169,7 @@ const PublicLayout: React.FunctionComponent = (props) => {
    總價值
    $ 0.00
    - + + + ); }; diff --git a/src/components/GoToTrade.tsx b/src/components/GoToTrade.tsx index 6ee022b..13744f4 100644 --- a/src/components/GoToTrade.tsx +++ b/src/components/GoToTrade.tsx @@ -68,11 +68,13 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC - + 前往交易
    -
    AUDJPY @@ -112,11 +114,27 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC >
    - MT4 + MT4
    -
    +
    {platform.name} - + 下載{platform.name} @@ -143,7 +161,10 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC 選擇帳戶 依上方選擇篩選 - +
    xxxxx帳戶
    @@ -152,12 +173,15 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC {showAddAccount && ( // 顯示 AddAccount 組件的條件 setShowAddAccount(false)} footer={null} // 不顯示底部按鈕 > - setShowAddAccount(false)} /> + setShowAddAccount(false)} + /> )} diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index 71294f3..e109e69 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -11,12 +11,15 @@ const YourComponent = () => { setActiveTab(key); }; - return ( - - + <Card style={{ color: 'white' }}> + <Title style={{ color: 'white', display: 'flex', justifyContent: 'space-between' }}> 投資市場 - <Input.Search placeholder="input search text" allowClear style={{ width: 200 }} /> + <Input.Search + placeholder='input search text' + allowClear + style={{ width: 200 }} + /> = (props) => { - const { } = props || {}; + const {} = props || {}; return ( = (props) => { > - + ↑ 0.04 %
    } @@ -29,7 +31,6 @@ const LoopBanner: React.FunctionComponent = (props) => { - } /> diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 7e66d0c..5d4331b 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -2,13 +2,13 @@ import { Avatar, Button, Card, Col, Row, Space, Statistic, Typography } from 'an import React, { useState } from 'react'; import { CheckOutlined, CloseOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; +import { StatisticCard } from '@ant-design/pro-components'; +import KYCModal from '@/pages/user/components/KYCModal'; import ProtectBannerImg_1 from '../assets/ProtectBanner_img_1.png'; import ProtectBannerImg_2 from '../assets/ProtectBanner_img_2.png'; import ProtectBannerImg_3 from '../assets/ProtectBanner_img_3.png'; -import KYCModal from '@/pages/user/components/KYCModal'; import DownloadMT4 from './DownloadMT4'; import InvestmentMarket from './InvestmentMarket/InvestmentMarket'; -import { StatisticCard } from '@ant-design/pro-components'; interface IProtectBannerProps {} @@ -23,53 +23,95 @@ const ProtectBanner: React.FunctionComponent = () => {
    - 歡迎登入 寶泰! + + 歡迎登入 寶泰! + 通過實名驗證,開始投資 - +
    通過 - } /> + } + /> 入金 - } /> + } + /> 出金 - } /> + } + /> 交易
    - +
    未通過 - } /> + } + /> 入金(限額 2,000.00美元) - } /> + } + /> 出金 - } /> + } + /> 交易
    -
    - Protect Banner 1 + Protect Banner 1 @@ -77,48 +119,84 @@ const ProtectBanner: React.FunctionComponent = () => { - 歡迎登入 寶泰! + + 歡迎登入 寶泰! + 驗證審核中,不妨先存入資金! - +
    通過 - } /> + } + /> 入金 - } /> + } + /> 出金 - } /> + } + /> 交易
    - +
    未通過 - } /> + } + /> 入金(限額 2,000.00美元) - } /> + } + /> 出金 - } /> + } + /> 交易
    - + @@ -126,7 +204,11 @@ const ProtectBanner: React.FunctionComponent = () => {
    - Protect Banner 2 + Protect Banner 2 @@ -134,8 +216,16 @@ const ProtectBanner: React.FunctionComponent = () => { - 歡迎登入 寶泰! - + + 歡迎登入 寶泰! + + 我的總價值} prefix='$' @@ -176,21 +266,34 @@ const ProtectBanner: React.FunctionComponent = () => { - + - + - Protect Banner 3 + Protect Banner 3 - setOpenKYCModal(false)} /> + setOpenKYCModal(false)} + /> ); diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 4652007..00fc37c 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -1,24 +1,30 @@ +import React from 'react'; import { PlusOutlined } from '@ant-design/icons'; import { Button, Divider, Select } from 'antd'; -import * as React from 'react'; -interface ISelectAccountProps { -} +// 將 Button 組件的定義移到父組件外部 +const AddAccountButton = () => ( + +); -const SelectAccount: React.FunctionComponent = (props) => { - const { } = props || {}; +interface ISelectAccountProps {} +const SelectAccount: React.FunctionComponent = () => { return (
    +
    @@ -297,7 +340,11 @@ const HotInvestments = () => {
    - + ); }; diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index e339dca..6c9bdee 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -51,16 +51,14 @@ const PublicLayout: React.FunctionComponent = () => { { path: '/新增帳戶', name: ( - -
    setIsAddAccountVisible(true)} - onKeyDown={() => {}} - role='button' - tabIndex={0} - > - 新增帳戶 -
    - +
    setIsAddAccountVisible(true)} + onKeyDown={() => {}} + role='button' + tabIndex={0} + > + 新增帳戶 +
    ), }, ], From 682004dd4ccc45952c35cdda519370bad4759fc2 Mon Sep 17 00:00:00 2001 From: Kirito Date: Wed, 29 May 2024 09:09:13 +0800 Subject: [PATCH 012/118] tailwind+rwd+eslist --- package.json | 3 + postcss.config.js | 6 + src/components/ProtectBanner.tsx | 11 +- src/index.css | 4 + src/pages/AppRouter.tsx | 14 +- src/pages/AuthLayout/components/UseFooter.tsx | 199 +++---- src/pages/Home.tsx | 13 +- src/pages/HotInvestMents/HotInvestMents.tsx | 128 +++-- src/pages/PublicLayout/PublicLayout.tsx | 74 +-- src/pages/PublicLayout/UserChat.tsx | 126 ++--- tailwind.config.js | 12 + yarn.lock | 496 +++++++++++++++++- 12 files changed, 830 insertions(+), 256 deletions(-) create mode 100644 postcss.config.js create mode 100644 tailwind.config.js diff --git a/package.json b/package.json index b261962..57311f5 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "@typescript-eslint/eslint-plugin": "7.0.0", "@typescript-eslint/parser": "7.2.0", "@vitejs/plugin-react-swc": "^3.5.0", + "autoprefixer": "^10.4.19", "eslint": "8.56.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-airbnb-typescript": "^18.0.0", @@ -50,9 +51,11 @@ "eslint-plugin-react": "7.34.1", "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "^0.4.6", + "postcss": "^8.4.38", "prettier": "3.1.0", "prettier-eslint": "16.1.2", "sass": "^1.75.0", + "tailwindcss": "^3.4.3", "typescript": "^5.2.2", "vite": "^5.2.0" } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 5d4331b..f1c4850 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -29,7 +29,10 @@ const ProtectBanner: React.FunctionComponent = () => { > 歡迎登入 寶泰! - 通過實名驗證,開始投資 +
    test
    + + <div className='text-[16px] lg:text-[40px]'>通過實名驗證,開始投資</div> + = () => { @@ -268,13 +271,13 @@ const ProtectBanner: React.FunctionComponent = () => { diff --git a/src/index.css b/src/index.css index e2cd148..c481238 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + :root { font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; line-height: 1.5; diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 3c3fe2f..e818054 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -4,16 +4,16 @@ import { HashRouter, Navigate, Route, Routes } from 'react-router-dom'; const PublicLayout = lazy(() => import('./PublicLayout')); const AuthLayout = lazy(() => import('./AuthLayout')); const Home = lazy(() => import('./Home')); -const Account = lazy(() => import('../pages/account/index')); -const Property = lazy(() => import('../pages/property/index')); -const User = lazy(() => import('../pages/user/index')); -const History = lazy(() => import('../pages/history/index')); +const Account = lazy(() => import('./account/index')); +const Property = lazy(() => import('./property/index')); +const User = lazy(() => import('./user/index')); +const History = lazy(() => import('./history/index')); const LoginPage = lazy(() => import('./login/LoginPage')); const RegisterPage = lazy(() => import('./login/RegisterPage')); const InvestmentMarket = lazy(() => import('../components/InvestmentMarket/InvestmentMarket')); -const MyFocus = lazy(() => import('../pages/HotInvestMents/MyFocus')); -const CurrencyDetails = lazy(() => import('../pages/currencydetails/CurrencyDetails')); -const K100U = lazy(() => import('../pages/K100U/K100U')); +const MyFocus = lazy(() => import('./HotInvestMents/MyFocus')); +const CurrencyDetails = lazy(() => import('./currencydetails/CurrencyDetails')); +const K100U = lazy(() => import('./K100U/K100U')); const AppRouter: React.FunctionComponent = () => { return ( diff --git a/src/pages/AuthLayout/components/UseFooter.tsx b/src/pages/AuthLayout/components/UseFooter.tsx index b68ca39..72d0c9c 100644 --- a/src/pages/AuthLayout/components/UseFooter.tsx +++ b/src/pages/AuthLayout/components/UseFooter.tsx @@ -1,106 +1,111 @@ -import PT_logo_ from '../../../assets/logo.png'; -import Google_play from '../../../assets/googlePlay.png'; -import App_store from '../../../assets/appStore.png'; +import { Divider, Row, Col, Typography } from 'antd'; +import PTLogo from '../../../assets/logo.png'; +import GooglePlay from '../../../assets/googlePlay.png'; +import AppStore from '../../../assets/appStore.png'; -const liStyle = { - listStyleType: 'none', - padding: 0, -}; -const UlMargin = { - width: '145px', - marginRight: '58px', -}; +const { Text } = Typography; -const UseFooter: React.FC = () => ( -
    -
    -
    -
    - -
    -
    -
    ( +
    +
    + PT Logo +
    + + +
    -
    -
    -
    投資市場
    -
      -
    • 貨幣
    • -
    • 指數
    • -
    • 股票
    • -
    • 大宗商品
    • -
    • 加密貨幣
    • -
    -
    -
    -
    幫助中心
    -
      -
    • 如何入金
    • -
    • 如何出金
    • -
    • 如何開立帳戶
    • -
    • 如何驗證帳戶
    • -
    -
    -
    -
    關於我們
    -
      -
    • 簡介
    • -
    • 最新公告
    • -
    -
    -
    -
    隱私和法規
    -
      -
    • 客戶協議書
    • -
    • 風險紕漏聲明
    • -
    • 免責協議
    • -
    • 保密協議
    • -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    - 進行差價合約(CFD) - 交易存在損失風險,您的投資價值可能會有波動。差價合約為複雜的金融產品,由於槓桿作用而存在迅速虧損的高風險。請您在交易前充分了解差價合約產品的運作方式,並評估自己能否承擔資金損失的高風險。 -
    -
    - 宝泰Fintech 通過瓦努阿圖共和國金融服務委員會完成註冊並受其監管,牌照號:40361,註冊辦事處:1st Floor, B & P - House, Kumul Highway, Portvila, Vanuatu。 -
    +
    投資市場
    +
      +
    • 貨幣
    • +
    • 指數
    • +
    • 股票
    • +
    • 大宗商品
    • +
    • 加密貨幣
    • +
    + +
    +
    幫助中心
    +
      +
    • 如何入金
    • +
    • 如何出金
    • +
    • 如何開立帳戶
    • +
    • 如何驗證帳戶
    • +
    + + +
    關於我們
    +
      +
    • 簡介
    • +
    • 最新公告
    • +
    + + +
    隱私和法規
    +
      +
    • 客戶協議書
    • +
    • 風險紕漏聲明
    • +
    • 免責協議
    • +
    • 保密協議
    • +
    + + + Google Play + + + App Store + + + +
    +
    + 進行差價合約(CFD)交易存在損失風險,您的投資價值可能會有波動。差價合約為複雜的金融產品,由於槓桿作用而存在迅速虧損的高風險。請您在交易前充分了解差價合約產品的運作方式,並評估自己能否承擔資金損失的高風險。
    -
    - Copyright © 2023 宝泰 Fintech. All rights reserved. +
    + 宝泰Fintech 通過瓦努阿圖共和國金融服務委員會完成註冊並受其監管,牌照號:40361,註冊辦事處:1st Floor, B & P + House, Kumul Highway, Portvila, Vanuatu。
    + +
    + Copyright © 2023 宝泰 Fintech. All rights reserved. +
    ); diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 9760a5b..f5d85f5 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,18 +1,13 @@ import LoopBanner from '@/components/LoopBanner'; import ProtectBanner from '@/components/ProtectBanner'; -function App() { - - +const App: React.FunctionComponent = () => { return ( <> - - - -
    - + + ); -} +}; export default App; diff --git a/src/pages/HotInvestMents/HotInvestMents.tsx b/src/pages/HotInvestMents/HotInvestMents.tsx index 7f25a2d..1b8dc66 100644 --- a/src/pages/HotInvestMents/HotInvestMents.tsx +++ b/src/pages/HotInvestMents/HotInvestMents.tsx @@ -1,7 +1,7 @@ -import React, { useState } from 'react'; -import { Button, Card, Col, List, Row, Typography, Table, Progress, Slider, Rate } from 'antd'; -import GoToTrade from '../../components/GoToTrade'; +import { useState } from 'react'; +import { Button, Col, Row, Typography, Table, Progress, Slider, Rate } from 'antd'; import { Link } from 'react-router-dom'; +import GoToTrade from '../../components/GoToTrade'; const { Title, Text } = Typography; @@ -54,19 +54,19 @@ const HotInvestments = () => { title: '52周區間', dataIndex: 'weeks52', key: 'weeks52', - width: '200px', + width: 200, }, { title: '情緒', dataIndex: 'mood', key: 'mood', - width: '200px', + width: 200, }, { title: '交易', dataIndex: 'trade', key: 'trade', - width: '150px', + width: 150, }, { title: '關注', @@ -93,7 +93,7 @@ const HotInvestments = () => { market: ( 123 @@ -124,7 +124,7 @@ const HotInvestments = () => { ), mood: ( -
    +
    {
    {
    {
    {
    { >
    {
    123
    123
    -
    +
    {
    123
    123
    -
    +
    -
    -
    - -
    -
    -
    - 新會員 尚未實名驗證 - 實名驗證審核中 - 已通過實名驗證 -
    -
    -
    -
    - 未驗證,可限額入金 USD 2000 - 不可 交易、出金 -
    -
    -
    + + +
    + + + + +
    + 新會員 尚未實名驗證 + 實名驗證審核中 + 已通過實名驗證 +
    + + +
    + 未驗證,可限額入金 USD 2000 + 不可 交易、出金 +
    + + + + ( + + PT_logo_ + +); +const FooterRender = () => ( +
    + AD_USDTpay + © 2024 Produced +
    + by Po Tai +
    +); + const PublicLayout: React.FunctionComponent = () => { const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); const { isDark, setIsDark } = useThemeStore(); @@ -73,7 +95,7 @@ const PublicLayout: React.FunctionComponent = () => { name: ( 入金 @@ -84,7 +106,7 @@ const PublicLayout: React.FunctionComponent = () => { name: ( 出金 @@ -95,7 +117,7 @@ const PublicLayout: React.FunctionComponent = () => { name: ( 轉帳 @@ -143,6 +165,9 @@ const PublicLayout: React.FunctionComponent = () => { return ( <> +
    + , +
    = () => { colorBgMenuItemSelected: 'rgba(0,0,0,0.04)', }, }} - headerTitleRender={() => ( - - PT_logo_ - - )} + headerTitleRender={HeaderTitle} logo={ = () => { /> } - headerContentRender={() => } + headerContentRender={TradingPlatform} // 右上 avatarProps={{ render: () => ( @@ -244,20 +261,8 @@ const PublicLayout: React.FunctionComponent = () => { onChange={(newValue) => setIsDark(newValue)} key='switch' />, - , ]} - menuFooterRender={() => ( -
    - AD_USDTpay - © 2024 Produced -
    - by Po Tai -
    - )} + menuFooterRender={FooterRender} route={route} > = () => { sm={24} xs={24} > -
    - -
    + + +
    + -
    - -
    = ({ buttonStyle, buttonText = '聯繫客服', }) => { + UserChat.defaultProps = { + buttonStyle: {}, + buttonText: '聯繫客服', + }; const [visible, setVisible] = useState(false); const [messages, setMessages] = useState([{ type: 'customerService', content: '您好,有什么可以帮到您的吗?' }]); const [inputMessage, setInputMessage] = useState(''); @@ -44,73 +48,75 @@ const UserChat: React.FC<{ buttonStyle?: object; buttonText?: string }> = ({ onCancel={handleCancel} centered={false} footer={null} - style={{ borderRadius: 12, position: 'fixed', right: -75, top: 0, padding: '0', margin: '0', display: 'flex' }} - bodyStyle={{ - height: 'calc(100vh - 48px)', - overflow: 'auto', - display: 'flex', - flexDirection: 'column', + style={{ + borderRadius: 12, + position: 'fixed', + right: 0, + top: 0, + padding: '0', + margin: '0', justifyContent: 'space-between', }} > - ( - - } /> : null - } - title={message.type === 'customerService' ? '客服' : '我'} - description={message.content} - style={{ textAlign: message.type === 'customerService' ? 'left' : 'right' }} - /> - - )} - /> - -
    - - - - + ( + + } /> : null + } + title={message.type === 'customerService' ? '客服' : '我'} + description={message.content} + style={{ textAlign: message.type === 'customerService' ? 'left' : 'right' }} + /> + + )} /> - +
    + + + + + + +
    diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..d37737f --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/yarn.lock b/yarn.lock index 148150a..38ce9ba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,11 @@ # yarn lockfile v1 +"@alloc/quick-lru@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" + integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== + "@ant-design/charts-util@0.0.1-alpha.5": version "0.0.1-alpha.5" resolved "https://registry.yarnpkg.com/@ant-design/charts-util/-/charts-util-0.0.1-alpha.5.tgz#bb8ab113194f0ffeddb688d54bfd63d6f0007fb7" @@ -774,6 +779,18 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" @@ -781,6 +798,38 @@ dependencies: "@sinclair/typebox" "^0.27.8" +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@^0.3.24": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@ljharb/resumer@~0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@ljharb/resumer/-/resumer-0.0.1.tgz#8a940a9192dd31f6a1df17564bbd26dc6ad3e68d" @@ -827,6 +876,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + "@pkgr/core@^0.1.0": version "0.1.1" resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" @@ -1387,12 +1441,17 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -1404,6 +1463,11 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + antd@^5.16.5: version "5.16.5" resolved "https://registry.yarnpkg.com/antd/-/antd-5.16.5.tgz#fef849340b98fe41b328fe06eec3ce1bf619562c" @@ -1458,6 +1522,11 @@ antd@^5.16.5: scroll-into-view-if-needed "^3.1.0" throttle-debounce "^5.0.0" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -1466,6 +1535,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +arg@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -1602,6 +1676,18 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +autoprefixer@^10.4.19: + version "10.4.19" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" + integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== + dependencies: + browserslist "^4.23.0" + caniuse-lite "^1.0.30001599" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + available-typed-arrays@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" @@ -1672,6 +1758,23 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.23.0: + version "4.23.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" + integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + dependencies: + caniuse-lite "^1.0.30001587" + electron-to-chromium "^1.4.668" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7, call-bind@~1.0.2: version "1.0.7" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" @@ -1688,11 +1791,21 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g== +caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: + version "1.0.30001624" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz#0ec4c8fa7a46e5b785477c70b38a56d0b10058eb" + integrity sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA== + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -1720,7 +1833,7 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -"chokidar@>=3.0.0 <4.0.0": +"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -1786,6 +1899,11 @@ commander@7: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + common-tags@^1.4.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" @@ -1818,7 +1936,7 @@ copy-to-clipboard@^3.3.3: dependencies: toggle-selection "^1.0.6" -cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1851,6 +1969,11 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + csstype@^3.0.2, csstype@^3.0.8, csstype@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" @@ -2061,6 +2184,11 @@ dequal@^2.0.3: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +didyoumean@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" + integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2068,7 +2196,7 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dlv@^1.1.0: +dlv@^1.1.0, dlv@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== @@ -2124,6 +2252,21 @@ dotignore@~0.1.2: dependencies: minimatch "^3.0.4" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +electron-to-chromium@^1.4.668: + version "1.4.783" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz#933887165b8b6025a81663d2d97cf4b85cde27b2" + integrity sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emoji-regex@^9.2.2: version "9.2.2" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" @@ -2287,6 +2430,11 @@ esbuild@^0.20.1: "@esbuild/win32-ia32" "0.20.2" "@esbuild/win32-x64" "0.20.2" +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escape-string-regexp@^1.0.2: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2603,7 +2751,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.9, fast-glob@^3.3.1: +fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -2658,6 +2806,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -2708,6 +2863,14 @@ for-each@^0.3.3, for-each@~0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -2717,6 +2880,11 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2793,6 +2961,17 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob@^10.3.10: + version "10.4.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" + integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + path-scurry "^1.11.1" + glob@^7.1.3, glob@~7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -3061,6 +3240,11 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-function@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -3184,6 +3368,20 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" +jackspeak@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" + integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jiti@^1.21.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + "js-tokens@^3.0.0 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3288,6 +3486,21 @@ lie@3.1.1: dependencies: immediate "~3.0.5" +lilconfig@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lilconfig@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + localforage@^1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" @@ -3347,6 +3560,11 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^10.2.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" + integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3372,6 +3590,14 @@ micromatch@^4.0.4: braces "^3.0.2" picomatch "^2.3.1" +micromatch@^4.0.5: + version "4.0.7" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" + integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" @@ -3398,11 +3624,23 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" + integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6, minimist@~1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + mock-property@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/mock-property/-/mock-property-1.0.3.tgz#3e37c50a56609d548cabd56559fde3dd8767b10c" @@ -3425,6 +3663,15 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -3442,11 +3689,21 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -3461,11 +3718,16 @@ numbro@^2.5.0: dependencies: bignumber.js "^8 || ^9" -object-assign@4.x, object-assign@^4.1.1: +object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +object-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" + integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== + object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" @@ -3610,6 +3872,14 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-to-regexp@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" @@ -3630,17 +3900,76 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pirates@^4.0.1: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss@^8.4.38: +postcss-import@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-15.1.0.tgz#41c64ed8cc0e23735a9698b3249ffdbf704adc70" + integrity sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== + dependencies: + postcss-value-parser "^4.0.0" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-js@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.1.tgz#61598186f3703bab052f1c4f7d805f3991bee9d2" + integrity sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw== + dependencies: + camelcase-css "^2.0.1" + +postcss-load-config@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" + integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + dependencies: + lilconfig "^3.0.0" + yaml "^2.3.4" + +postcss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" + integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + dependencies: + postcss-selector-parser "^6.0.11" + +postcss-selector-parser@^6.0.11: + version "6.1.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz#49694cb4e7c649299fea510a29fa6577104bcf53" + integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.23, postcss@^8.4.38: version "8.4.38" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e" integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== @@ -4196,6 +4525,13 @@ reactcss@^1.2.3: dependencies: lodash "^4.0.1" +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== + dependencies: + pify "^2.3.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4261,7 +4597,7 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.22.4, resolve@~1.22.6: +resolve@^1.1.7, resolve@^1.22.2, resolve@^1.22.4, resolve@~1.22.6: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -4462,6 +4798,11 @@ side-channel@^1.0.4, side-channel@^1.0.6: get-intrinsic "^1.2.4" object-inspect "^1.13.1" +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -4508,6 +4849,33 @@ string-convert@^0.2.0: resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.10: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" @@ -4554,6 +4922,13 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -4561,13 +4936,20 @@ strip-ansi@^3.0.0: dependencies: ansi-regex "^2.0.0" -strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -4583,6 +4965,19 @@ stylis@^4.0.13: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== +sucrase@^3.32.0: + version "3.35.0" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== + dependencies: + "@jridgewell/gen-mapping" "^0.3.2" + commander "^4.0.0" + glob "^10.3.10" + lines-and-columns "^1.1.6" + mz "^2.7.0" + pirates "^4.0.1" + ts-interface-checker "^0.1.9" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -4621,6 +5016,34 @@ synckit@^0.8.6: "@pkgr/core" "^0.1.0" tslib "^2.6.2" +tailwindcss@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519" + integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== + dependencies: + "@alloc/quick-lru" "^5.2.0" + arg "^5.0.2" + chokidar "^3.5.3" + didyoumean "^1.2.2" + dlv "^1.1.3" + fast-glob "^3.3.0" + glob-parent "^6.0.2" + is-glob "^4.0.3" + jiti "^1.21.0" + lilconfig "^2.1.0" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-hash "^3.0.0" + picocolors "^1.0.0" + postcss "^8.4.23" + postcss-import "^15.1.0" + postcss-js "^4.0.1" + postcss-load-config "^4.0.1" + postcss-nested "^6.0.1" + postcss-selector-parser "^6.0.11" + resolve "^1.22.2" + sucrase "^3.32.0" + tapable@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" @@ -4653,6 +5076,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throttle-debounce@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933" @@ -4695,6 +5132,11 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -4806,6 +5248,14 @@ universalify@^0.2.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== +update-browserslist-db@^1.0.13: + version "1.0.16" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" + integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -4831,6 +5281,11 @@ use-sync-external-store@^1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + vite@^5.2.0: version "5.2.10" resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" @@ -4947,6 +5402,24 @@ wordwrap@0.0.2: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" integrity sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q== +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -4962,6 +5435,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^2.3.4: + version "2.4.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362" + integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== + yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From 63ac8ac64535079483f90d399679fa166dcbf072 Mon Sep 17 00:00:00 2001 From: Kirito Date: Wed, 29 May 2024 14:49:10 +0800 Subject: [PATCH 013/118] rwd+menu --- .eslintrc.cjs | 1 + src/components/AccountChart.tsx | 17 +- src/components/ProtectBanner.tsx | 7 +- src/components/TradingPlatform.tsx | 5 +- src/main.tsx | 3 +- src/pages/PublicLayout/PublicLayout.tsx | 330 ++++++++++++++++++------ src/pages/PublicLayout/UserChat.tsx | 12 +- tailwind.config.js | 8 +- 8 files changed, 282 insertions(+), 101 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 63eb98f..0c780e2 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -35,6 +35,7 @@ module.exports = { ], 'no-empty-pattern': ['off'], }, + include: ['tailwind.config.js'] , settings: { 'import/parsers': { diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index f71c17f..6abfb72 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -5,10 +5,19 @@ import { CaretLeftOutlined, CaretRightOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import SelectAccount from './SelectAccount'; -interface IAccountChartProps {} +interface IAccountChartProps { + onClose?: () => void; +} + const AccountChart: React.FunctionComponent = (props) => { - const {} = props || {}; + const { onClose } = props || {}; + + const handleClick = () => { + if (onClose) { + onClose(); + } + }; const data = [ { type: '可用', @@ -106,13 +115,15 @@ const AccountChart: React.FunctionComponent = (props) => { diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index f1c4850..ea2bd5a 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -29,9 +29,8 @@ const ProtectBanner: React.FunctionComponent = () => { > 歡迎登入 寶泰! -
    test
    - <div className='text-[16px] lg:text-[40px]'>通過實名驗證,開始投資</div> + <div className='text-[16px] sm:text-[40px]'>通過實名驗證,開始投資</div> = () => { - @@ -97,7 +96,7 @@ const ProtectBanner: React.FunctionComponent = () => { 交易 - + */} + ), + }, + { + key: '2', + label: ( + } + /> + ), + }, + ]; return ( <> + setUseAccountChart('')} + footer={null} + > +
    + setUseAccountChart('')} /> +
    +
    - , +
    + } + /> + , +
    +
    + + + +
    + = () => { }} headerTitleRender={HeaderTitle} logo={ - - - +
    + + + + +
    } - headerContentRender={TradingPlatform} // 右上 avatarProps={{ render: () => ( - , - label: 用戶資訊, - }, - { - key: '登出', - icon: , - label: '登出', - }, - ], - }} - > - - 歡迎登入!用戶名稱 - - - +
    +
    + + +
    總價值
    +
    $ 0.00
    + +
    +
    + +
    總價值
    +
    $ 0.00
    + +
    + ), + }, + { + key: '通知', + label: ( + +
    + + 通知 +
    +
    + ), + }, + { + key: '語言', + label: ( + +
    + + 語言 +
    +
    + ), + }, + { + key: '登出', + label: ( +
    + setIsDark(newValue)} + key='switch' + /> + 顯示 +
    + ), + }, + ], + }} + placement='topRight' + overlayClassName='bg-transparent' + > + + +
    + , + label: 用戶資訊, + }, + { + key: '登出', + icon: , + label: '登出', + }, + ], + }} + > + +
    歡迎登入!用戶名稱
    + +
    +
    + ), }} - actionsRender={() => [ - - -
    總價值
    -
    $ 0.00
    - -
    = ({ +const UserChat: React.FC<{ buttonStyle?: object; buttonText?: any }> = ({ buttonStyle, buttonText = '聯繫客服', }) => { @@ -58,7 +58,15 @@ const UserChat: React.FC<{ buttonStyle?: object; buttonText?: string }> = ({ justifyContent: 'space-between', }} > -
    +
    Date: Wed, 29 May 2024 17:29:37 +0800 Subject: [PATCH 014/118] rwd --- .../InvestmentMarket/InvestmentMarket.tsx | 85 +++++----- src/components/ProtectBanner.tsx | 67 ++++---- src/pages/HotInvestMents/MyFocus.tsx | 4 + src/pages/PublicLayout/PublicLayout.tsx | 7 +- src/pages/account/index.tsx | 150 +++++++++--------- .../history/accountHistory/ClosePosition.tsx | 86 ++++++---- 6 files changed, 216 insertions(+), 183 deletions(-) diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index e109e69..49d815e 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { ProCard } from '@ant-design/pro-card'; -import { Card, Input } from 'antd'; +import { Card, Input, Table, Tabs } from 'antd'; import Title from 'antd/lib/typography/Title'; import HotInvestMents from '../../pages/HotInvestMents/HotInvestMents'; @@ -12,46 +12,59 @@ const YourComponent = () => { }; return ( - - - 投資市場 + <div className='mt-5'> + <Title + className='sm:flex-row flex flex-col' + style={{ color: 'white', justifyContent: 'space-between' }} + > + <div className='text-[25px] whitespace-nowrap mr-3 mb-3 sm:mb-0'>投資市場</div> <Input.Search placeholder='input search text' allowClear style={{ width: 200 }} /> - + 额外的内容
    } // 这是选项卡附加的额外内容,可根据需要调整 + > + + {/* 總覽内容 */} + + + {/* 貨幣内容 */} + + + {/* 指數内容 */} + + + {/* 股票内容 */} + + + {/* 大宗商品内容 */} + + + {/* 加密貨幣内容 */} + + {/* 根據 activeTab 的值顯示不同的內容 */} {activeTab === '總覽' && } {activeTab === '貨幣' &&
    貨幣內容
    } @@ -59,7 +72,7 @@ const YourComponent = () => { {activeTab === '股票' &&
    股票內容
    } {activeTab === '大宗商品' &&
    大宗商品內容
    } {activeTab === '加密貨幣' &&
    加密貨幣內容
    } - +
    ); }; diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index ea2bd5a..13fc861 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -20,25 +20,25 @@ const ProtectBanner: React.FunctionComponent = () => { return (
    {/* 尚未實名驗證 */} - - + +
    - - 歡迎登入 寶泰! - - - <div className='text-[16px] sm:text-[40px]'>通過實名驗證,開始投資</div> + <Title level={3}> + <div className='text-[#8c8c8c] text-center sm:text-start'>歡迎登入 寶泰!</div>{' '} + <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>通過實名驗證,開始投資</div> -
    - 通過 +
    + + <div className='text-[16px] sm:text-[20px]'>通過</div> + = () => { -
    + = () => { {/* 實名驗證審核中 */} - - - - - 歡迎登入 寶泰! + <Card + className='flex sm:block p-1 sm:p-[30px]' + style={{ borderRadius: 30 }} + > + <Row className='flex justify-center sm:justify-between sm:flex-nowrap'> + <Col className='flex flex-col items-center sm:items-start'> + <Title level={3}> + <div className='text-[#8c8c8c] text-center sm:text-start'>歡迎登入 寶泰!</div> + <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>驗證審核中,不妨先存入資金!</div> - 驗證審核中,不妨先存入資金! - -
    - 通過 +
    +
    + + <div className='text-[16px] sm:text-[20px]'>通過</div> + = () => {
    - -
    + /> */} + {/*
    未通過 @@ -192,8 +194,8 @@ const ProtectBanner: React.FunctionComponent = () => { 交易 -
    - +
    */} +
    = () => { -
    + = () => { size='large' > 我的總價值} prefix='$' value={400000} precision={2} - valueStyle={{ fontSize: 48, fontWeight: 'bold', color: '#F39D1B' }} + valueStyle={{ fontSize: '3em', fontWeight: 'bold', color: '#F39D1B' }} /> diff --git a/src/pages/HotInvestMents/MyFocus.tsx b/src/pages/HotInvestMents/MyFocus.tsx index 5f37451..99b7b14 100644 --- a/src/pages/HotInvestMents/MyFocus.tsx +++ b/src/pages/HotInvestMents/MyFocus.tsx @@ -149,6 +149,10 @@ const HotInvestments = () => { dataSource={contentData} pagination={false} columns={columns} + virtual + bordered + scroll={{ x: 1200, y: 400 }} + rowKey='id' /> = () => {
    -
    +
    = () => { /> ,
    -
    +
    = () => {
    ), }} - actionsRender={() => []} menuFooterRender={FooterRender} route={route} > @@ -452,7 +451,7 @@ const PublicLayout: React.FunctionComponent = () => { sm={24} xs={24} > -
    +
    diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index 06144ac..cffbf92 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -1,4 +1,5 @@ -import { List, Avatar, Button, Collapse, CollapseProps, Space, theme, Dropdown, Menu } from 'antd'; +import { List, Avatar, Button, Collapse, Dropdown, Menu, Space } from 'antd'; +import { PlusOutlined } from '@ant-design/icons'; import * as React from 'react'; import logo from '../../assets/PTFintech_logo.png'; import AccountMenu from './components/AccountMenu'; @@ -6,21 +7,20 @@ import AddAccount from '../../components/AddAccount'; import mt4 from '../../assets/mt4.png'; import mt5 from '../../assets/mt5.png'; -interface IAccountProps {} +const { Panel } = Collapse; -const Account: React.FunctionComponent = (props) => { - const {} = props || {}; +const Account = () => { const [isAddAccountVisible, setIsAddAccountVisible] = React.useState(false); + const PTAccount = [ { account: 'email@qq.com', accountType: '寶泰帳戶', icon: logo, balance: '$ 0.00', - currency: '$', - isReal: '', }, ]; + const platformMenu = ( @@ -33,100 +33,46 @@ const Account: React.FunctionComponent = (props) => { ); + const MT4Account = [ { account: '3000000015', accountType: 'MT4', balance: '$ 0.00', - currency: '$', isReal: '真實', }, { account: '3000000016', accountType: 'MT4', balance: '$ 0.00', - currency: '$', isReal: '模擬', }, ]; + const genExtra = () => ( - { - event.stopPropagation(); - }} - > - +
    + - + - +
    ); - const { token } = theme.useToken(); - const panelStyle: React.CSSProperties = { + + const panelStyle = { marginBottom: 20, - background: token.colorFillAlter, - borderRadius: token.borderRadiusLG, + borderRadius: '0.375rem', border: 'none', }; - const items: CollapseProps['items'] = [ - { - key: 'MT4 帳戶', - label: ( - - - MT4 帳戶(2) - - ), - children: ( - ( - ]}> - - {item.accountType} {item.isReal}帳戶 -
    - } - /> -
    結餘 {item.balance}
    - - )} - /> - ), - extra: genExtra(), - style: panelStyle, - }, - { - key: 'MT5 帳戶', - label: ( - - - MT5 帳戶(0) - - ), - children:
    , - extra: genExtra(), - style: panelStyle, - }, - ]; return ( -
    +
    ( @@ -134,9 +80,8 @@ const Account: React.FunctionComponent = (props) => { } title={item.account} @@ -147,11 +92,58 @@ const Account: React.FunctionComponent = (props) => { )} /> + + + MT4 帳戶(2) + + } + key='1' + extra={genExtra()} + style={panelStyle} + > + ( + ]}> + +
    結餘 {item.balance}
    +
    + )} + /> +
    + + + MT5 帳戶(0) + + } + key='2' + extra={genExtra()} + style={panelStyle} + > +
    +
    +
    + setIsAddAccountVisible(false)} /> - setIsAddAccountVisible(false)} />
    ); }; diff --git a/src/pages/history/accountHistory/ClosePosition.tsx b/src/pages/history/accountHistory/ClosePosition.tsx index 111ea37..aa0e791 100644 --- a/src/pages/history/accountHistory/ClosePosition.tsx +++ b/src/pages/history/accountHistory/ClosePosition.tsx @@ -1,5 +1,5 @@ import { ProCard } from '@ant-design/pro-components'; -import { Card, List, Tabs } from 'antd'; +import { Card, Tabs, Table } from 'antd'; import * as React from 'react'; interface IClosePosition {} @@ -10,72 +10,93 @@ interface TabContentProps { const TabContent: React.FC = ({ content }) => { const data = [ + { + 開立倉位: '開立倉位()', + 單位: '買入', + 開倉: '123', + 平倉: '123', + 止損: '123', + 止盈: '123', + 傭金: '123', + 稅收: '123', + 過夜利息: '123', + 盈虧: '123', + }, + { + 傭金: '0', + 稅收: '0', + 過夜利息: '0', + 盈虧: '損益' + }, + { + 過夜利息: '損益', + 盈虧: '-8763' + }, + ]; + + const columns = [ { title: '開立倉位()', - content: '買入', + dataIndex: '開立倉位', + key: '開立倉位', }, { title: '單位', - content: '1', + dataIndex: '單位', + key: '單位', }, { title: '開倉', - content: '123', + dataIndex: '開倉', + key: '開倉', }, { title: '平倉', - content: '123', + dataIndex: '平倉', + key: '平倉', }, { title: '止損', - content: '123', + dataIndex: '止損', + key: '止損', }, { title: '止盈', - content: '123', + dataIndex: '止盈', + key: '止盈', }, { title: '傭金', - content: '買入', - footer: '0', + dataIndex: '傭金', + key: '傭金', }, { title: '稅收', - content: '買入', - footer: '0', + dataIndex: '稅收', + key: '稅收', }, { title: '過夜利息', - content: '買入', - footer: '0', - ProfitAndLoss: '損益', + dataIndex: '過夜利息', + key: '過夜利息', }, { title: '盈虧', - content: '買入', - ProfitAndLoss: '-8763', + dataIndex: '盈虧', + key: '盈虧', }, ]; return ( - ( - - - {item.content} - - {item.footer} - - {item.ProfitAndLoss} - - - )} + columns={columns} + pagination={false} + virtual + bordered + scroll={{ x: 800, y: 400 }} + rowKey='id' /> ); @@ -88,6 +109,7 @@ const InSuccess: React.FunctionComponent = (props) => { Date: Wed, 29 May 2024 19:15:14 +0800 Subject: [PATCH 015/118] rwd --- src/components/TradingPlatform.tsx | 78 +++++++++++++------------ src/pages/PublicLayout/PublicLayout.tsx | 17 +++--- tailwind.config.js | 6 +- 3 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src/components/TradingPlatform.tsx b/src/components/TradingPlatform.tsx index fa87c83..55f4624 100644 --- a/src/components/TradingPlatform.tsx +++ b/src/components/TradingPlatform.tsx @@ -4,19 +4,14 @@ import { Link } from 'react-router-dom'; const App = () => { const menu = ( - + -
    -
    -
    +
    +
    +
    MetaTrader 4 { />
    MetaTrader 4
    -
    +
    立即下載
    WIN MAC @@ -46,14 +43,15 @@ const App = () => { iOS
    -
    +
    MetaTrader 4 { />
    MetaTrader 4
    -
    +
    立即下載
    WIN MAC @@ -83,7 +83,8 @@ const App = () => { iOS @@ -92,21 +93,23 @@ const App = () => {
    -
    +
    -
    其他平台
    -
    +
    + 其他平台 +
    +
    Platform 3 {
    description 3
    -
    +
    Platform 3 { trigger={['hover']} >
    -
    交易平台
    +
    交易平台
    diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 03fa336..1c01152 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -47,13 +47,16 @@ import UseFooter from '../AuthLayout/components/UseFooter'; interface IPublicLayoutProps {} const HeaderTitle = () => ( - - PT_logo_ - +
    + + PT_logo_ + + +
    ); const FooterRender = () => (
    diff --git a/tailwind.config.js b/tailwind.config.js index d21f1cd..30885d3 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -2,7 +2,11 @@ export default { content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], theme: { - extend: {}, + extend: { + screens: { + 'newMd': '1200px', // 大屏幕尺寸 + }, + }, }, plugins: [], }; From 53db4d02fd9a9436965cb1c6d5a8f6d6db119f02 Mon Sep 17 00:00:00 2001 From: Kirito Date: Thu, 30 May 2024 15:44:49 +0800 Subject: [PATCH 016/118] password --- src/components/AccountChart.tsx | 4 +- src/components/EditPassword.tsx | 14 +++ src/components/SelectAccount.tsx | 94 +++++++++++-------- src/pages/AuthLayout/AuthLayout.tsx | 2 +- src/pages/PublicLayout/PublicLayout.tsx | 2 +- src/pages/account/components/AccountMenu.tsx | 65 +++++++++++-- .../history/accountHistory/AccountHistory.tsx | 58 +++++++----- .../history/accountHistory/ClosePosition.tsx | 4 +- src/pages/history/index.tsx | 63 ++++++++----- src/pages/property/InProgress.tsx | 6 +- .../components/SafetyVerification.tsx | 17 ++-- 11 files changed, 215 insertions(+), 114 deletions(-) create mode 100644 src/components/EditPassword.tsx diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index 6abfb72..25862f4 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -111,7 +111,7 @@ const AccountChart: React.FunctionComponent = (props) => { direction='vertical' style={{ width: '100%' }} > - + diff --git a/src/components/EditPassword.tsx b/src/components/EditPassword.tsx new file mode 100644 index 0000000..9525616 --- /dev/null +++ b/src/components/EditPassword.tsx @@ -0,0 +1,14 @@ +import { Form, Input, Modal, Space } from 'antd'; +import Title from 'antd/es/skeleton/Title'; +import React, { useState } from 'react'; + +const EditPassword: React.FC<> = () => { + + return ( + + 123 + + ); +}; + +export default EditPassword; diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 00fc37c..c22573c 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -1,48 +1,66 @@ -import React from 'react'; +import React, { useState } from 'react'; import { PlusOutlined } from '@ant-design/icons'; -import { Button, Divider, Select } from 'antd'; - -// 將 Button 組件的定義移到父組件外部 -const AddAccountButton = () => ( - -); +import { Button, Divider, Modal, Select } from 'antd'; +import AddAccount from './AddAccount'; interface ISelectAccountProps {} const SelectAccount: React.FunctionComponent = () => { + const [showAddAccount, setShowAddAccount] = useState(false); // 將 useState 放在組件內部 + + const AddAccountButton = () => ( + + ); + return ( - 寶泰帳戶, + title: '寶泰帳戶', + options: [{ label: 寶泰帳戶-email@qq.com, value: '寶泰帳戶-email@qq.com' }], + }, + { + label: MT4 帳戶, + title: 'MT4 帳戶', + options: [ + { label: MT4 帳戶-3000000015, value: 'MT4 帳戶-3000000015' }, + { label: MT4 帳戶-3000000016, value: 'MT4 帳戶-3000000016' }, + ], + }, + ]} + dropdownRender={(menu) => ( +
    + {menu} + + +
    + )} + /> + {showAddAccount && ( + setShowAddAccount(false)} + footer={null} // 不顯示底部按鈕 + > + setShowAddAccount(false)} + /> + )} - /> +
    ); }; diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 667409b..27df57d 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -70,7 +70,7 @@ const AuthLayout: React.FC = () => { alt='' />
    -
    +
    setIsDark(newValue)} diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 1c01152..337e34e 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -152,7 +152,7 @@ const PublicLayout: React.FunctionComponent = () => { icon: , children: [ { path: '/帳戶報表', name: 帳戶報表 }, - { path: '/資產報表', name: 資產報表 }, + { path: '/資產報表', name: 資產報表 }, ], }, { diff --git a/src/pages/account/components/AccountMenu.tsx b/src/pages/account/components/AccountMenu.tsx index a4871fe..0592db3 100644 --- a/src/pages/account/components/AccountMenu.tsx +++ b/src/pages/account/components/AccountMenu.tsx @@ -1,37 +1,82 @@ +import SafetyVerification from '@/pages/property/components/SafetyVerification'; import { MoreOutlined } from '@ant-design/icons'; import { MenuProps, Dropdown, Button } from 'antd'; import * as React from 'react'; +import { Link } from 'react-router-dom'; -interface IAccountMenuProps { -} +interface IAccountMenuProps {} const AccountMenu: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; + const [openTransfer, setOpenTransfer] = React.useState(false); + const [currentStep, setCurrentStep] = React.useState('login'); + const [withdrawal, setWithdrawal] = React.useState('EditPassword'); + const handleNextStep = () => { + setOpenTransfer(true); + }; const items: MenuProps['items'] = [ { - label: '入金', + label: ( + + 入金 + + ), key: '入金', }, { - label: '出金', + label: ( + + 出金 + + ), key: '出金', }, { - label: '轉帳', + label: ( + + 轉帳 + + ), key: '轉帳', }, { type: 'divider', }, { - label: '變更密碼', + label:
    變更密碼
    , key: '變更密碼', }, ]; return ( - -
    ); }; diff --git a/src/pages/history/accountHistory/AccountHistory.tsx b/src/pages/history/accountHistory/AccountHistory.tsx index 44f99b3..4ee7698 100644 --- a/src/pages/history/accountHistory/AccountHistory.tsx +++ b/src/pages/history/accountHistory/AccountHistory.tsx @@ -1,37 +1,47 @@ import * as React from 'react'; import { Tabs } from 'antd'; import { useLocation } from 'react-router-dom'; -import ClosePosition from './ClosePosition'; // 需要确保正确导入 InSuccess 组件 +import ClosePosition from './ClosePosition'; -interface IAccountHistoryTabsProps {} +interface IAccountHistoryTabsProps { +} -const AccountHistoryTabs: React.FunctionComponent = (props) => { - const {} = props || {}; +const AccountHistoryTabs: React.FunctionComponent = () => { const location = useLocation(); - const pageState = location.state; + const [pageState, setPageState] = React.useState(''); + React.useEffect(() => { + setPageState(location.state ?? '平倉'); + }, [location]); + console.log(pageState); + const handleTabChange = (key: any) => { + setPageState(key); + }; return (
    , - }, - { - label: '持倉', - key: '持倉', - children: , - }, - { - label: '掛單', - key: '掛單', - children: , - }, - ]} - /> + activeKey={pageState} + onChange={handleTabChange} + > + + + + + + + + + +
    ); }; diff --git a/src/pages/history/accountHistory/ClosePosition.tsx b/src/pages/history/accountHistory/ClosePosition.tsx index aa0e791..379ccca 100644 --- a/src/pages/history/accountHistory/ClosePosition.tsx +++ b/src/pages/history/accountHistory/ClosePosition.tsx @@ -1,5 +1,5 @@ import { ProCard } from '@ant-design/pro-components'; -import { Card, Tabs, Table } from 'antd'; +import { Tabs, Table } from 'antd'; import * as React from 'react'; interface IClosePosition {} @@ -8,7 +8,7 @@ interface TabContentProps { content: string; } -const TabContent: React.FC = ({ content }) => { +const TabContent: React.FC = () => { const data = [ { 開立倉位: '開立倉位()', diff --git a/src/pages/history/index.tsx b/src/pages/history/index.tsx index 646b7ee..0812a5c 100644 --- a/src/pages/history/index.tsx +++ b/src/pages/history/index.tsx @@ -1,34 +1,47 @@ -import { ProCard } from '@ant-design/pro-components'; -import { DatePicker } from 'antd'; -import * as React from 'react'; +import { useState, useEffect } from 'react'; +import { Tabs, DatePicker } from 'antd'; +import { useLocation } from 'react-router-dom'; import PropertyHistoryTabs from './propertyHistory/PropertyHistoryTabs'; import AccountHistoryTabs from './accountHistory/AccountHistory'; -interface IHistoryProps {} +const { TabPane } = Tabs; -const History: React.FunctionComponent = (props) => { - const {} = props || {}; +const History = () => { + const location = useLocation(); + const [activeTab, setActiveTab] = useState('帳戶報表'); + + useEffect(() => { + if (location.state === '持倉') { + setActiveTab('帳戶報表'); + } else { + setActiveTab(location.state || '帳戶報表'); + } + }, [location]); + + const handleTabChange = (key: any) => { + setActiveTab(key); + }; return ( -
    - , - }, - { - label: '資產報表', - key: '資產報表', - children: , - }, - ], - }} - /> - +
    + + + + + + + + +
    ); }; diff --git a/src/pages/property/InProgress.tsx b/src/pages/property/InProgress.tsx index 50990e6..2fb9d17 100644 --- a/src/pages/property/InProgress.tsx +++ b/src/pages/property/InProgress.tsx @@ -1,10 +1,10 @@ import { useState } from 'react'; -import { List, Space, Tag, Switch, Divider, Input } from 'antd'; +import { List, Space, Tag, Divider, Input } from 'antd'; import * as React from 'react'; interface IInProgressProps {} -const InProgress: React.FunctionComponent = (props) => { +const InProgress: React.FunctionComponent = () => { const [filterType, setFilterType] = useState('all'); // 狀態用於過濾列表 const handleFilterChange = (type: string) => { @@ -97,7 +97,7 @@ const InProgress: React.FunctionComponent = (props) => { 'default' } > - {(item.type === 1 && '購買') || (item.type === 2 && '出售') || (item.type === 3 && '轉帳')} + {(item.type === 1 && '入金') || (item.type === 2 && '出金') || (item.type === 3 && '轉帳')} {item.remainTime &&
    支付時間:{item.remainTime}
    } diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index d9d8dd3..6a8a0ae 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -1,8 +1,9 @@ import { Button, Form, Input, Modal, Space, Typography } from 'antd'; import * as React from 'react'; import { useState } from 'react'; -import UseLoading from './UseLoading' -import TransferLoading from './TransferLoading' +import UseLoading from './UseLoading'; +import TransferLoading from './TransferLoading'; +import EditPassword from '@/components/EditPassword'; interface ISafetyVerificationProps { open: boolean; @@ -55,6 +56,9 @@ const SafetyVerification: React.FunctionComponent = ({ if (withdrawal === 'transfer') { setCurrentStep('getTransfer'); return currentStep; + }else if(withdrawal === 'EditPassword'){ + setCurrentStep('getPassword'); + return currentStep; } setCurrentStep(withdrawal); console.log(456, currentStep); @@ -361,12 +365,9 @@ const SafetyVerification: React.FunctionComponent = ({ )} - {currentStep === 'UseLoading' && ( - - )} - {currentStep === 'TransferLoading' && ( - - )} + {currentStep === 'UseLoading' && } + {currentStep === 'TransferLoading' && } + {currentStep === 'getPassword' && }
    ); }; From a47b327ab5f2ea3170ed616d2fc9f01500a5d45c Mon Sep 17 00:00:00 2001 From: Kirito Date: Mon, 3 Jun 2024 10:57:01 +0800 Subject: [PATCH 017/118] i18n --- react-i18n/.gitignore | 23 + react-i18n/README.md | 70 + react-i18n/package-lock.json | 18243 ++++++++++++++++ react-i18n/package.json | 38 + react-i18n/public/favicon.ico | Bin 0 -> 3870 bytes react-i18n/public/index.html | 43 + react-i18n/public/logo192.png | Bin 0 -> 5347 bytes react-i18n/public/logo512.png | Bin 0 -> 9664 bytes react-i18n/public/manifest.json | 25 + react-i18n/public/robots.txt | 3 + react-i18n/src/App.css | 38 + react-i18n/src/App.js | 25 + react-i18n/src/App.test.js | 8 + react-i18n/src/index.css | 13 + react-i18n/src/index.js | 17 + react-i18n/src/logo.svg | 1 + react-i18n/src/reportWebVitals.js | 13 + react-i18n/src/setupTests.js | 5 + src/components/ChangeBank.tsx | 112 + src/components/EditBank.tsx | 69 + src/components/EditPassword.tsx | 131 +- .../components/SafetyVerification.tsx | 14 +- .../property/components/TransferLoading.tsx | 2 +- src/pages/user/index.tsx | 5 +- 24 files changed, 18886 insertions(+), 12 deletions(-) create mode 100644 react-i18n/.gitignore create mode 100644 react-i18n/README.md create mode 100644 react-i18n/package-lock.json create mode 100644 react-i18n/package.json create mode 100644 react-i18n/public/favicon.ico create mode 100644 react-i18n/public/index.html create mode 100644 react-i18n/public/logo192.png create mode 100644 react-i18n/public/logo512.png create mode 100644 react-i18n/public/manifest.json create mode 100644 react-i18n/public/robots.txt create mode 100644 react-i18n/src/App.css create mode 100644 react-i18n/src/App.js create mode 100644 react-i18n/src/App.test.js create mode 100644 react-i18n/src/index.css create mode 100644 react-i18n/src/index.js create mode 100644 react-i18n/src/logo.svg create mode 100644 react-i18n/src/reportWebVitals.js create mode 100644 react-i18n/src/setupTests.js create mode 100644 src/components/ChangeBank.tsx create mode 100644 src/components/EditBank.tsx diff --git a/react-i18n/.gitignore b/react-i18n/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/react-i18n/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/react-i18n/README.md b/react-i18n/README.md new file mode 100644 index 0000000..58beeac --- /dev/null +++ b/react-i18n/README.md @@ -0,0 +1,70 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in your browser. + +The page will reload when you make changes.\ +You may also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can't go back!** + +If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. + +You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). + +### Code Splitting + +This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) + +### Analyzing the Bundle Size + +This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) + +### Making a Progressive Web App + +This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) + +### Advanced Configuration + +This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) + +### Deployment + +This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) + +### `npm run build` fails to minify + +This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/react-i18n/package-lock.json b/react-i18n/package-lock.json new file mode 100644 index 0000000..2d169e9 --- /dev/null +++ b/react-i18n/package-lock.json @@ -0,0 +1,18243 @@ +{ + "name": "react-i18n", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "react-i18n", + "version": "0.1.0", + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", + "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", + "dependencies": { + "@babel/highlight": "^7.24.6", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", + "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", + "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helpers": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/traverse": "^7.24.6", + "@babel/types": "^7.24.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.6.tgz", + "integrity": "sha512-Q1BfQX42zXHx732PLW0w4+Y3wJjoZKEMaatFUEAmQ7Z+jCXxinzeqX9bvv2Q8xNPes/H6F0I23oGkcgjaItmLw==", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", + "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", + "dependencies": { + "@babel/types": "^7.24.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz", + "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz", + "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", + "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", + "dependencies": { + "@babel/compat-data": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz", + "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-member-expression-to-functions": "^7.24.6", + "@babel/helper-optimise-call-expression": "^7.24.6", + "@babel/helper-replace-supers": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz", + "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", + "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", + "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", + "dependencies": { + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", + "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz", + "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", + "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", + "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz", + "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", + "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz", + "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-wrap-function": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz", + "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-member-expression-to-functions": "^7.24.6", + "@babel/helper-optimise-call-expression": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", + "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz", + "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", + "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", + "dependencies": { + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", + "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", + "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", + "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz", + "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==", + "dependencies": { + "@babel/helper-function-name": "^7.24.6", + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", + "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", + "dependencies": { + "@babel/template": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", + "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.6", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", + "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz", + "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz", + "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz", + "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/plugin-transform-optional-chaining": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz", + "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.6.tgz", + "integrity": "sha512-8DjR0/DzlBhz2SVi9a19/N2U5+C3y3rseXuyoKL9SP8vnbewscj1eHZtL6kpEn4UCuUmqEo0mvqyDYRFoN2gpA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-decorators": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@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.", + "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-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.6.tgz", + "integrity": "sha512-gInH8LEqBp+wkwTVihCd/qf+4s28g81FZyvlIbAurHk9eSiItEKG7E0uNK2UdpgsD79aJVAW3R3c85h0YJ0jsw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.6.tgz", + "integrity": "sha512-gNkksSdV8RbsCoHF9sjVYrHfYACMl/8U32UfUhJ9+84/ASXw8dlx+eHyyF0m6ncQJ9IBSxfuCkB36GJqYdXTOA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz", + "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz", + "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", + "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", + "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz", + "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz", + "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-remap-async-to-generator": "^7.24.6", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz", + "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-remap-async-to-generator": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz", + "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz", + "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz", + "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz", + "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz", + "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-replace-supers": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", + "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/template": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz", + "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz", + "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz", + "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz", + "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz", + "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz", + "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.6.tgz", + "integrity": "sha512-1l8b24NoCpaQ13Vi6FtLG1nv6kNoi8PWvQb1AYO7GHZDpFfBYc3lbXArx1lP2KRt8b4pej1eWc/zrRmsQTfOdQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-flow": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz", + "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz", + "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz", + "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz", + "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz", + "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz", + "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz", + "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz", + "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-simple-access": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz", + "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz", + "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz", + "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz", + "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz", + "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz", + "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.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-transform-object-rest-spread": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz", + "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz", + "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-replace-supers": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz", + "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.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-transform-optional-chaining": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz", + "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz", + "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz", + "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz", + "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz", + "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz", + "integrity": "sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz", + "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz", + "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-jsx": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz", + "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz", + "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz", + "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz", + "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.6.tgz", + "integrity": "sha512-W3gQydMb0SY99y/2lV0Okx2xg/8KzmZLQsLaiCmwNRl1kKomz14VurEm+2TossUb+sRvBCnGe+wx8KtIgDtBbQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz", + "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz", + "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz", + "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz", + "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz", + "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz", + "integrity": "sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.6", + "@babel/helper-create-class-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/plugin-syntax-typescript": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz", + "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz", + "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz", + "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz", + "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz", + "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==", + "dependencies": { + "@babel/compat-data": "^7.24.6", + "@babel/helper-compilation-targets": "^7.24.6", + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.6", + "@babel/plugin-syntax-import-attributes": "^7.24.6", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.6", + "@babel/plugin-transform-async-generator-functions": "^7.24.6", + "@babel/plugin-transform-async-to-generator": "^7.24.6", + "@babel/plugin-transform-block-scoped-functions": "^7.24.6", + "@babel/plugin-transform-block-scoping": "^7.24.6", + "@babel/plugin-transform-class-properties": "^7.24.6", + "@babel/plugin-transform-class-static-block": "^7.24.6", + "@babel/plugin-transform-classes": "^7.24.6", + "@babel/plugin-transform-computed-properties": "^7.24.6", + "@babel/plugin-transform-destructuring": "^7.24.6", + "@babel/plugin-transform-dotall-regex": "^7.24.6", + "@babel/plugin-transform-duplicate-keys": "^7.24.6", + "@babel/plugin-transform-dynamic-import": "^7.24.6", + "@babel/plugin-transform-exponentiation-operator": "^7.24.6", + "@babel/plugin-transform-export-namespace-from": "^7.24.6", + "@babel/plugin-transform-for-of": "^7.24.6", + "@babel/plugin-transform-function-name": "^7.24.6", + "@babel/plugin-transform-json-strings": "^7.24.6", + "@babel/plugin-transform-literals": "^7.24.6", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.6", + "@babel/plugin-transform-member-expression-literals": "^7.24.6", + "@babel/plugin-transform-modules-amd": "^7.24.6", + "@babel/plugin-transform-modules-commonjs": "^7.24.6", + "@babel/plugin-transform-modules-systemjs": "^7.24.6", + "@babel/plugin-transform-modules-umd": "^7.24.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6", + "@babel/plugin-transform-new-target": "^7.24.6", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6", + "@babel/plugin-transform-numeric-separator": "^7.24.6", + "@babel/plugin-transform-object-rest-spread": "^7.24.6", + "@babel/plugin-transform-object-super": "^7.24.6", + "@babel/plugin-transform-optional-catch-binding": "^7.24.6", + "@babel/plugin-transform-optional-chaining": "^7.24.6", + "@babel/plugin-transform-parameters": "^7.24.6", + "@babel/plugin-transform-private-methods": "^7.24.6", + "@babel/plugin-transform-private-property-in-object": "^7.24.6", + "@babel/plugin-transform-property-literals": "^7.24.6", + "@babel/plugin-transform-regenerator": "^7.24.6", + "@babel/plugin-transform-reserved-words": "^7.24.6", + "@babel/plugin-transform-shorthand-properties": "^7.24.6", + "@babel/plugin-transform-spread": "^7.24.6", + "@babel/plugin-transform-sticky-regex": "^7.24.6", + "@babel/plugin-transform-template-literals": "^7.24.6", + "@babel/plugin-transform-typeof-symbol": "^7.24.6", + "@babel/plugin-transform-unicode-escapes": "^7.24.6", + "@babel/plugin-transform-unicode-property-regex": "^7.24.6", + "@babel/plugin-transform-unicode-regex": "^7.24.6", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.6", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz", + "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "@babel/plugin-transform-react-display-name": "^7.24.6", + "@babel/plugin-transform-react-jsx": "^7.24.6", + "@babel/plugin-transform-react-jsx-development": "^7.24.6", + "@babel/plugin-transform-react-pure-annotations": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz", + "integrity": "sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.6", + "@babel/helper-validator-option": "^7.24.6", + "@babel/plugin-syntax-jsx": "^7.24.6", + "@babel/plugin-transform-modules-commonjs": "^7.24.6", + "@babel/plugin-transform-typescript": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", + "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", + "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", + "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", + "dependencies": { + "@babel/code-frame": "^7.24.6", + "@babel/generator": "^7.24.6", + "@babel/helper-environment-visitor": "^7.24.6", + "@babel/helper-function-name": "^7.24.6", + "@babel/helper-hoist-variables": "^7.24.6", + "@babel/helper-split-export-declaration": "^7.24.6", + "@babel/parser": "^7.24.6", + "@babel/types": "^7.24.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", + "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.6", + "@babel/helper-validator-identifier": "^7.24.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", + "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", + "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", + "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "peer": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/react/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/react/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@testing-library/react/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", + "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "node_modules/@types/jest/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/@types/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + }, + "node_modules/@types/node": { + "version": "20.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", + "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", + "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", + "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", + "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.1.0", + "es-shim-unscopables": "^1.0.2" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", + "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", + "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001626", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001626.tgz", + "integrity": "sha512-JRW7kAH8PFJzoPCJhLSHgDgKg5348hsQ68aqb+slnzuB5QFERv846oA/mRChmlLAOdEDeOkRn3ynb1gSFnjt3w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.788", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", + "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", + "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", + "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", + "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "aria-query": "^5.3.0", + "array-includes": "^3.1.7", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "=4.7.0", + "axobject-query": "^3.2.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.15", + "hasown": "^2.0.0", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", + "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/eslint/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/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jackspeak": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", + "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "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/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", + "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", + "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-dev-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/react-dev-utils/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-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.2.tgz", + "integrity": "sha512-vjJi4vQDasD8t0kMpxe+9URAcgbSuASqoj/Wuk3MawTk97LYa2KfdHreAkd1G/pmPLMvzZEw7/OsydADNemerQ==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "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" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", + "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.91.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", + "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.16.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", + "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", + "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/react-i18n/package.json b/react-i18n/package.json new file mode 100644 index 0000000..2e4e144 --- /dev/null +++ b/react-i18n/package.json @@ -0,0 +1,38 @@ +{ + "name": "react-i18n", + "version": "0.1.0", + "private": true, + "dependencies": { + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-scripts": "5.0.1", + "web-vitals": "^2.1.4" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/react-i18n/public/favicon.ico b/react-i18n/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/react-i18n/public/index.html b/react-i18n/public/index.html new file mode 100644 index 0000000..aa069f2 --- /dev/null +++ b/react-i18n/public/index.html @@ -0,0 +1,43 @@ + + + + + + + + + + + + + React App + + + +
    + + + diff --git a/react-i18n/public/logo192.png b/react-i18n/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/react-i18n/public/manifest.json b/react-i18n/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/react-i18n/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/react-i18n/public/robots.txt b/react-i18n/public/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/react-i18n/public/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/react-i18n/src/App.css b/react-i18n/src/App.css new file mode 100644 index 0000000..74b5e05 --- /dev/null +++ b/react-i18n/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/react-i18n/src/App.js b/react-i18n/src/App.js new file mode 100644 index 0000000..3784575 --- /dev/null +++ b/react-i18n/src/App.js @@ -0,0 +1,25 @@ +import logo from './logo.svg'; +import './App.css'; + +function App() { + return ( + + ); +} + +export default App; diff --git a/react-i18n/src/App.test.js b/react-i18n/src/App.test.js new file mode 100644 index 0000000..1f03afe --- /dev/null +++ b/react-i18n/src/App.test.js @@ -0,0 +1,8 @@ +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/react-i18n/src/index.css b/react-i18n/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/react-i18n/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/react-i18n/src/index.js b/react-i18n/src/index.js new file mode 100644 index 0000000..d563c0f --- /dev/null +++ b/react-i18n/src/index.js @@ -0,0 +1,17 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; + +const root = ReactDOM.createRoot(document.getElementById('root')); +root.render( + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/react-i18n/src/logo.svg b/react-i18n/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/react-i18n/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/react-i18n/src/reportWebVitals.js b/react-i18n/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/react-i18n/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/react-i18n/src/setupTests.js b/react-i18n/src/setupTests.js new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/react-i18n/src/setupTests.js @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/src/components/ChangeBank.tsx b/src/components/ChangeBank.tsx new file mode 100644 index 0000000..2f0a9dd --- /dev/null +++ b/src/components/ChangeBank.tsx @@ -0,0 +1,112 @@ +import { UploadOutlined } from '@ant-design/icons'; +import { Button, Form, Input, Modal, Typography, Upload } from 'antd'; +import { useState } from 'react'; + +const EditBank = () => { + const [open, setOpen] = useState(true); + const onCancel = () => { + setOpen(false); + }; + + return ( + + +
    變更銀行帳戶
    +
    務必確保輸入的資料與銀行帳戶一致
    +
    +
    + } + visible={open} + destroyOnClose + width={480} + footer={null} + > + + + + + + + + + + + + + + 避免模糊/顯示完整文字資訊/勿使用經過編輯的圖片 + + +
    + +
    點擊上傳
    +
    +
    +
    +
    + + +
    + + + ); +}; + +export default EditBank; diff --git a/src/components/EditBank.tsx b/src/components/EditBank.tsx new file mode 100644 index 0000000..057ba39 --- /dev/null +++ b/src/components/EditBank.tsx @@ -0,0 +1,69 @@ +import { IoWarningOutline } from 'react-icons/io5'; +import { Button, Modal, Typography } from 'antd'; +import React from 'react'; +import SafetyVerification from '@/pages/property/components/SafetyVerification'; + +const EditBank: React.FC<{ open: boolean; onCancel: () => void }> = ({ open, onCancel }) => { + const [openTransfer, setOpenTransfer] = React.useState(false); + const [currentStep, setCurrentStep] = React.useState('login'); + const [withdrawal, setWithdrawal] = React.useState('EditBank'); + const handleNextStep = () => { + setOpenTransfer(true); + onCancel(); + }; + + return ( +
    + + + +
    注意
    +
    +
    + } + visible={open} + destroyOnClose + width={480} + footer={null} + > + 變更銀行帳戶須重新進行驗證, 期間間無法使用出金功能, 請知悉 +
    + + +
    + + { + setOpenTransfer(false); + setCurrentStep('login'); + setWithdrawal('EditBank'); + }} + currentStep={currentStep} + setCurrentStep={setCurrentStep} + withdrawal={withdrawal} + setWithdrawal={setWithdrawal} + /> +
    + ); +}; + +export default EditBank; diff --git a/src/components/EditPassword.tsx b/src/components/EditPassword.tsx index 9525616..745dd43 100644 --- a/src/components/EditPassword.tsx +++ b/src/components/EditPassword.tsx @@ -1,12 +1,133 @@ -import { Form, Input, Modal, Space } from 'antd'; -import Title from 'antd/es/skeleton/Title'; +import { Button, Form, Input, Modal, Typography } from 'antd'; import React, { useState } from 'react'; +import { EyeInvisibleOutlined } from '@ant-design/icons'; -const EditPassword: React.FC<> = () => { +const EditPassword: React.FC<{ onCancel: () => void }> = ({ onCancel }) => { + const [form] = Form.useForm(); + const [confirmDirty, setConfirmDirty] = useState(false); + const [isSuccess, setIsSuccess] = useState(false); + const [open ,setOpen] = useState(true); + + const onFinish = (values: any) => { + console.log('Received values:', values); + setIsSuccess(true); + form.resetFields(); + setTimeout(() => { + setIsSuccess(false); + onCancel(); + setOpen(false); + }, 2000); + }; + + const handleCancel = () => { + form.resetFields(); + onCancel(); + setOpen(false); + }; + + const handleConfirmBlur = (e: React.FocusEvent) => { + const { value } = e.target; + setConfirmDirty(confirmDirty || !!value); + }; + + const compareToFirstPassword = (rule: any, value: string, callback: (message?: string) => void) => { + const { form } = rule; + if (value && value !== form.getFieldValue('newPassword')) { + callback('兩次輸入的密碼不一致!'); + } else { + callback(); + } + }; + + const validateToNextPassword = (rule: any, value: string, callback: (message?: string) => void) => { + const { form } = rule; + if (value && confirmDirty) { + form.validateFields(['confirm'], { force: true }); + } + callback(); + }; return ( - - 123 + + + 變更密碼 + +
    + } + visible={open} + destroyOnClose + width={480} + footer={null} + > + {isSuccess ? ( +
    + 密碼已成功變更! +
    + ) : ( + + + } + className='rounded' + placeholder='輸入舊密碼' + /> + + + + } + className='rounded' + placeholder='輸入新密碼' + /> + + + + } + className='rounded' + placeholder='再次輸入新密碼' + onBlur={handleConfirmBlur} + /> + + + + + + + + )} ); }; diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index 6a8a0ae..40a54b1 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -4,6 +4,7 @@ import { useState } from 'react'; import UseLoading from './UseLoading'; import TransferLoading from './TransferLoading'; import EditPassword from '@/components/EditPassword'; +import ChangeBank from '@/components/ChangeBank'; interface ISafetyVerificationProps { open: boolean; @@ -45,10 +46,9 @@ const SafetyVerification: React.FunctionComponent = ({ }, 1000); }; - const sendVerificationCode = (email: string) => { - // 假設有一個函數來發送驗證碼到用戶的郵箱 - console.log(`Sending verification code to ${email}`); - }; + // const sendVerificationCode = (email: string) => { + // console.log(`Sending verification code to ${email}`); + // }; const handleVerificationSubmit = () => { // 在這裡添加提交驗證碼的邏輯 @@ -59,6 +59,9 @@ const SafetyVerification: React.FunctionComponent = ({ }else if(withdrawal === 'EditPassword'){ setCurrentStep('getPassword'); return currentStep; + }else if(withdrawal === 'EditBank'){ + setCurrentStep('ChangeBank'); + return currentStep; } setCurrentStep(withdrawal); console.log(456, currentStep); @@ -367,7 +370,8 @@ const SafetyVerification: React.FunctionComponent = ({ )} {currentStep === 'UseLoading' && } {currentStep === 'TransferLoading' && } - {currentStep === 'getPassword' && } + {currentStep === 'getPassword' && {}} />} + {currentStep === 'ChangeBank' && } ); }; diff --git a/src/pages/property/components/TransferLoading.tsx b/src/pages/property/components/TransferLoading.tsx index d8cfa35..2c26ceb 100644 --- a/src/pages/property/components/TransferLoading.tsx +++ b/src/pages/property/components/TransferLoading.tsx @@ -1,5 +1,5 @@ import { useState } from 'react'; -import { Modal, Typography, Spin, Space, message, Form, Button } from 'antd'; +import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '@/pages/PublicLayout/UserChat'; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index f24c444..c1ce59f 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -5,6 +5,7 @@ import * as React from 'react'; import logo from '../../assets/PTFintech_logo.png' import KYCModal from './components/KYCModal'; import { useState } from 'react'; +import EditBank from '@/components/EditBank'; interface IUserProps { } @@ -12,6 +13,7 @@ interface IUserProps { const User: React.FunctionComponent = (props) => { const { } = props || {}; const [OpenKYCModal, setOpenKYCModal] = useState(false); + const [OpenBank, setOpenBank] = useState(false); const genExtra = () => (
    { event.stopPropagation(); @@ -130,7 +132,7 @@ const User: React.FunctionComponent = (props) => { 變更 + } items={bankInfo_China} size='small' @@ -171,6 +173,7 @@ const User: React.FunctionComponent = (props) => {
    setOpenKYCModal(false)} /> + setOpenBank(false)} /> ); }; From 17a86120f92f719125fb7857e2e17a97c6956d87 Mon Sep 17 00:00:00 2001 From: benPeng Date: Mon, 3 Jun 2024 15:18:14 +0800 Subject: [PATCH 018/118] potai ecosystem --- ecosystem.config.cjs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 ecosystem.config.cjs diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs new file mode 100644 index 0000000..575d2c1 --- /dev/null +++ b/ecosystem.config.cjs @@ -0,0 +1,42 @@ +module.exports = { + apps: [ + { + name: 'Potai-client-DEV', + script: 'node_modules/vite/bin/vite.js', + watch: true, + wait_ready: true, + listen_timeout: 10000, + shutdown_with_message: true, + env: { + NODE_ENV: 'development', + }, + ignore_watch: [ + 'node_modules', + 'dist', + '.git', + 'public', + 'ecosystem.config.cjs', + '.env.development', + '.env.production', + '.eslintrc.cjs', + '.gitignore', + 'index.html', + 'package.json', + 'postcss.config.js', + 'tailwind.config.js', + 'todos.js', + 'yarn.lock', + ], + max_memory_restart: '300M', + time: true, + log_date_format: 'YYYY-MM-DD HH:MM Z', + error_file: '../pm2_error_log/client.json', + out_file: '../pm2_log/client.json', + merge_logs: true, + log_type: 'json', + min_uptime: 5000, + max_restarts: 3, + restart_delay: 500, + }, + ], +}; From e4c47a12e407857d45d663b495166d5406bda494 Mon Sep 17 00:00:00 2001 From: Kirito Date: Mon, 3 Jun 2024 15:19:20 +0800 Subject: [PATCH 019/118] temp --- package.json | 2 + react-i18n/.gitignore | 23 - react-i18n/README.md | 70 - react-i18n/package-lock.json | 18243 ----------------------- react-i18n/package.json | 38 - react-i18n/public/favicon.ico | Bin 3870 -> 0 bytes react-i18n/public/index.html | 43 - react-i18n/public/logo192.png | Bin 5347 -> 0 bytes react-i18n/public/logo512.png | Bin 9664 -> 0 bytes react-i18n/public/manifest.json | 25 - react-i18n/public/robots.txt | 3 - react-i18n/src/App.css | 38 - react-i18n/src/App.js | 25 - react-i18n/src/App.test.js | 8 - react-i18n/src/index.css | 13 - react-i18n/src/index.js | 17 - react-i18n/src/logo.svg | 1 - react-i18n/src/reportWebVitals.js | 13 - react-i18n/src/setupTests.js | 5 - src/I18n/I18n.ts | 29 + src/I18n/TranslationTypes.ts | 5 + src/I18n/ch/ch.ts | 9 + src/I18n/en/en.ts | 9 + src/main.tsx | 1 + src/pages/AuthLayout/AuthLayout.tsx | 8 +- src/pages/login/LoginPage.tsx | 5 + src/pages/user/components/KYCModal.tsx | 39 +- yarn.lock | 27 + 28 files changed, 104 insertions(+), 18595 deletions(-) delete mode 100644 react-i18n/.gitignore delete mode 100644 react-i18n/README.md delete mode 100644 react-i18n/package-lock.json delete mode 100644 react-i18n/package.json delete mode 100644 react-i18n/public/favicon.ico delete mode 100644 react-i18n/public/index.html delete mode 100644 react-i18n/public/logo192.png delete mode 100644 react-i18n/public/logo512.png delete mode 100644 react-i18n/public/manifest.json delete mode 100644 react-i18n/public/robots.txt delete mode 100644 react-i18n/src/App.css delete mode 100644 react-i18n/src/App.js delete mode 100644 react-i18n/src/App.test.js delete mode 100644 react-i18n/src/index.css delete mode 100644 react-i18n/src/index.js delete mode 100644 react-i18n/src/logo.svg delete mode 100644 react-i18n/src/reportWebVitals.js delete mode 100644 react-i18n/src/setupTests.js create mode 100644 src/I18n/I18n.ts create mode 100644 src/I18n/TranslationTypes.ts create mode 100644 src/I18n/ch/ch.ts create mode 100644 src/I18n/en/en.ts diff --git a/package.json b/package.json index 57311f5..cc1b5d7 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,13 @@ "antd": "^5.16.5", "axios": "^1.6.8", "dayjs": "^1.11.11", + "i18next": "^23.11.5", "localforage": "^1.10.0", "numbro": "^2.5.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-fast-marquee": "^1.6.4", + "react-i18next": "^14.1.2", "react-icons": "^5.1.0", "react-native-svg": "^15.2.0", "react-router-dom": "^6.23.0", diff --git a/react-i18n/.gitignore b/react-i18n/.gitignore deleted file mode 100644 index 4d29575..0000000 --- a/react-i18n/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/react-i18n/README.md b/react-i18n/README.md deleted file mode 100644 index 58beeac..0000000 --- a/react-i18n/README.md +++ /dev/null @@ -1,70 +0,0 @@ -# Getting Started with Create React App - -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.\ -Open [http://localhost:3000](http://localhost:3000) to view it in your browser. - -The page will reload when you make changes.\ -You may also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.\ -See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.\ -It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.\ -Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can't go back!** - -If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own. - -You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) - -### Analyzing the Bundle Size - -This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) - -### Making a Progressive Web App - -This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) - -### Advanced Configuration - -This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) - -### Deployment - -This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) - -### `npm run build` fails to minify - -This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) diff --git a/react-i18n/package-lock.json b/react-i18n/package-lock.json deleted file mode 100644 index 2d169e9..0000000 --- a/react-i18n/package-lock.json +++ /dev/null @@ -1,18243 +0,0 @@ -{ - "name": "react-i18n", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "react-i18n", - "version": "0.1.0", - "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-scripts": "5.0.1", - "web-vitals": "^2.1.4" - } - }, - "node_modules/@adobe/css-tools": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", - "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==" - }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.6.tgz", - "integrity": "sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==", - "dependencies": { - "@babel/highlight": "^7.24.6", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", - "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", - "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helpers": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/traverse": "^7.24.6", - "@babel/types": "^7.24.6", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.6.tgz", - "integrity": "sha512-Q1BfQX42zXHx732PLW0w4+Y3wJjoZKEMaatFUEAmQ7Z+jCXxinzeqX9bvv2Q8xNPes/H6F0I23oGkcgjaItmLw==", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/@babel/eslint-parser/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.6.tgz", - "integrity": "sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==", - "dependencies": { - "@babel/types": "^7.24.6", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.6.tgz", - "integrity": "sha512-DitEzDfOMnd13kZnDqns1ccmftwJTS9DMkyn9pYTxulS7bZxUxpMly3Nf23QQ6NwA4UB8lAqjbqWtyvElEMAkg==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.6.tgz", - "integrity": "sha512-+wnfqc5uHiMYtvRX7qu80Toef8BXeh4HHR1SPeonGb1SKPniNEd4a/nlaJJMv/OIEYvIVavvo0yR7u10Gqz0Iw==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", - "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", - "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.6.tgz", - "integrity": "sha512-djsosdPJVZE6Vsw3kk7IPRWethP94WHGOhQTc67SNXE0ZzMhHgALw8iGmYS0TD1bbMM0VDROy43od7/hN6WYcA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-member-expression-to-functions": "^7.24.6", - "@babel/helper-optimise-call-expression": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.6.tgz", - "integrity": "sha512-C875lFBIWWwyv6MHZUG9HmRrlTDgOsLWZfYR0nW69gaKJNe0/Mpxx5r0EID2ZdHQkdUmQo2t0uNckTL08/1BgA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.6.tgz", - "integrity": "sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.6.tgz", - "integrity": "sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==", - "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.6.tgz", - "integrity": "sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.6.tgz", - "integrity": "sha512-OTsCufZTxDUsv2/eDXanw/mUZHWOxSbEmC3pP8cgjcy5rgeVPWWMStnv274DV60JtHxTk0adT0QrCzC4M9NWGg==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.6.tgz", - "integrity": "sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.6.tgz", - "integrity": "sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.6.tgz", - "integrity": "sha512-3SFDJRbx7KuPRl8XDUr8O7GAEB8iGyWPjLKJh/ywP/Iy9WOmEfMrsWbaZpvBu2HSYn4KQygIsz0O7m8y10ncMA==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.6.tgz", - "integrity": "sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.6.tgz", - "integrity": "sha512-1Qursq9ArRZPAMOZf/nuzVW8HgJLkTB9y9LfP4lW2MVp4e9WkLJDovfKBxoDcCk6VuzIxyqWHyBoaCtSRP10yg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-wrap-function": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.6.tgz", - "integrity": "sha512-mRhfPwDqDpba8o1F8ESxsEkJMQkUF8ZIWrAc0FtWhxnjfextxMWxr22RtFizxxSYLjVHDeMgVsRq8BBZR2ikJQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-member-expression-to-functions": "^7.24.6", - "@babel/helper-optimise-call-expression": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.6.tgz", - "integrity": "sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.6.tgz", - "integrity": "sha512-jhbbkK3IUKc4T43WadP96a27oYti9gEf1LdyGSP2rHGH77kwLwfhO7TgwnWvxxQVmke0ImmCSS47vcuxEMGD3Q==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.6.tgz", - "integrity": "sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==", - "dependencies": { - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.6.tgz", - "integrity": "sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.6.tgz", - "integrity": "sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.6.tgz", - "integrity": "sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.6.tgz", - "integrity": "sha512-f1JLrlw/jbiNfxvdrfBgio/gRBk3yTAEJWirpAkiJG2Hb22E7cEYKHWo0dFPTv/niPovzIdPdEDetrv6tC6gPQ==", - "dependencies": { - "@babel/helper-function-name": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", - "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", - "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.6.tgz", - "integrity": "sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.6", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.6.tgz", - "integrity": "sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.6.tgz", - "integrity": "sha512-bYndrJ6Ph6Ar+GaB5VAc0JPoP80bQCm4qon6JEzXfRl5QZyQ8Ur1K6k7htxWmPA5z+k7JQvaMUrtXlqclWYzKw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.6.tgz", - "integrity": "sha512-iVuhb6poq5ikqRq2XWU6OQ+R5o9wF+r/or9CeUyovgptz0UlnK4/seOQ1Istu/XybYjAhQv1FRSSfHHufIku5Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.6.tgz", - "integrity": "sha512-c8TER5xMDYzzFcGqOEp9l4hvB7dcbhcGjcLVwxWfe4P5DOafdwjsBJZKsmv+o3aXh7NhopvayQIovHrh2zSRUQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/plugin-transform-optional-chaining": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.6.tgz", - "integrity": "sha512-z8zEjYmwBUHN/pCF3NuWBhHQjJCrd33qAi8MgANfMrAvn72k2cImT8VjK9LJFu4ysOLJqhfkYYb3MvwANRUNZQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.6.tgz", - "integrity": "sha512-8DjR0/DzlBhz2SVi9a19/N2U5+C3y3rseXuyoKL9SP8vnbewscj1eHZtL6kpEn4UCuUmqEo0mvqyDYRFoN2gpA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-decorators": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@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.", - "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-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.6.tgz", - "integrity": "sha512-gInH8LEqBp+wkwTVihCd/qf+4s28g81FZyvlIbAurHk9eSiItEKG7E0uNK2UdpgsD79aJVAW3R3c85h0YJ0jsw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.6.tgz", - "integrity": "sha512-gNkksSdV8RbsCoHF9sjVYrHfYACMl/8U32UfUhJ9+84/ASXw8dlx+eHyyF0m6ncQJ9IBSxfuCkB36GJqYdXTOA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.6.tgz", - "integrity": "sha512-BE6o2BogJKJImTmGpkmOic4V0hlRRxVtzqxiSPa8TIFxyhi4EFjHm08nq1M4STK4RytuLMgnSz0/wfflvGFNOg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.6.tgz", - "integrity": "sha512-D+CfsVZousPXIdudSII7RGy52+dYRtbyKAZcvtQKq/NpsivyMVduepzcLqG5pMBugtMdedxdC8Ramdpcne9ZWQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.6.tgz", - "integrity": "sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.6.tgz", - "integrity": "sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.6.tgz", - "integrity": "sha512-jSSSDt4ZidNMggcLx8SaKsbGNEfIl0PHx/4mFEulorE7bpYLbN0d3pDW3eJ7Y5Z3yPhy3L3NaPCYyTUY7TuugQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.6.tgz", - "integrity": "sha512-VEP2o4iR2DqQU6KPgizTW2mnMx6BG5b5O9iQdrW9HesLkv8GIA8x2daXBQxw1MrsIkFQGA/iJ204CKoQ8UcnAA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-remap-async-to-generator": "^7.24.6", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.6.tgz", - "integrity": "sha512-NTBA2SioI3OsHeIn6sQmhvXleSl9T70YY/hostQLveWs0ic+qvbA3fa0kwAwQ0OA/XGaAerNZRQGJyRfhbJK4g==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-remap-async-to-generator": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.6.tgz", - "integrity": "sha512-XNW7jolYHW9CwORrZgA/97tL/k05qe/HL0z/qqJq1mdWhwwCM6D4BJBV7wAz9HgFziN5dTOG31znkVIzwxv+vw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.6.tgz", - "integrity": "sha512-S/t1Xh4ehW7sGA7c1j/hiOBLnEYCp/c2sEG4ZkL8kI1xX9tW2pqJTCHKtdhe/jHKt8nG0pFCrDHUXd4DvjHS9w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.6.tgz", - "integrity": "sha512-j6dZ0Z2Z2slWLR3kt9aOmSIrBvnntWjMDN/TVcMPxhXMLmJVqX605CBRlcGI4b32GMbfifTEsdEjGjiE+j/c3A==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.6.tgz", - "integrity": "sha512-1QSRfoPI9RoLRa8Mnakc6v3e0gJxiZQTYrMfLn+mD0sz5+ndSzwymp2hDcYJTyT0MOn0yuWzj8phlIvO72gTHA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.6.tgz", - "integrity": "sha512-+fN+NO2gh8JtRmDSOB6gaCVo36ha8kfCW1nMq2Gc0DABln0VcHN4PrALDvF5/diLzIRKptC7z/d7Lp64zk92Fg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.6.tgz", - "integrity": "sha512-cRzPobcfRP0ZtuIEkA8QzghoUpSB3X3qSH5W2+FzG+VjWbJXExtx0nbRqwumdBN1x/ot2SlTNQLfBCnPdzp6kg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/template": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.6.tgz", - "integrity": "sha512-YLW6AE5LQpk5npNXL7i/O+U9CE4XsBCuRPgyjl1EICZYKmcitV+ayuuUGMJm2lC1WWjXYszeTnIxF/dq/GhIZQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.6.tgz", - "integrity": "sha512-rCXPnSEKvkm/EjzOtLoGvKseK+dS4kZwx1HexO3BtRtgL0fQ34awHn34aeSHuXtZY2F8a1X8xqBBPRtOxDVmcA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.6.tgz", - "integrity": "sha512-/8Odwp/aVkZwPFJMllSbawhDAO3UJi65foB00HYnK/uXvvCPm0TAXSByjz1mpRmp0q6oX2SIxpkUOpPFHk7FLA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.6.tgz", - "integrity": "sha512-vpq8SSLRTBLOHUZHSnBqVo0AKX3PBaoPs2vVzYVWslXDTDIpwAcCDtfhUcHSQQoYoUvcFPTdC8TZYXu9ZnLT/w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.6.tgz", - "integrity": "sha512-EemYpHtmz0lHE7hxxxYEuTYOOBZ43WkDgZ4arQ4r+VX9QHuNZC+WH3wUWmRNvR8ECpTRne29aZV6XO22qpOtdA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.6.tgz", - "integrity": "sha512-inXaTM1SVrIxCkIJ5gqWiozHfFMStuGbGJAxZFBoHcRRdDP0ySLb3jH6JOwmfiinPwyMZqMBX+7NBDCO4z0NSA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.6.tgz", - "integrity": "sha512-1l8b24NoCpaQ13Vi6FtLG1nv6kNoi8PWvQb1AYO7GHZDpFfBYc3lbXArx1lP2KRt8b4pej1eWc/zrRmsQTfOdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-flow": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.6.tgz", - "integrity": "sha512-n3Sf72TnqK4nw/jziSqEl1qaWPbCRw2CziHH+jdRYvw4J6yeCzsj4jdw8hIntOEeDGTmHVe2w4MVL44PN0GMzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.6.tgz", - "integrity": "sha512-sOajCu6V0P1KPljWHKiDq6ymgqB+vfo3isUS4McqW1DZtvSVU2v/wuMhmRmkg3sFoq6GMaUUf8W4WtoSLkOV/Q==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.6.tgz", - "integrity": "sha512-Uvgd9p2gUnzYJxVdBLcU0KurF8aVhkmVyMKW4MIY1/BByvs3EBpv45q01o7pRTVmTvtQq5zDlytP3dcUgm7v9w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.6.tgz", - "integrity": "sha512-f2wHfR2HF6yMj+y+/y07+SLqnOSwRp8KYLpQKOzS58XLVlULhXbiYcygfXQxJlMbhII9+yXDwOUFLf60/TL5tw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.6.tgz", - "integrity": "sha512-EKaWvnezBCMkRIHxMJSIIylzhqK09YpiJtDbr2wsXTwnO0TxyjMUkaw4RlFIZMIS0iDj0KyIg7H7XCguHu/YDA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.6.tgz", - "integrity": "sha512-9g8iV146szUo5GWgXpRbq/GALTnY+WnNuRTuRHWWFfWGbP9ukRL0aO/jpu9dmOPikclkxnNsjY8/gsWl6bmZJQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.6.tgz", - "integrity": "sha512-eAGogjZgcwqAxhyFgqghvoHRr+EYRQPFjUXrTYKBRb5qPnAVxOOglaxc4/byHqjvq/bqO2F3/CGwTHsgKJYHhQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.6.tgz", - "integrity": "sha512-JEV8l3MHdmmdb7S7Cmx6rbNEjRCgTQMZxllveHO0mx6uiclB0NflCawlQQ6+o5ZrwjUBYPzHm2XoK4wqGVUFuw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-simple-access": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.6.tgz", - "integrity": "sha512-xg1Z0J5JVYxtpX954XqaaAT6NpAY6LtZXvYFCJmGFJWwtlz2EmJoR8LycFRGNE8dBKizGWkGQZGegtkV8y8s+w==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.6.tgz", - "integrity": "sha512-esRCC/KsSEUvrSjv5rFYnjZI6qv4R1e/iHQrqwbZIoRJqk7xCvEUiN7L1XrmW5QSmQe3n1XD88wbgDTWLbVSyg==", - "dependencies": { - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.6.tgz", - "integrity": "sha512-6DneiCiu91wm3YiNIGDWZsl6GfTTbspuj/toTEqLh9d4cx50UIzSdg+T96p8DuT7aJOBRhFyaE9ZvTHkXrXr6Q==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.6.tgz", - "integrity": "sha512-f8liz9JG2Va8A4J5ZBuaSdwfPqN6axfWRK+y66fjKYbwf9VBLuq4WxtinhJhvp1w6lamKUwLG0slK2RxqFgvHA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.6.tgz", - "integrity": "sha512-+QlAiZBMsBK5NqrBWFXCYeXyiU1y7BQ/OYaiPAcQJMomn5Tyg+r5WuVtyEuvTbpV7L25ZSLfE+2E9ywj4FD48A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.6.tgz", - "integrity": "sha512-6voawq8T25Jvvnc4/rXcWZQKKxUNZcKMS8ZNrjxQqoRFernJJKjE3s18Qo6VFaatG5aiX5JV1oPD7DbJhn0a4Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.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-transform-object-rest-spread": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.6.tgz", - "integrity": "sha512-OKmi5wiMoRW5Smttne7BwHM8s/fb5JFs+bVGNSeHWzwZkWXWValR1M30jyXo1s/RaqgwwhEC62u4rFH/FBcBPg==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.6.tgz", - "integrity": "sha512-N/C76ihFKlZgKfdkEYKtaRUtXZAgK7sOY4h2qrbVbVTXPrKGIi8aww5WGe/+Wmg8onn8sr2ut6FXlsbu/j6JHg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-replace-supers": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.6.tgz", - "integrity": "sha512-L5pZ+b3O1mSzJ71HmxSCmTVd03VOT2GXOigug6vDYJzE5awLI7P1g0wFcdmGuwSDSrQ0L2rDOe/hHws8J1rv3w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.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-transform-optional-chaining": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.6.tgz", - "integrity": "sha512-cHbqF6l1QP11OkYTYQ+hhVx1E017O5ZcSPXk9oODpqhcAD1htsWG2NpHrrhthEO2qZomLK0FXS+u7NfrkF5aOQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.6.tgz", - "integrity": "sha512-ST7guE8vLV+vI70wmAxuZpIKzVjvFX9Qs8bl5w6tN/6gOypPWUmMQL2p7LJz5E63vEGrDhAiYetniJFyBH1RkA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.6.tgz", - "integrity": "sha512-T9LtDI0BgwXOzyXrvgLTT8DFjCC/XgWLjflczTLXyvxbnSR/gpv0hbmzlHE/kmh9nOvlygbamLKRo6Op4yB6aw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.6.tgz", - "integrity": "sha512-Qu/ypFxCY5NkAnEhCF86Mvg3NSabKsh/TPpBVswEdkGl7+FbsYHy1ziRqJpwGH4thBdQHh8zx+z7vMYmcJ7iaQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.6.tgz", - "integrity": "sha512-oARaglxhRsN18OYsnPTpb8TcKQWDYNsPNmTnx5++WOAsUJ0cSC/FZVlIJCKvPbU4yn/UXsS0551CFKJhN0CaMw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.6.tgz", - "integrity": "sha512-vQfyXRtG/kNIcTYRd/49uJnwvMig9X3R4XsTVXRml2RFupZFY+2RDuK+/ymb+MfX2WuIHAgUZc2xEvQrnI7QCg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.6.tgz", - "integrity": "sha512-/3iiEEHDsJuj9QU09gbyWGSUxDboFcD7Nj6dnHIlboWSodxXAoaY/zlNMHeYAC0WsERMqgO9a7UaM77CsYgWcg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.6.tgz", - "integrity": "sha512-pCtPHhpRZHfwdA5G1Gpk5mIzMA99hv0R8S/Ket50Rw+S+8hkt3wBWqdqHaPw0CuUYxdshUgsPiLQ5fAs4ASMhw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-jsx": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.6.tgz", - "integrity": "sha512-F7EsNp5StNDouSSdYyDSxh4J+xvj/JqG+Cb6s2fA+jCyHOzigG5vTwgH8tU2U8Voyiu5zCG9bAK49wTr/wPH0w==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.6.tgz", - "integrity": "sha512-0HoDQlFJJkXRyV2N+xOpUETbKHcouSwijRQbKWVtxsPoq5bbB30qZag9/pSc5xcWVYjTHlLsBsY+hZDnzQTPNw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.6.tgz", - "integrity": "sha512-SMDxO95I8WXRtXhTAc8t/NFQUT7VYbIWwJCJgEli9ml4MhqUMh4S6hxgH6SmAC3eAQNWCDJFxcFeEt9w2sDdXg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.6.tgz", - "integrity": "sha512-DcrgFXRRlK64dGE0ZFBPD5egM2uM8mgfrvTMOSB2yKzOtjpGegVYkzh3s1zZg1bBck3nkXiaOamJUqK3Syk+4A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.6.tgz", - "integrity": "sha512-W3gQydMb0SY99y/2lV0Okx2xg/8KzmZLQsLaiCmwNRl1kKomz14VurEm+2TossUb+sRvBCnGe+wx8KtIgDtBbQ==", - "dependencies": { - "@babel/helper-module-imports": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.6.tgz", - "integrity": "sha512-xnEUvHSMr9eOWS5Al2YPfc32ten7CXdH7Zwyyk7IqITg4nX61oHj+GxpNvl+y5JHjfN3KXE2IV55wAWowBYMVw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.6.tgz", - "integrity": "sha512-h/2j7oIUDjS+ULsIrNZ6/TKG97FgmEk1PXryk/HQq6op4XUUUwif2f69fJrzK0wza2zjCS1xhXmouACaWV5uPA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.6.tgz", - "integrity": "sha512-fN8OcTLfGmYv7FnDrsjodYBo1DhPL3Pze/9mIIE2MGCT1KgADYIOD7rEglpLHZj8PZlC/JFX5WcD+85FLAQusw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.6.tgz", - "integrity": "sha512-BJbEqJIcKwrqUP+KfUIkxz3q8VzXe2R8Wv8TaNgO1cx+nNavxn/2+H8kp9tgFSOL6wYPPEgFvU6IKS4qoGqhmg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.6.tgz", - "integrity": "sha512-IshCXQ+G9JIFJI7bUpxTE/oA2lgVLAIK8q1KdJNoPXOpvRaNjMySGuvLfBw/Xi2/1lLo953uE8hyYSDW3TSYig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.6.tgz", - "integrity": "sha512-H0i+hDLmaYYSt6KU9cZE0gb3Cbssa/oxWis7PX4ofQzbvsfix9Lbh8SRk7LCPDlLWJHUiFeHU0qRRpF/4Zv7mQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.6", - "@babel/helper-create-class-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/plugin-syntax-typescript": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.6.tgz", - "integrity": "sha512-bKl3xxcPbkQQo5eX9LjjDpU2xYHeEeNQbOhj0iPvetSzA+Tu9q/o5lujF4Sek60CM6MgYvOS/DJuwGbiEYAnLw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.6.tgz", - "integrity": "sha512-8EIgImzVUxy15cZiPii9GvLZwsy7Vxc+8meSlR3cXFmBIl5W5Tn9LGBf7CDKkHj4uVfNXCJB8RsVfnmY61iedA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.6.tgz", - "integrity": "sha512-pssN6ExsvxaKU638qcWb81RrvvgZom3jDgU/r5xFZ7TONkZGFf4MhI2ltMb8OcQWhHyxgIavEU+hgqtbKOmsPA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.6.tgz", - "integrity": "sha512-quiMsb28oXWIDK0gXLALOJRXLgICLiulqdZGOaPPd0vRT7fQp74NtdADAVu+D8s00C+0Xs0MxVP0VKF/sZEUgw==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.6.tgz", - "integrity": "sha512-CrxEAvN7VxfjOG8JNF2Y/eMqMJbZPZ185amwGUBp8D9USK90xQmv7dLdFSa+VbD7fdIqcy/Mfv7WtzG8+/qxKg==", - "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.6", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.6", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.6", - "@babel/plugin-syntax-import-attributes": "^7.24.6", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.6", - "@babel/plugin-transform-async-generator-functions": "^7.24.6", - "@babel/plugin-transform-async-to-generator": "^7.24.6", - "@babel/plugin-transform-block-scoped-functions": "^7.24.6", - "@babel/plugin-transform-block-scoping": "^7.24.6", - "@babel/plugin-transform-class-properties": "^7.24.6", - "@babel/plugin-transform-class-static-block": "^7.24.6", - "@babel/plugin-transform-classes": "^7.24.6", - "@babel/plugin-transform-computed-properties": "^7.24.6", - "@babel/plugin-transform-destructuring": "^7.24.6", - "@babel/plugin-transform-dotall-regex": "^7.24.6", - "@babel/plugin-transform-duplicate-keys": "^7.24.6", - "@babel/plugin-transform-dynamic-import": "^7.24.6", - "@babel/plugin-transform-exponentiation-operator": "^7.24.6", - "@babel/plugin-transform-export-namespace-from": "^7.24.6", - "@babel/plugin-transform-for-of": "^7.24.6", - "@babel/plugin-transform-function-name": "^7.24.6", - "@babel/plugin-transform-json-strings": "^7.24.6", - "@babel/plugin-transform-literals": "^7.24.6", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.6", - "@babel/plugin-transform-member-expression-literals": "^7.24.6", - "@babel/plugin-transform-modules-amd": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.6", - "@babel/plugin-transform-modules-systemjs": "^7.24.6", - "@babel/plugin-transform-modules-umd": "^7.24.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.6", - "@babel/plugin-transform-new-target": "^7.24.6", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.6", - "@babel/plugin-transform-numeric-separator": "^7.24.6", - "@babel/plugin-transform-object-rest-spread": "^7.24.6", - "@babel/plugin-transform-object-super": "^7.24.6", - "@babel/plugin-transform-optional-catch-binding": "^7.24.6", - "@babel/plugin-transform-optional-chaining": "^7.24.6", - "@babel/plugin-transform-parameters": "^7.24.6", - "@babel/plugin-transform-private-methods": "^7.24.6", - "@babel/plugin-transform-private-property-in-object": "^7.24.6", - "@babel/plugin-transform-property-literals": "^7.24.6", - "@babel/plugin-transform-regenerator": "^7.24.6", - "@babel/plugin-transform-reserved-words": "^7.24.6", - "@babel/plugin-transform-shorthand-properties": "^7.24.6", - "@babel/plugin-transform-spread": "^7.24.6", - "@babel/plugin-transform-sticky-regex": "^7.24.6", - "@babel/plugin-transform-template-literals": "^7.24.6", - "@babel/plugin-transform-typeof-symbol": "^7.24.6", - "@babel/plugin-transform-unicode-escapes": "^7.24.6", - "@babel/plugin-transform-unicode-property-regex": "^7.24.6", - "@babel/plugin-transform-unicode-regex": "^7.24.6", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.6", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.6.tgz", - "integrity": "sha512-8mpzh1bWvmINmwM3xpz6ahu57mNaWavMm+wBNjQ4AFu1nghKBiIRET7l/Wmj4drXany/BBGjJZngICcD98F1iw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-transform-react-display-name": "^7.24.6", - "@babel/plugin-transform-react-jsx": "^7.24.6", - "@babel/plugin-transform-react-jsx-development": "^7.24.6", - "@babel/plugin-transform-react-pure-annotations": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.6.tgz", - "integrity": "sha512-U10aHPDnokCFRXgyT/MaIRTivUu2K/mu0vJlwRS9LxJmJet+PFQNKpggPyFCUtC6zWSBPjvxjnpNkAn3Uw2m5w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "@babel/plugin-syntax-jsx": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.6", - "@babel/plugin-transform-typescript": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.6.tgz", - "integrity": "sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.6.tgz", - "integrity": "sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==", - "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.6.tgz", - "integrity": "sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==", - "dependencies": { - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-environment-visitor": "^7.24.6", - "@babel/helper-function-name": "^7.24.6", - "@babel/helper-hoist-variables": "^7.24.6", - "@babel/helper-split-export-declaration": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/types": "^7.24.6", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.6.tgz", - "integrity": "sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==", - "dependencies": { - "@babel/helper-string-parser": "^7.24.6", - "@babel/helper-validator-identifier": "^7.24.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@csstools/normalize.css": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", - "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==" - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.10" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.15", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.15.tgz", - "integrity": "sha512-LFWllMA55pzB9D34w/wXUCf8+c+IYKuJDgxiZ3qMhl64KRMBHYM1I3VdGaD2BV5FNPV2/S2596bppxHbv2ZydQ==", - "dependencies": { - "ansi-html": "^0.0.9", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^4.2.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <5.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x || 5.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", - "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@testing-library/dom": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", - "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "peer": true - }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", - "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", - "dependencies": { - "@adobe/css-tools": "^4.0.1", - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", - "@types/react-dom": "^18.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", - "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.1.3", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/react/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/react/node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/react/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/react/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/user-event": { - "version": "13.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", - "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", - "dependencies": { - "@babel/runtime": "^7.12.5" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - }, - "peerDependencies": { - "@testing-library/dom": ">=7.21.4" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/aria-query": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", - "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.3", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.3.tgz", - "integrity": "sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.12", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", - "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/jest/node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - }, - "node_modules/@types/jest/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@types/jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@types/jest/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/jest/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@types/jest/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@types/jest/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, - "node_modules/@types/jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" - }, - "node_modules/@types/node": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.0.tgz", - "integrity": "sha512-5cHBxFGJx6L4s56Bubp4fglrEpmyJypsqI6RgzMfBHWUJQGWAAi8cWcgetEbZXHYXo9C2Fa4EEds/uSyS4cxmA==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" - }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==" - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" - }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.9", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", - "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/trusted-types": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", - "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz", - "integrity": "sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-array-method-boxes-properly": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/ast-types-flow": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", - "dependencies": { - "dequal": "^2.0.3" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10", - "npm": ">=6" - } - }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/bfj": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", - "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", - "dependencies": { - "bluebird": "^3.7.2", - "check-types": "^11.2.3", - "hoopy": "^0.1.4", - "jsonpath": "^1.1.1", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001626", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001626.tgz", - "integrity": "sha512-JRW7kAH8PFJzoPCJhLSHgDgKg5348hsQ68aqb+slnzuB5QFERv846oA/mRChmlLAOdEDeOkRn3ynb1gSFnjt3w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/check-types": { - "version": "11.2.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", - "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==" - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==" - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", - "dependencies": { - "browserslist": "^4.23.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", - "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "node_modules/cssdb": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", - "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - } - ] - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "node_modules/deep-equal": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.5", - "es-get-iterator": "^1.1.3", - "get-intrinsic": "^1.2.2", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "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==", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.788", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.788.tgz", - "integrity": "sha512-ubp5+Ev/VV8KuRoWnfP2QF2Bg+O2ZFdb49DiiNbz2VmgkIqrnyYaqIOqj8A6K/3p1xV0QcU5hBQ1+BmB6ot1OA==" - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz", - "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==" - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", - "array.prototype.flatmap": "^1.3.2", - "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", - "jsx-ast-utils": "^3.3.5", - "language-tags": "^1.0.9", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.34.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz", - "integrity": "sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.hasown": "^1.1.4", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", - "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", - "dependencies": { - "@typescript-eslint/utils": "^5.58.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/eslint/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/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==" - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jackspeak": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.1.2.tgz", - "integrity": "sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpath": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", - "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", - "dependencies": { - "esprima": "1.2.2", - "static-eval": "2.0.2", - "underscore": "1.12.1" - } - }, - "node_modules/jsonpath/node_modules/esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" - }, - "node_modules/language-tags": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", - "dependencies": { - "language-subtag-registry": "^0.3.20" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", - "bin": { - "lz-string": "bin/bin.js" - } - }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "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/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz", - "integrity": "sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", - "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", - "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "gopd": "^1.0.1", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "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" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/postcss-load-config/node_modules/yaml": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.3.tgz", - "integrity": "sha512-sntgmxj8o7DE7g/Qi60cqpLBA3HG3STcDA0kO+WfB05jEKhZMbY7umNm2rBpQvsmZ16/lPXCJGW2672dgOUkrg==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", - "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.11" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "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==" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-app-polyfill/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/react-dev-utils/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-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.2.tgz", - "integrity": "sha512-vjJi4vQDasD8t0kMpxe+9URAcgbSuASqoj/Wuk3MawTk97LYa2KfdHreAkd1G/pmPLMvzZEw7/OsydADNemerQ==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", - "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==" - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/scheduler": { - "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" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead" - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" - }, - "node_modules/static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "dependencies": { - "escodegen": "^1.8.1" - } - }, - "node_modules/static-eval/node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/static-eval/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/static-eval/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/static-eval/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-eval/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", - "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sucrase/node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "node_modules/tailwindcss": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", - "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-vitals": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", - "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==" - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.91.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.91.0.tgz", - "integrity": "sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.16.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-background-sync": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", - "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", - "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-build": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", - "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.6.0", - "workbox-broadcast-update": "6.6.0", - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-google-analytics": "6.6.0", - "workbox-navigation-preload": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-range-requests": "6.6.0", - "workbox-recipes": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0", - "workbox-streams": "6.6.0", - "workbox-sw": "6.6.0", - "workbox-window": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", - "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", - "deprecated": "workbox-background-sync@6.6.0", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-core": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", - "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==" - }, - "node_modules/workbox-expiration": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", - "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", - "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", - "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", - "dependencies": { - "workbox-background-sync": "6.6.0", - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", - "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-precaching": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", - "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", - "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-recipes": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", - "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", - "dependencies": { - "workbox-cacheable-response": "6.6.0", - "workbox-core": "6.6.0", - "workbox-expiration": "6.6.0", - "workbox-precaching": "6.6.0", - "workbox-routing": "6.6.0", - "workbox-strategies": "6.6.0" - } - }, - "node_modules/workbox-routing": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", - "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-strategies": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", - "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", - "dependencies": { - "workbox-core": "6.6.0" - } - }, - "node_modules/workbox-streams": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", - "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", - "dependencies": { - "workbox-core": "6.6.0", - "workbox-routing": "6.6.0" - } - }, - "node_modules/workbox-sw": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", - "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==" - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", - "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", - "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.6.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/react-i18n/package.json b/react-i18n/package.json deleted file mode 100644 index 2e4e144..0000000 --- a/react-i18n/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "react-i18n", - "version": "0.1.0", - "private": true, - "dependencies": { - "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^13.5.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-scripts": "5.0.1", - "web-vitals": "^2.1.4" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - } -} diff --git a/react-i18n/public/favicon.ico b/react-i18n/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/react-i18n/public/index.html b/react-i18n/public/index.html deleted file mode 100644 index aa069f2..0000000 --- a/react-i18n/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - React App - - - -
    - - - diff --git a/react-i18n/public/logo192.png b/react-i18n/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/react-i18n/public/manifest.json b/react-i18n/public/manifest.json deleted file mode 100644 index 080d6c7..0000000 --- a/react-i18n/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/react-i18n/public/robots.txt b/react-i18n/public/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/react-i18n/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/react-i18n/src/App.css b/react-i18n/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/react-i18n/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/react-i18n/src/App.js b/react-i18n/src/App.js deleted file mode 100644 index 3784575..0000000 --- a/react-i18n/src/App.js +++ /dev/null @@ -1,25 +0,0 @@ -import logo from './logo.svg'; -import './App.css'; - -function App() { - return ( - - ); -} - -export default App; diff --git a/react-i18n/src/App.test.js b/react-i18n/src/App.test.js deleted file mode 100644 index 1f03afe..0000000 --- a/react-i18n/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/react-i18n/src/index.css b/react-i18n/src/index.css deleted file mode 100644 index ec2585e..0000000 --- a/react-i18n/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/react-i18n/src/index.js b/react-i18n/src/index.js deleted file mode 100644 index d563c0f..0000000 --- a/react-i18n/src/index.js +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; - -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( - - - -); - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); diff --git a/react-i18n/src/logo.svg b/react-i18n/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/react-i18n/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/react-i18n/src/reportWebVitals.js b/react-i18n/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/react-i18n/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/react-i18n/src/setupTests.js b/react-i18n/src/setupTests.js deleted file mode 100644 index 8f2609b..0000000 --- a/react-i18n/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/src/I18n/I18n.ts b/src/I18n/I18n.ts new file mode 100644 index 0000000..4922188 --- /dev/null +++ b/src/I18n/I18n.ts @@ -0,0 +1,29 @@ +// i18n.ts + +import i18n from 'i18next'; +import { initReactI18next } from 'react-i18next'; +import en from './en/en'; +import ch from './ch/ch'; + +const resources = { + ch: { + translation:ch + }, + en: { + translation: en + }, + cc: { + translation: en + }, +}; + +i18n.use(initReactI18next).init({ + resources, + lng: 'ch', + fallbackLng: 'ch', + interpolation: { + escapeValue: false, // React already does escaping + }, +}); + +export default i18n; diff --git a/src/I18n/TranslationTypes.ts b/src/I18n/TranslationTypes.ts new file mode 100644 index 0000000..153c1e6 --- /dev/null +++ b/src/I18n/TranslationTypes.ts @@ -0,0 +1,5 @@ +export type Translation = { + language: string; + hello: string; + welcome: string; +}; diff --git a/src/I18n/ch/ch.ts b/src/I18n/ch/ch.ts new file mode 100644 index 0000000..1df9618 --- /dev/null +++ b/src/I18n/ch/ch.ts @@ -0,0 +1,9 @@ +import { Translation } from '../TranslationTypes'; + +const ch: Translation = { + language:'繁體中文', + hello: '你好', + welcome: '哩後' +}; + +export default ch; diff --git a/src/I18n/en/en.ts b/src/I18n/en/en.ts new file mode 100644 index 0000000..93e0b75 --- /dev/null +++ b/src/I18n/en/en.ts @@ -0,0 +1,9 @@ +import { Translation } from '../TranslationTypes'; + +const en: Translation = { + language:'English', + hello: 'Hello', + welcome: 'Welcome to my app' +}; + +export default en; diff --git a/src/main.tsx b/src/main.tsx index 4624a99..d497ba4 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -8,6 +8,7 @@ import AppRouter from './pages/AppRouter'; import FallbackLoading from './components/FallbackLoading'; import NotifyProvider from './components/NotifyProvider'; import { useThemeStore } from './store'; +import './I18n/I18n'; const App: React.FunctionComponent = () => { const queryClient = new QueryClient(); diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 27df57d..d83f2f3 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { Layout, Dropdown, Switch } from 'antd'; import { GlobalOutlined } from '@ant-design/icons'; import { Outlet } from 'react-router-dom'; @@ -7,6 +7,8 @@ import AuthImg from '../../assets/authbg.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; import UseFooter from './components/UseFooter'; import UserChat from '../PublicLayout/UserChat'; +import { I18nContext, useTranslation } from 'react-i18next'; + const { Header, Footer, Content } = Layout; @@ -46,6 +48,9 @@ const layoutStyle: React.CSSProperties = { const AuthLayout: React.FC = () => { const { isDark, setIsDark } = useThemeStore(); // 将钩子放在组件的顶层 + const { t, i18n } = useTranslation(); + console.log(t) + return (
    @@ -63,6 +68,7 @@ const AuthLayout: React.FC = () => { backgroundColor: 'rgb(31, 31, 31)', }} > +

    {t('hello')}

    = (props) => { const {} = props || {}; const [remember, setRemember] = useState(false); +// const { t, i18n } = useTranslation(); // mutation const { mutate: login, isPending: underLogin } = useLogin({ isTest: false }); @@ -23,6 +25,9 @@ const LoginPage: React.FunctionComponent = (props) => { }, }} > + {/* {/*

    {t('hello')}

    + * + */} 登入
    = ({ open, onCancel }) = }} > { await waitTime(1000); return true; }} > - - - } /> - } /> + + } /> + } /> + } /> + } /> 務必確保輸入的資料,與身分證件資訊一致}> - + - @@ -102,7 +84,6 @@ const KYCModal: React.FunctionComponent = ({ open, onCancel }) = - @@ -110,8 +91,8 @@ const KYCModal: React.FunctionComponent = ({ open, onCancel }) = Date: Mon, 3 Jun 2024 18:38:41 +0800 Subject: [PATCH 020/118] i18n --- ecosystem.config.cjs | 2 ++ src/I18n/I18n.ts | 17 ++++++++---- src/I18n/TranslationTypes.ts | 2 +- src/I18n/ch/ch.ts | 2 +- src/I18n/en/en.ts | 2 +- src/pages/AuthLayout/AuthLayout.tsx | 40 ++++++++++++++++++----------- src/pages/login/RegisterPage.tsx | 11 +++++--- 7 files changed, 50 insertions(+), 26 deletions(-) diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 575d2c1..9dda22a 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -1,3 +1,5 @@ +// pm2 start ecosystem.config.cjs + module.exports = { apps: [ { diff --git a/src/I18n/I18n.ts b/src/I18n/I18n.ts index 4922188..369171d 100644 --- a/src/I18n/I18n.ts +++ b/src/I18n/I18n.ts @@ -7,23 +7,30 @@ import ch from './ch/ch'; const resources = { ch: { - translation:ch + translation: ch, + language:'繁體中文', + family:'chinese' }, en: { - translation: en + translation: en, + language:'English', + family:'English' }, cc: { - translation: en + translation: en, + language:'English', + family:'English' }, }; + i18n.use(initReactI18next).init({ resources, lng: 'ch', fallbackLng: 'ch', interpolation: { - escapeValue: false, // React already does escaping + escapeValue: false, }, }); -export default i18n; +export default { i18n, resources }; diff --git a/src/I18n/TranslationTypes.ts b/src/I18n/TranslationTypes.ts index 153c1e6..ba06c45 100644 --- a/src/I18n/TranslationTypes.ts +++ b/src/I18n/TranslationTypes.ts @@ -1,5 +1,5 @@ export type Translation = { language: string; - hello: string; + register: string; welcome: string; }; diff --git a/src/I18n/ch/ch.ts b/src/I18n/ch/ch.ts index 1df9618..d92880b 100644 --- a/src/I18n/ch/ch.ts +++ b/src/I18n/ch/ch.ts @@ -2,7 +2,7 @@ import { Translation } from '../TranslationTypes'; const ch: Translation = { language:'繁體中文', - hello: '你好', + register: '註冊', welcome: '哩後' }; diff --git a/src/I18n/en/en.ts b/src/I18n/en/en.ts index 93e0b75..ac7b407 100644 --- a/src/I18n/en/en.ts +++ b/src/I18n/en/en.ts @@ -2,7 +2,7 @@ import { Translation } from '../TranslationTypes'; const en: Translation = { language:'English', - hello: 'Hello', + register: 'Register', welcome: 'Welcome to my app' }; diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index d83f2f3..dace38c 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from 'react'; +import React from 'react'; import { Layout, Dropdown, Switch } from 'antd'; import { GlobalOutlined } from '@ant-design/icons'; import { Outlet } from 'react-router-dom'; @@ -7,8 +7,7 @@ import AuthImg from '../../assets/authbg.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; import UseFooter from './components/UseFooter'; import UserChat from '../PublicLayout/UserChat'; -import { I18nContext, useTranslation } from 'react-i18next'; - +import { useTranslation } from 'react-i18next'; const { Header, Footer, Content } = Layout; @@ -47,9 +46,29 @@ const layoutStyle: React.CSSProperties = { }; const AuthLayout: React.FC = () => { - const { isDark, setIsDark } = useThemeStore(); // 将钩子放在组件的顶层 + const { isDark, setIsDark } = useThemeStore(); const { t, i18n } = useTranslation(); - console.log(t) + const changeLanguage = (lng: any) => { + i18n.changeLanguage(lng); + }; + const resourcesData = i18n.options.resources; + const items = []; + for (let key in resourcesData) { + const newKey: any = resourcesData[key].language; + items.push({ + key: key, + value: resourcesData[key], + label: ( + + ), + }); + } + console.log(items) return ( @@ -68,7 +87,6 @@ const AuthLayout: React.FC = () => { backgroundColor: 'rgb(31, 31, 31)', }} > -

    {t('hello')}

    { onChange={(newValue) => setIsDark(newValue)} /> - +
    diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 98840f3..06cfc95 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -5,6 +5,7 @@ import { Alert, Button, Card, Checkbox, Form, Input, Select, Typography } from ' import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import UserChat from '../PublicLayout/UserChat'; +import { useTranslation } from 'react-i18next'; const { Title, Text } = Typography; @@ -49,10 +50,14 @@ const RegisterPage = () => { userPhone: '', userEmail: '', }); + const { t, i18n } = useTranslation(); + const changeLanguage = (lng: any) => { + i18n.changeLanguage(lng); + }; const countryCodes = [ - { value: '+1', label: '美國 (+1)' }, - { value: '+886', label: '台灣 (+886)' }, + { value: '+886', label:
    changeLanguage('ch')}>{'台灣(+886)'}
    }, + { value: '+1', label:
    changeLanguage('en')}>{'美國 (+1)'}
    }, ]; const handleClick = () => { @@ -104,7 +109,7 @@ const RegisterPage = () => {
    {currentStep === 'register' && ( <> - 註冊 + {t('register')}
    Date: Thu, 13 Jun 2024 13:46:07 +0800 Subject: [PATCH 021/118] vi --- src/I18n/I18n.ts | 9 +- .../TranslationTypes.ts | 4 +- src/I18n/TranslationTypes/components/auth.ts | 38 + src/I18n/ch/ch.ts | 7 +- src/I18n/ch/components/auth.ts | 40 + src/I18n/en/components/auth.ts | 39 + src/I18n/en/en.ts | 7 +- src/I18n/vi/components/auth.ts | 39 + src/I18n/vi/vi.ts | 10 + src/assets/PTFintech_final2-02.png | Bin 0 -> 33399 bytes src/components/AccountChart.tsx | 3 +- .../InvestmentMarket/InvestmentMarket.tsx | 5 +- src/components/ProtectBanner.tsx | 2 +- src/components/TradingPlatform.tsx | 4 +- src/pages/AuthLayout/AuthLayout.tsx | 44 +- src/pages/AuthLayout/components/UseFooter.tsx | 224 +++--- src/pages/AuthLayout/styles.module.scss | 32 - src/pages/PublicLayout/PublicLayout.tsx | 691 ++++++++++-------- src/pages/PublicLayout/styles.module.scss | 1 - src/pages/login/LoginPage.tsx | 11 +- src/pages/login/RegisterPage.tsx | 19 +- src/pages/property/components/USDTLoading.tsx | 4 +- src/store/index.ts | 3 +- src/store/useI18nStore.ts | 32 + 24 files changed, 767 insertions(+), 501 deletions(-) rename src/I18n/{ => TranslationTypes}/TranslationTypes.ts (55%) create mode 100644 src/I18n/TranslationTypes/components/auth.ts create mode 100644 src/I18n/ch/components/auth.ts create mode 100644 src/I18n/en/components/auth.ts create mode 100644 src/I18n/vi/components/auth.ts create mode 100644 src/I18n/vi/vi.ts create mode 100644 src/assets/PTFintech_final2-02.png delete mode 100644 src/pages/AuthLayout/styles.module.scss create mode 100644 src/store/useI18nStore.ts diff --git a/src/I18n/I18n.ts b/src/I18n/I18n.ts index 369171d..50e1496 100644 --- a/src/I18n/I18n.ts +++ b/src/I18n/I18n.ts @@ -4,6 +4,7 @@ import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import en from './en/en'; import ch from './ch/ch'; +import vi from './vi/vi'; const resources = { ch: { @@ -16,10 +17,10 @@ const resources = { language:'English', family:'English' }, - cc: { - translation: en, - language:'English', - family:'English' + vi: { + translation: vi, + language:'Tiếng Việt', + family:'Tiếng Việt' }, }; diff --git a/src/I18n/TranslationTypes.ts b/src/I18n/TranslationTypes/TranslationTypes.ts similarity index 55% rename from src/I18n/TranslationTypes.ts rename to src/I18n/TranslationTypes/TranslationTypes.ts index ba06c45..6948763 100644 --- a/src/I18n/TranslationTypes.ts +++ b/src/I18n/TranslationTypes/TranslationTypes.ts @@ -1,5 +1,7 @@ +import { auth } from './components/auth' + export type Translation = { - language: string; register: string; welcome: string; + auth : auth; }; diff --git a/src/I18n/TranslationTypes/components/auth.ts b/src/I18n/TranslationTypes/components/auth.ts new file mode 100644 index 0000000..509bff0 --- /dev/null +++ b/src/I18n/TranslationTypes/components/auth.ts @@ -0,0 +1,38 @@ +export type auth = { + 登入: String, + 登出: String, + 註冊: String, + 歡迎登入: String, + 請確認您正在訪問: String, + 忘記密碼僅能以原註冊電話查詢: String, + 請輸入原註冊電話號碼進行手機簡訊驗證: String, + 國碼: String, + 手機: String, + 密碼: String, + 驗證碼: String, + 發送: String, + 檢查密碼: String, + 設定密碼: String, + 是否滿20歲: String, + 隱私權條款: String, + 驗證成功: String, + 已發送驗證碼: String, + 註冊成功: String, + 忘記密碼: String, + 此手機尚未註冊: String, + 請輸入新密碼: String, + 重設密碼: String, + 電子信箱: String, + 記住我: String, + 還沒有張戶前往註冊: String, + 姓名: String, + 用戶名稱: String, + 電話號碼: String, + 我已閱讀並同意: String, + 下一步: String, + 已有帳號前往登入: String, + 驗證電子信箱: String, + 重發驗證碼: String, + 嘗試多次仍無法收到驗證碼: String, + }; + \ No newline at end of file diff --git a/src/I18n/ch/ch.ts b/src/I18n/ch/ch.ts index d92880b..1b60632 100644 --- a/src/I18n/ch/ch.ts +++ b/src/I18n/ch/ch.ts @@ -1,9 +1,10 @@ -import { Translation } from '../TranslationTypes'; +import { Translation } from '../TranslationTypes/TranslationTypes'; +import auth from './components/auth' const ch: Translation = { - language:'繁體中文', register: '註冊', - welcome: '哩後' + welcome: '哩後', + auth: auth, }; export default ch; diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts new file mode 100644 index 0000000..a79fc10 --- /dev/null +++ b/src/I18n/ch/components/auth.ts @@ -0,0 +1,40 @@ +const auth = { + 登入: '登入', + 登出: '登出', + 註冊: '註冊', + 歡迎登入: '歡迎登入', + 請確認您正在訪問: '請確認您正在訪問 k100u.com', + 忘記密碼僅能以原註冊電話查詢: '忘記密碼僅能以原註冊電話查詢...', + 請輸入原註冊電話號碼進行手機簡訊驗證: '請輸入原註冊電話號碼,進行手機簡訊驗證', + 國碼: '國碼', + 手機: '手機', + 密碼: '密碼', + 驗證碼: '驗證碼', + 發送: '發送', + 檢查密碼: '檢查密碼', + 設定密碼: '設定密碼', + 是否滿20歲: '是否滿20歲', + 隱私權條款: '隱私權條款', + 驗證成功: '驗證成功', + 已發送驗證碼: '已發送驗證碼', + 註冊成功: '註冊成功', + 忘記密碼: '忘記密碼', + 此手機尚未註冊: '此手機尚未註冊', + 請輸入新密碼: '請輸入新密碼', + 重設密碼: '重設密碼', + 電子信箱: '電子信箱', + 記住我: '記住我', + 還沒有張戶前往註冊: '還沒有張戶? 前往註冊', + 姓名: '姓名', + 用戶名稱: '用戶名稱', + 電話號碼: '電話號碼', + 我已閱讀並同意: '我已閱讀並同意', + 下一步: '下一步', + 已有帳號前往登入: '已有帳號? 前往登入', + 驗證電子信箱: '驗證電子信箱', + 重發驗證碼: '重發驗證碼', + 嘗試多次仍無法收到驗證碼: '嘗試多次仍無法收到驗證碼', + }; + + export default auth; + \ No newline at end of file diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts new file mode 100644 index 0000000..3b69144 --- /dev/null +++ b/src/I18n/en/components/auth.ts @@ -0,0 +1,39 @@ +const auth = { + 登入: '登入', + 登出: '登出', + 註冊: '註冊', + 歡迎登入: '歡迎登入', + 請確認您正在訪問: '請確認您正在訪問 k100u.com', + 忘記密碼僅能以原註冊電話查詢: '忘記密碼僅能以原註冊電話查詢...', + 請輸入原註冊電話號碼進行手機簡訊驗證: '請輸入原註冊電話號碼,進行手機簡訊驗證', + 國碼: '國碼', + 手機: '手機', + 密碼: '密碼', + 驗證碼: '驗證碼', + 發送: '發送', + 檢查密碼: '檢查密碼', + 設定密碼: '設定密碼', + 是否滿20歲: '是否滿20歲', + 隱私權條款: '隱私權條款', + 驗證成功: '驗證成功', + 已發送驗證碼: '已發送驗證碼', + 註冊成功: '註冊成功', + 忘記密碼: '忘記密碼', + 此手機尚未註冊: '此手機尚未註冊', + 請輸入新密碼: '請輸入新密碼', + 重設密碼: '重設密碼', + 電子信箱: '電子信箱', + 記住我: '記住我', + 還沒有張戶前往註冊: '還沒有張戶? 前往註冊', + 姓名: '姓名', + 用戶名稱: '用戶名稱', + 電話號碼: '電話號碼', + 我已閱讀並同意: '我已閱讀並同意', + 下一步: '下一步', + 已有帳號前往登入: '已有帳號? 前往登入', + 驗證電子信箱: '驗證電子信箱', + 重發驗證碼: '重發驗證碼', + 嘗試多次仍無法收到驗證碼: '嘗試多次仍無法收到驗證碼', +}; + +export default auth; diff --git a/src/I18n/en/en.ts b/src/I18n/en/en.ts index ac7b407..e20a863 100644 --- a/src/I18n/en/en.ts +++ b/src/I18n/en/en.ts @@ -1,9 +1,10 @@ -import { Translation } from '../TranslationTypes'; +import { Translation } from '../TranslationTypes/TranslationTypes'; +import auth from './components/auth' const en: Translation = { - language:'English', register: 'Register', - welcome: 'Welcome to my app' + welcome: 'Welcome to my app', + auth: auth, }; export default en; diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts new file mode 100644 index 0000000..24bfab8 --- /dev/null +++ b/src/I18n/vi/components/auth.ts @@ -0,0 +1,39 @@ +const auth = { + 登入: 'Đăng nhập', + 登出: 'Đăng xuất', + 註冊: 'Đăng ký', + 歡迎登入: 'Chào mừng đăng nhập', + 請確認您正在訪問: 'Vui lòng xác nhận bạn đang truy cập vào k100u.com', + 忘記密碼僅能以原註冊電話查詢: 'Nếu quên mật khẩu bạn chỉ có thể kiểm tra bằng số điện thoại đã đăng ký ban đầu…', + 請輸入原註冊電話號碼進行手機簡訊驗證: 'Vui lòng nhập số điện thoại đăng ký ban đầu để xác minh qua SMS', + 國碼: 'Mã quốc gia', + 手機: 'Số điện thoại', + 密碼: 'Mật khẩu', + 驗證碼: 'Mã xác minh', + 發送: 'Gửi', + 檢查密碼: 'Kiểm tra mật khẩu', + 設定密碼: 'Cài đặt mật khẩu', + 是否滿20歲: 'Đủ 20 tuổi hay không?', + 隱私權條款: 'Chính sách bảo mật', + 驗證成功: 'Xác minh thành công', + 已發送驗證碼: 'Đã gửi mã phát minh', + 註冊成功: 'Đăng ký thành công', + 忘記密碼: 'Quên mật khẩu', + 此手機尚未註冊: 'Số điện thoại này chưa đăng ký', + 請輸入新密碼: 'Vui lòng nhập mật khẩu mới', + 重設密碼: 'Đặt lại mật khẩu', + 電子信箱: 'Email', + 記住我: 'Ghi nhớ', + 還沒有張戶前往註冊: 'Chưa có tài khoản? Đi tới Đăng ký', + 姓名: 'Họ tên', + 用戶名稱: 'Tên người dùng', + 電話號碼: 'Số điện thoại', + 我已閱讀並同意: 'Tôi đã đọc và đồng ý', + 下一步: 'Tiếp tục', + 已有帳號前往登入: 'Đã có tài khoản? Đi tới Đăng nhập', + 驗證電子信箱: 'Xác minh email', + 重發驗證碼: 'Gửi lại mã xác minh', + 嘗試多次仍無法收到驗證碼: 'Vẫn không nhận được mã xác minh dù đã thử nhiều lần', +}; + +export default auth; diff --git a/src/I18n/vi/vi.ts b/src/I18n/vi/vi.ts new file mode 100644 index 0000000..f77e0f7 --- /dev/null +++ b/src/I18n/vi/vi.ts @@ -0,0 +1,10 @@ +import { Translation } from '../TranslationTypes/TranslationTypes'; +import auth from './components/auth' + +const vi: Translation = { + register: 'Register', + welcome: 'Welcome to my app', + auth: auth, +}; + +export default vi; diff --git a/src/assets/PTFintech_final2-02.png b/src/assets/PTFintech_final2-02.png new file mode 100644 index 0000000000000000000000000000000000000000..4d8fe3f744b966fc82e07fe290d2722254b815a4 GIT binary patch literal 33399 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 literal 0 HcmV?d00001 diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index 25862f4..6dcba2e 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -47,7 +47,8 @@ const AccountChart: React.FunctionComponent = (props) => { color: '#fff', }, }, - radius: 0.8, + radius: 1.1, + innerRadius: 0.6, padding: 'auto', data, angleField: 'value', diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index 49d815e..708ad6f 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -1,6 +1,5 @@ -import React, { useState } from 'react'; -import { ProCard } from '@ant-design/pro-card'; -import { Card, Input, Table, Tabs } from 'antd'; +import { useState } from 'react'; +import { Input, Tabs } from 'antd'; import Title from 'antd/lib/typography/Title'; import HotInvestMents from '../../pages/HotInvestMents/HotInvestMents'; diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 13fc861..8d77fec 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -1,6 +1,6 @@ import { Avatar, Button, Card, Col, Row, Space, Statistic, Typography } from 'antd'; import React, { useState } from 'react'; -import { CheckOutlined, CloseOutlined } from '@ant-design/icons'; +import { CheckOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import { StatisticCard } from '@ant-design/pro-components'; import KYCModal from '@/pages/user/components/KYCModal'; diff --git a/src/components/TradingPlatform.tsx b/src/components/TradingPlatform.tsx index 55f4624..ca5d40d 100644 --- a/src/components/TradingPlatform.tsx +++ b/src/components/TradingPlatform.tsx @@ -4,7 +4,7 @@ import { Link } from 'react-router-dom'; const App = () => { const menu = ( - +
    { className='flex newMd:flex-col md:flex-row flex-col gap-8 newMd:justify-center pl-[30px] my-[30px] text-4 border-white newMd:border-t-0 newMd:border-l border-t pt-8 newMd:pt-0 - flex-wrap w-[342px] md:w-full' + flex-wrap sm:w-[350px] w-[244px] md:w-full' >
    { const { isDark, setIsDark } = useThemeStore(); const { t, i18n } = useTranslation(); + const { language, setLanguage } = useI18nStore(); + + const oldChangeLanguage = (language: any) => { + i18n.changeLanguage(language); + }; + useEffect(() => { + oldChangeLanguage(language); + }, []); + const changeLanguage = (lng: any) => { + setLanguage(lng); i18n.changeLanguage(lng); }; const resourcesData = i18n.options.resources; @@ -60,15 +67,15 @@ const AuthLayout: React.FC = () => { value: resourcesData[key], label: ( ), }); } - console.log(items) return ( @@ -84,15 +91,24 @@ const AuthLayout: React.FC = () => { width: '100%', position: 'fixed', zIndex: '10', - backgroundColor: 'rgb(31, 31, 31)', }} + className={isDark ? 'bg-black' : 'bg-white'} >
    - + {isDark === true && ( + PT_logo_ + )} + {isDark === false && ( + PT_logo_ + )}
    ( -
    -
    - PT Logo -
    - - -
    -
    投資市場
    -
      -
    • 貨幣
    • -
    • 指數
    • -
    • 股票
    • -
    • 大宗商品
    • -
    • 加密貨幣
    • -
    - -
    -
    幫助中心
    -
      -
    • 如何入金
    • -
    • 如何出金
    • -
    • 如何開立帳戶
    • -
    • 如何驗證帳戶
    • -
    - -
    -
    關於我們
    -
      -
    • 簡介
    • -
    • 最新公告
    • -
    - -
    -
    隱私和法規
    -
      -
    • 客戶協議書
    • -
    • 風險紕漏聲明
    • -
    • 免責協議
    • -
    • 保密協議
    • -
    - -
    - Google Play - - - App Store - - - -
    -
    - 進行差價合約(CFD)交易存在損失風險,您的投資價值可能會有波動。差價合約為複雜的金融產品,由於槓桿作用而存在迅速虧損的高風險。請您在交易前充分了解差價合約產品的運作方式,並評估自己能否承擔資金損失的高風險。 -
    -
    - 宝泰Fintech 通過瓦努阿圖共和國金融服務委員會完成註冊並受其監管,牌照號:40361,註冊辦事處:1st Floor, B & P - House, Kumul Highway, Portvila, Vanuatu。 +const UseFooter = () => { + const { isDark } = useThemeStore(); + + return ( +
    +
    +
    + {isDark === true && ( + PT Logo + )} + + {isDark === false && ( +
    + + PT_logo_ +
    + )} +
    + + +
    +
    投資市場
    +
      +
    • 貨幣
    • +
    • 指數
    • +
    • 股票
    • +
    • 大宗商品
    • +
    • 加密貨幣
    • +
    + +
    +
    幫助中心
    +
      +
    • 如何入金
    • +
    • 如何出金
    • +
    • 如何開立帳戶
    • +
    • 如何驗證帳戶
    • +
    + +
    +
    關於我們
    +
      +
    • 簡介
    • +
    • 最新公告
    • +
    + +
    +
    隱私和法規
    +
      +
    • 客戶協議書
    • +
    • 風險紕漏聲明
    • +
    • 免責協議
    • +
    • 保密協議
    • +
    + +
    + Google Play + + + App Store + + + +
    +
    + 進行差價合約(CFD)交易存在損失風險,您的投資價值可能會有波動。差價合約為複雜的金融產品,由於槓桿作用而存在迅速虧損的高風險。請您在交易前充分了解差價合約產品的運作方式,並評估自己能否承擔資金損失的高風險。 +
    +
    + 宝泰Fintech 通過瓦努阿圖共和國金融服務委員會完成註冊並受其監管,牌照號:40361,註冊辦事處:1st Floor, B & P + House, Kumul Highway, Portvila, Vanuatu。 +
    +
    + +
    + Copyright © 2023 宝泰 Fintech. All rights reserved. +
    - -
    - Copyright © 2023 宝泰 Fintech. All rights reserved. -
    - -); + ); +}; export default UseFooter; diff --git a/src/pages/AuthLayout/styles.module.scss b/src/pages/AuthLayout/styles.module.scss deleted file mode 100644 index ae71b77..0000000 --- a/src/pages/AuthLayout/styles.module.scss +++ /dev/null @@ -1,32 +0,0 @@ -.layout { - min-height: 100vh; - min-width: 100vw; - display: grid; - grid-auto-rows: 1fr 11fr; - grid-auto-columns: 1fr 11fr; - grid-template-rows: 1fr 11fr; - grid-template-columns: 1fr 11fr; - gap: 10px; -} - - -.header { - border: 2px solid rgb(0, 124, 128); - grid-column: 1 / span 2 ; - grid-row: 1; - height: 100%; -} - -.sider { - border: 2px solid rgb(10, 57, 119); - grid-column: 1; - grid-row: 2; -} - - -.content { - border: 2px solid rgb(19, 0, 128); - grid-column: 2 ; - grid-row: 2 ; -} - diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 337e34e..3a3eb2a 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -1,24 +1,10 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Link, Outlet } from 'react-router-dom'; import { ProLayout, PageContainer } from '@ant-design/pro-components'; import { HiChat } from 'react-icons/hi'; import { CiAlignRight } from 'react-icons/ci'; import { MdOutlineCurrencyExchange } from 'react-icons/md'; -import { - Switch, - Avatar, - Badge, - Button, - Col, - Divider, - Dropdown, - List, - Popover, - Row, - Space, - MenuProps, - Modal, -} from 'antd'; +import { Switch, Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space, Modal, Menu } from 'antd'; import { ApartmentOutlined, BellFilled, @@ -35,29 +21,20 @@ import { UserOutlined, } from '@ant-design/icons'; import AccountChart from '@/components/AccountChart'; -import { useThemeStore } from '@/store'; +import { useI18nStore, useThemeStore } from '@/store'; import UserChat from './UserChat'; import PT_logo from '../../assets/PTFintech_logo.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; +import PT_logo_2 from '../../assets/PTFintech_final2-02.png'; import AD_USDTpay from '../../assets/AD_USDTpay.png'; import AddAccount from '../../components/AddAccount'; import TradingPlatform from '../../components/TradingPlatform'; import UseFooter from '../AuthLayout/components/UseFooter'; +import { useTranslation } from 'react-i18next'; +import './styles.module.scss'; interface IPublicLayoutProps {} -const HeaderTitle = () => ( -
    - - PT_logo_ - - -
    -); const FooterRender = () => (
    ( const PublicLayout: React.FunctionComponent = () => { const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); + const [collapsed, setCollapsed] = useState(false); const [UseAccountChart, setUseAccountChart] = useState(''); + const [scrollListenerEnabled, setScrollListenerEnabled] = useState(true); const { isDark, setIsDark } = useThemeStore(); + const { t, i18n } = useTranslation(); + const { language, setLanguage } = useI18nStore(); + + const oldChangeLanguage = (language: any) => { + i18n.changeLanguage(language); + }; + useEffect(() => { + oldChangeLanguage(language); + }, []); + + useEffect(() => { + const handleScroll = () => { + if (window.scrollY > 60 && window.innerWidth < 768) { + setCollapsed(true); + } else { + setCollapsed(false); + } + }; + + if (scrollListenerEnabled) { + window.addEventListener('scroll', handleScroll); + } else { + window.removeEventListener('scroll', handleScroll); + } + + return () => { + window.removeEventListener('scroll', handleScroll); + }; + }, [scrollListenerEnabled]); + + const HeaderTitle = () => ( +
    + + {isDark === true && ( + PT_logo_ + )} + {isDark === false && ( + PT_logo_ + )} + + +
    + ); + const changeLanguage = (lng: any) => { + setLanguage(lng); + console.log(language); + i18n.changeLanguage(lng); + }; + const resourcesData = i18n.options.resources; + const items: { key: string; value: any; label: JSX.Element }[] = []; + for (let key in resourcesData) { + const newKey: any = resourcesData[key].language; + items.push({ + key: key, + value: resourcesData[key], + label: ( + + ), + }); + } const route = { routes: [ @@ -152,7 +205,17 @@ const PublicLayout: React.FunctionComponent = () => { icon: , children: [ { path: '/帳戶報表', name: 帳戶報表 }, - { path: '/資產報表', name: 資產報表 }, + { + path: '/資產報表', + name: ( + + 資產報表 + + ), + }, ], }, { @@ -166,317 +229,305 @@ const PublicLayout: React.FunctionComponent = () => { { path: '/', name: '工具' }, ], }, - { key: '優惠活動', path: '/', name: '優惠活動', icon: }, - { key: '交易社區', path: '/', name: '交易社區', icon: }, - ], - }; - - const data = [{ title: 'Title 1' }, { title: 'Title 2' }, { title: 'Title 3' }, { title: 'Title 4' }]; + { key: '優惠活動', path: '/', name: + '優惠活動', icon: }, + { key: '交易社區', path: '/', name: '交易社區', icon: }, + ], + }; - const notifyPanel = ( - ( - - {items.title}} /> - - )} - /> - ); - const watchAccountChart = () => { - setUseAccountChart('UseAccountChart'); - }; - const items: MenuProps['items'] = [ - { - key: '1', - label: ( - - ), - }, - { - key: '2', - label: ( - } - /> - ), - }, - ]; + const data = [{ title: 'Title 1' }, { title: 'Title 2' }, { title: 'Title 3' }, { title: 'Title 4' }]; - return ( - <> - setUseAccountChart('')} - footer={null} - > -
    - setUseAccountChart('')} /> -
    -
    -
    -
    - } - /> - , -
    -
    - - - -
    -
    + const notifyPanel = ( + ( + + {items.title}} /> + + )} + /> + ); + const watchAccountChart = () => { + setUseAccountChart('UseAccountChart'); + }; - - - - - + return ( + <> + setUseAccountChart('')} + footer={null} + > +
    + setUseAccountChart('')} />
    - } - // 右上 - avatarProps={{ - render: () => ( -
    -
    - - -
    總價值
    -
    $ 0.00
    - - + + + } + /> + + + } + > + + +
    +
    + + + + + +
    + } + avatarProps={{ + render: () => ( +
    +
    + + +
    總價值
    +
    $ 0.00
    + +
    + ), + }, + { + key: '通知', + label: ( + +
    + + 通知 +
    +
    + ), + }, + { + key: '語言', + label: ( + +
    + + 語言 +
    +
    + ), + }, + { + key: '顯示', + label: ( +
    + setIsDark(newValue)} + key='switch' + /> + 顯示 +
    + ), + }, + ], + }} + placement='topRight' + overlayClassName='bg-transparent' > - - - - , - - - - , - setIsDark(newValue)} - key='switch' - /> - , -
    -
    + + +
    -
    總價值
    -
    $ 0.00
    - - + +
    歡迎登入!用戶名稱
    + +
    - , - label: 用戶資訊, - }, - { - key: '登出', - icon: , - label: '登出', - }, - ], - }} - > - -
    歡迎登入!用戶名稱
    - -
    -
    - - ), - }} - menuFooterRender={FooterRender} - route={route} - > - window.history.back()} + ), + }} + menuFooterRender={FooterRender} + collapsed={collapsed} + route={route} > - -
    - - - -
    - -
    - -
    - - - - - - setIsAddAccountVisible(false)} - /> - - ); -}; + window.history.back()} + > + + + + + +
    + +
    + +
    + + + + + + setIsAddAccountVisible(false)} + /> + + ); + }; -export default PublicLayout; + export default PublicLayout; diff --git a/src/pages/PublicLayout/styles.module.scss b/src/pages/PublicLayout/styles.module.scss index 8e8e4c6..9664e10 100644 --- a/src/pages/PublicLayout/styles.module.scss +++ b/src/pages/PublicLayout/styles.module.scss @@ -29,4 +29,3 @@ grid-column: 2 ; grid-row: 2 ; } - diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index baa01e7..fc8ac77 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -2,7 +2,7 @@ import { useLogin } from '@/api'; import { Link } from 'react-router-dom'; import { useState } from 'react'; import { Button, Card, Checkbox, Form, Input, Typography } from 'antd'; -// import { useTranslation } from 'react-i18next'; +import { useTranslation } from 'react-i18next'; const { Title, Text } = Typography; @@ -10,13 +10,13 @@ interface ILoginPageProps {} const LoginPage: React.FunctionComponent = (props) => { const {} = props || {}; const [remember, setRemember] = useState(false); -// const { t, i18n } = useTranslation(); + const { t, i18n } = useTranslation(); // mutation const { mutate: login, isPending: underLogin } = useLogin({ isTest: false }); return ( = (props) => { {/* {/*

    {t('hello')}

    * */} - 登入 + {t('auth.登入')} login(values)} > { const [disabled, setDisabled] = useState(false); const [countdown, setCountdown] = useState('3:00'); const [successVisible, setSuccessVisible] = useState(false); + const { setLanguage } = useI18nStore(); const navigate = useNavigate(); // 使用 useNavigate 來獲取導航函數 @@ -51,7 +53,10 @@ const RegisterPage = () => { userEmail: '', }); const { t, i18n } = useTranslation(); + + const changeLanguage = (lng: any) => { + setLanguage(lng); i18n.changeLanguage(lng); }; @@ -105,12 +110,12 @@ const RegisterPage = () => { }; return ( - +
    {currentStep === 'register' && ( <> {t('register')} -
    +
    { )} { )} { )}
    { 姓名 {userData.userName}
    -
    +
    電話號碼 @@ -321,7 +326,7 @@ const RegisterPage = () => {
    void; +} + +// 從 localStorage 中讀取語言設置,如果沒有則使用預設值 '繁體中文' +const initLanguage = localStorage.getItem('language') || 'ch'; + +const useI18nStore = create((set) => { + return { + language: initLanguage, // 使用 localStorage 中的語言設置作為初始語言 + setLanguage: (language) => { + if (language === '繁體中文') { + set((origin) => { + const pureState = { ...origin }; + pureState.language = language; + return pureState; + }); + } else { + set({ language }); + } + localStorage.setItem('language', language || 'ch'); + }, + }; +}); + +export { useI18nStore }; From 29d138ff9a663fff9e1b615f6a38c75e86c4aa10 Mon Sep 17 00:00:00 2001 From: kirito_li Date: Thu, 13 Jun 2024 15:31:46 +0800 Subject: [PATCH 022/118] success message --- src/I18n/TranslationTypes/components/auth.ts | 8 +- src/I18n/ch/components/auth.ts | 10 +- src/I18n/en/components/auth.ts | 8 +- src/I18n/vi/components/auth.ts | 8 +- src/pages/login/LoginPage.tsx | 71 +++++++++----- src/pages/login/RegisterPage.tsx | 95 ++++++++----------- .../components/SafetyVerification.tsx | 3 +- 7 files changed, 107 insertions(+), 96 deletions(-) diff --git a/src/I18n/TranslationTypes/components/auth.ts b/src/I18n/TranslationTypes/components/auth.ts index 509bff0..57f7bf7 100644 --- a/src/I18n/TranslationTypes/components/auth.ts +++ b/src/I18n/TranslationTypes/components/auth.ts @@ -10,8 +10,8 @@ export type auth = { 手機: String, 密碼: String, 驗證碼: String, - 發送: String, - 檢查密碼: String, + 送出: String, + 確認密碼: String, 設定密碼: String, 是否滿20歲: String, 隱私權條款: String, @@ -24,13 +24,13 @@ export type auth = { 重設密碼: String, 電子信箱: String, 記住我: String, - 還沒有張戶前往註冊: String, + 還沒有帳戶前往: String, 姓名: String, 用戶名稱: String, 電話號碼: String, 我已閱讀並同意: String, 下一步: String, - 已有帳號前往登入: String, + 已有帳戶前往: String, 驗證電子信箱: String, 重發驗證碼: String, 嘗試多次仍無法收到驗證碼: String, diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index a79fc10..e90e5c9 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -10,13 +10,13 @@ const auth = { 手機: '手機', 密碼: '密碼', 驗證碼: '驗證碼', - 發送: '發送', - 檢查密碼: '檢查密碼', + 送出: '發送', + 確認密碼: '確認密碼', 設定密碼: '設定密碼', 是否滿20歲: '是否滿20歲', 隱私權條款: '隱私權條款', 驗證成功: '驗證成功', - 已發送驗證碼: '已發送驗證碼', + 已發送驗證碼: '已發送驗證碼至', 註冊成功: '註冊成功', 忘記密碼: '忘記密碼', 此手機尚未註冊: '此手機尚未註冊', @@ -24,13 +24,13 @@ const auth = { 重設密碼: '重設密碼', 電子信箱: '電子信箱', 記住我: '記住我', - 還沒有張戶前往註冊: '還沒有張戶? 前往註冊', + 還沒有帳戶前往: '還沒有帳戶? 前往', 姓名: '姓名', 用戶名稱: '用戶名稱', 電話號碼: '電話號碼', 我已閱讀並同意: '我已閱讀並同意', 下一步: '下一步', - 已有帳號前往登入: '已有帳號? 前往登入', + 已有帳戶前往: '已有帳戶? 前往', 驗證電子信箱: '驗證電子信箱', 重發驗證碼: '重發驗證碼', 嘗試多次仍無法收到驗證碼: '嘗試多次仍無法收到驗證碼', diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index 3b69144..e007626 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -10,8 +10,8 @@ const auth = { 手機: '手機', 密碼: '密碼', 驗證碼: '驗證碼', - 發送: '發送', - 檢查密碼: '檢查密碼', + 送出: '發送', + 確認密碼: '檢查密碼', 設定密碼: '設定密碼', 是否滿20歲: '是否滿20歲', 隱私權條款: '隱私權條款', @@ -24,13 +24,13 @@ const auth = { 重設密碼: '重設密碼', 電子信箱: '電子信箱', 記住我: '記住我', - 還沒有張戶前往註冊: '還沒有張戶? 前往註冊', + 還沒有帳戶前往: '還沒有帳戶? 前往', 姓名: '姓名', 用戶名稱: '用戶名稱', 電話號碼: '電話號碼', 我已閱讀並同意: '我已閱讀並同意', 下一步: '下一步', - 已有帳號前往登入: '已有帳號? 前往登入', + 已有帳戶前往: '已有帳戶? 前往', 驗證電子信箱: '驗證電子信箱', 重發驗證碼: '重發驗證碼', 嘗試多次仍無法收到驗證碼: '嘗試多次仍無法收到驗證碼', diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts index 24bfab8..f248406 100644 --- a/src/I18n/vi/components/auth.ts +++ b/src/I18n/vi/components/auth.ts @@ -10,8 +10,8 @@ const auth = { 手機: 'Số điện thoại', 密碼: 'Mật khẩu', 驗證碼: 'Mã xác minh', - 發送: 'Gửi', - 檢查密碼: 'Kiểm tra mật khẩu', + 送出: 'Gửi', + 確認密碼: 'Kiểm tra mật khẩu', 設定密碼: 'Cài đặt mật khẩu', 是否滿20歲: 'Đủ 20 tuổi hay không?', 隱私權條款: 'Chính sách bảo mật', @@ -24,13 +24,13 @@ const auth = { 重設密碼: 'Đặt lại mật khẩu', 電子信箱: 'Email', 記住我: 'Ghi nhớ', - 還沒有張戶前往註冊: 'Chưa có tài khoản? Đi tới Đăng ký', + 還沒有帳戶前往: 'Chưa có tài khoản? Đi tới ', 姓名: 'Họ tên', 用戶名稱: 'Tên người dùng', 電話號碼: 'Số điện thoại', 我已閱讀並同意: 'Tôi đã đọc và đồng ý', 下一步: 'Tiếp tục', - 已有帳號前往登入: 'Đã có tài khoản? Đi tới Đăng nhập', + 已有帳戶前往: 'Đã có tài khoản? Đi tới ', 驗證電子信箱: 'Xác minh email', 重發驗證碼: 'Gửi lại mã xác minh', 嘗試多次仍無法收到驗證碼: 'Vẫn không nhận được mã xác minh dù đã thử nhiều lần', diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index fc8ac77..e0edfd0 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -1,33 +1,51 @@ import { useLogin } from '@/api'; -import { Link } from 'react-router-dom'; +import { Link, useNavigate } from 'react-router-dom'; import { useState } from 'react'; -import { Button, Card, Checkbox, Form, Input, Typography } from 'antd'; +import { Button, Card, Checkbox, Form, Input, Typography, notification } from 'antd'; import { useTranslation } from 'react-i18next'; const { Title, Text } = Typography; interface ILoginPageProps {} + const LoginPage: React.FunctionComponent = (props) => { const {} = props || {}; const [remember, setRemember] = useState(false); const { t, i18n } = useTranslation(); + const navigate = useNavigate(); + // mutation - const { mutate: login, isPending: underLogin } = useLogin({ isTest: false }); + const { mutate: login, isPending: underLogin } = useLogin({ + isTest: false, + onSuccess: () => { + notification.success({ + message: '登入成功', + description: '您已成功登入,將跳轉至首頁。', + placement: 'bottom', + duration: 3, + }); + setTimeout(() => { + navigate('/'); + }, 3000); + }, + onError: () => { + notification.error({ + message: '登入失敗', + description: '登入過程中發生錯誤,請重試。', + placement: 'bottom', + }); + }, + }); return ( - {/* {/*

    {t('hello')}

    - * - */} {t('auth.登入')} = (props) => { onFinish={(values) => login(values)} > @@ -46,20 +64,22 @@ const LoginPage: React.FunctionComponent = (props) => { /> - { - setRemember(e.target.checked); - }} - > - 記住我 - +
    + { + setRemember(e.target.checked); + }} + > + {t('auth.記住我')} + +
    - 還沒有帳戶前往註冊 + {t('auth.還沒有帳戶前往')} + {t('auth.註冊')}
    ); diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 244a99a..e5c3579 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -1,7 +1,7 @@ import { useRegister, useSendVerificationCode, onSetPasswordFinish } from '@/api'; import { useTestMutation } from '@/utils'; import { ExclamationCircleOutlined } from '@ant-design/icons'; -import { Alert, Button, Card, Checkbox, Form, Input, Select, Typography } from 'antd'; +import { Alert, Button, Card, Checkbox, Form, Input, Select, Typography, notification } from 'antd'; import { useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import UserChat from '../PublicLayout/UserChat'; @@ -16,7 +16,6 @@ const RegisterPage = () => { const [currentStep, setCurrentStep] = useState('register'); // 'register', 'verify', 'setPassword' const [disabled, setDisabled] = useState(false); const [countdown, setCountdown] = useState('3:00'); - const [successVisible, setSuccessVisible] = useState(false); const { setLanguage } = useI18nStore(); const navigate = useNavigate(); // 使用 useNavigate 來獲取導航函數 @@ -41,8 +40,22 @@ const RegisterPage = () => { } = useTestMutation({ mutationFn: (values) => onSetPasswordFinish(values, navigate), // 傳遞 navigate 給 onSetPasswordFinish onSuccess: () => { - setCurrentStep('login'); - setSuccessVisible(true); // 設置成功提示可見 + notification.success({ + message: '註冊成功', + description: '您已成功註冊,將跳轉至登入頁面。', + placement: 'bottom', + duration: 3, + }); + setTimeout(() => { + navigate('/auth/loginPage'); + }, 3000); + }, + onError: () => { + notification.error({ + message: '註冊失敗', + description: '註冊過程中發生錯誤,請重試。', + placement: 'bottom', + }); }, }); @@ -54,7 +67,6 @@ const RegisterPage = () => { }); const { t, i18n } = useTranslation(); - const changeLanguage = (lng: any) => { setLanguage(lng); i18n.changeLanguage(lng); @@ -114,7 +126,7 @@ const RegisterPage = () => {
    {currentStep === 'register' && ( <> - {t('register')} + {t('auth.註冊')}
    { onFinish={onRegisterFinish} > @@ -151,7 +163,7 @@ const RegisterPage = () => {
    {
    @@ -191,7 +203,7 @@ const RegisterPage = () => { onChange={(e) => setChecked(e.target.checked)} > - 我已閱讀並同意客戶協議書 + {t('auth.我已閱讀並同意')}客戶協議書 風險披露聲明 免責聲明 保密協議 @@ -205,23 +217,23 @@ const RegisterPage = () => { htmlType='submit' disabled={!checked} > - 下一步 + {t('auth.下一步')} - 已有帳戶前往登入 + {t('auth.已有帳戶前往')}{t('auth.登入')} )} {currentStep === 'verify' && ( <> - 驗證電子信箱 + {t('auth.驗證電子信箱')} - 已發送驗證碼至{userData.userEmail} + {t('auth.已發送驗證碼')}{userData.userEmail} {sendCodeError && ( { )}
    @@ -255,7 +267,7 @@ const RegisterPage = () => { style={{ width: '100%' }} htmlType='submit' > - 送出 + {t('auth.送出')} ) : ( @@ -270,21 +282,21 @@ const RegisterPage = () => { sendVerificationCode(userData.userEmail); }} > - {disabled ? `請等待 ${countdown} 秒,重新寄送` : '寄送驗證碼'} + {disabled ? `請等待 ${countdown} 秒,重新寄送` : `${t('auth.重發驗證碼')}`} )} - 嘗試多次仍無法收到驗證碼? - + {t('auth.嘗試多次仍無法收到驗證碼')} + )} {currentStep === 'setPassword' && ( <> - 設定密碼 + {t('auth.設定密碼')} { )}
    { gap: 5, }} > - 姓名 + {t('auth.姓名')} {userData.userName}
    -
    +
    - 電話號碼 + {t('auth.電話號碼')} {userData.userCountryCode} {userData.userPhone}
    - 電子信箱 + {t('auth.電子信箱')} {userData.userEmail}
    { style={{ width: '100%' }} htmlType='submit' > - 設置密碼 + {t('auth.設定密碼')} )}
    - {successVisible && ( -
    - 成功} - description='註冊成功' - type='success' - showIcon - style={{ display: 'flex', alignItems: 'center', background: 'black', border: '1px solid white' }} - /> -
    - )} ); }; diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index 40a54b1..d57cbc1 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -5,6 +5,7 @@ import UseLoading from './UseLoading'; import TransferLoading from './TransferLoading'; import EditPassword from '@/components/EditPassword'; import ChangeBank from '@/components/ChangeBank'; +import { t } from 'i18next'; interface ISafetyVerificationProps { open: boolean; @@ -145,7 +146,7 @@ const SafetyVerification: React.FunctionComponent = ({ className='tight' level={3} > - 驗證電子信箱 + {t('auth.驗證電子信箱')} 已發送驗證碼至您的電子信箱
    From 9ae653791b2a1cf7b5734ff0aa67726a22189ddc Mon Sep 17 00:00:00 2001 From: kirito_li Date: Fri, 14 Jun 2024 18:03:14 +0800 Subject: [PATCH 023/118] i18n --- src/I18n/TranslationTypes/TranslationTypes.ts | 12 +- .../TranslationTypes/components/account.ts | 14 + .../TranslationTypes/components/assets.ts | 60 ++ .../TranslationTypes/components/layout.ts | 25 + src/I18n/TranslationTypes/components/nav.ts | 9 + src/I18n/ch/ch.ts | 10 +- src/I18n/ch/components/account.ts | 16 + src/I18n/ch/components/assets.ts | 60 ++ src/I18n/ch/components/layout.ts | 26 + src/I18n/ch/components/nav.ts | 11 + src/I18n/en/components/account.ts | 16 + src/I18n/en/components/assets.ts | 60 ++ src/I18n/en/components/auth.ts | 70 +-- src/I18n/en/components/layout.ts | 26 + src/I18n/en/components/nav.ts | 11 + src/I18n/en/en.ts | 10 +- src/I18n/vi/components/account.ts | 16 + src/I18n/vi/components/assets.ts | 60 ++ src/I18n/vi/components/layout.ts | 26 + src/I18n/vi/components/nav.ts | 11 + src/I18n/vi/vi.ts | 10 +- src/components/AccountChart.tsx | 3 +- src/components/AddAccount.tsx | 19 +- src/components/ChangeBank.tsx | 3 +- src/components/DownloadMT4.tsx | 3 +- src/components/EditBank.tsx | 3 +- src/components/EditPassword.tsx | 16 +- src/components/GoToTrade.tsx | 9 +- .../InvestmentMarket/InvestmentMarket.tsx | 3 +- src/components/ProtectBanner.tsx | 29 +- src/components/SelectAccount.tsx | 5 +- src/components/TradingPlatform.tsx | 9 +- src/pages/AuthLayout/AuthLayout.tsx | 15 +- src/pages/AuthLayout/components/UseFooter.tsx | 27 +- src/pages/HotInvestMents/HotInvestMents.tsx | 9 +- src/pages/HotInvestMents/MyFocus.tsx | 3 +- src/pages/K100U/K100U.tsx | 3 +- src/pages/PublicLayout/PublicLayout.tsx | 575 +++++++++--------- src/pages/PublicLayout/UserChat.tsx | 30 +- src/pages/account/components/AccountMenu.tsx | 7 +- src/pages/account/index.tsx | 5 +- .../history/accountHistory/ClosePosition.tsx | 3 +- src/pages/history/index.tsx | 3 +- .../propertyHistory/PropertyHistoryTabs.tsx | 5 +- src/pages/login/RegisterPage.tsx | 8 +- src/pages/property/Deposit.tsx | 73 ++- src/pages/property/InProgress.tsx | 31 +- src/pages/property/Transfer.tsx | 9 +- src/pages/property/Withdraw.tsx | 15 +- .../property/components/DepositUsdtTrc20.tsx | 17 +- .../components/SafetyVerification.tsx | 22 +- .../property/components/TransferLoading.tsx | 7 +- src/pages/property/components/USDTLoading.tsx | 5 +- src/pages/property/components/UseLoading.tsx | 45 +- src/pages/property/index.tsx | 9 +- src/pages/user/components/KYCModal.tsx | 3 +- src/pages/user/index.tsx | 5 +- src/utils/calendarLocal.ts | 169 +++-- src/utils/options.ts | 3 +- 59 files changed, 1149 insertions(+), 618 deletions(-) create mode 100644 src/I18n/TranslationTypes/components/account.ts create mode 100644 src/I18n/TranslationTypes/components/assets.ts create mode 100644 src/I18n/TranslationTypes/components/layout.ts create mode 100644 src/I18n/TranslationTypes/components/nav.ts create mode 100644 src/I18n/ch/components/account.ts create mode 100644 src/I18n/ch/components/assets.ts create mode 100644 src/I18n/ch/components/layout.ts create mode 100644 src/I18n/ch/components/nav.ts create mode 100644 src/I18n/en/components/account.ts create mode 100644 src/I18n/en/components/assets.ts create mode 100644 src/I18n/en/components/layout.ts create mode 100644 src/I18n/en/components/nav.ts create mode 100644 src/I18n/vi/components/account.ts create mode 100644 src/I18n/vi/components/assets.ts create mode 100644 src/I18n/vi/components/layout.ts create mode 100644 src/I18n/vi/components/nav.ts diff --git a/src/I18n/TranslationTypes/TranslationTypes.ts b/src/I18n/TranslationTypes/TranslationTypes.ts index 6948763..55b28ba 100644 --- a/src/I18n/TranslationTypes/TranslationTypes.ts +++ b/src/I18n/TranslationTypes/TranslationTypes.ts @@ -1,7 +1,15 @@ -import { auth } from './components/auth' +import { auth } from './components/auth'; +import { layout } from './components/layout'; +import { nav } from './components/nav'; +import { account } from './components/account'; +import { assets } from './components/assets'; export type Translation = { register: string; welcome: string; - auth : auth; + auth: auth; + layout: layout; + account: account; + nav: nav; + assets: assets; }; diff --git a/src/I18n/TranslationTypes/components/account.ts b/src/I18n/TranslationTypes/components/account.ts new file mode 100644 index 0000000..f391c02 --- /dev/null +++ b/src/I18n/TranslationTypes/components/account.ts @@ -0,0 +1,14 @@ +export type account ={ + 帳戶管理: string, + 我的帳戶: string, + 新增帳戶: string, + 取消: string, + 選擇交易平台: string, + 選擇帳戶類型: string, + 真實帳戶: string, + 虛擬帳戶: string, + 設定帳戶密碼: string, + 輸入: string, + 確認: string, + 前往: string, +}; \ No newline at end of file diff --git a/src/I18n/TranslationTypes/components/assets.ts b/src/I18n/TranslationTypes/components/assets.ts new file mode 100644 index 0000000..00b3ec8 --- /dev/null +++ b/src/I18n/TranslationTypes/components/assets.ts @@ -0,0 +1,60 @@ +export type assets = { + 資產管理: string, + 入金: string, + 出金: string, + 轉帳: string, + 資產報表: string, + 通過實名驗證: string, + 通過: string, + 未通過: string, + 開始驗證: string, + 驗證碼審核中: string, + 下載: string, + 搜尋: string, + 存入資金: string, + 入金方式: string, + 入金帳戶: string, + 我要存入: string, + 帳戶可用資金: string, + 手續費: string, + 需支付: string, + 清除: string, + 提交: string, + 超過限額: string, + 提取為: string, + 提取至: string, + 出金匯率: string, + 帶入通過KYC的銀行帳戶: string, + 從: string, + 處理中: string, + 請支付: string, + 剩餘: string, + 流水號: string, + 建立時間: string, + 點擊已完成付款後: string, + 資產紀錄: string, + 全部: string, + 進行中: string, + 贈金: string, + 完成: string, + 開始日期: string, + 結束日期: string, + 請於時限內: string, + 注意事項: string, + 剩餘支付時間: string, + 收款地址: string, + 我已經完成付款: string, + 沒有加密貨幣錢包嗎: string, + 選擇下列平台: string, + CNY轉帳支付: string, + 立即下載: string, + 填寫銀行資料: string, + 交易平台: string, + 其他平台: string, + 總覽: string, + 優惠活動: string, + 交易社區: string, + 熱門投資: string +}; + +export default assets; \ No newline at end of file diff --git a/src/I18n/TranslationTypes/components/layout.ts b/src/I18n/TranslationTypes/components/layout.ts new file mode 100644 index 0000000..e148835 --- /dev/null +++ b/src/I18n/TranslationTypes/components/layout.ts @@ -0,0 +1,25 @@ +export type layout = { + 使用條款: string, + 免責聲明: string, + 請閱讀並同意: string, + 客戶協議書: string, + 風險披露聲明: string, + 保密協議: string, + 聯絡客服: string, + 新會員尚未實名驗證: string, + 實名驗證審核中: string, + 已通過實名驗證: string, + 通過實名驗證開始投資: string, + 幫助中心: string, + 如何入金: string, + 如何出金: string, + 如何開立帳戶: string, + 如何驗證帳戶: string, + 關於我們: string, + 簡介: string, + 最新公告: string, + 隱私和法規: string, + 通知入金成功: string, + 通知出金成功: string, + }; + \ No newline at end of file diff --git a/src/I18n/TranslationTypes/components/nav.ts b/src/I18n/TranslationTypes/components/nav.ts new file mode 100644 index 0000000..b4f699d --- /dev/null +++ b/src/I18n/TranslationTypes/components/nav.ts @@ -0,0 +1,9 @@ +export type nav ={ + 填寫銀行資料: string, + 交易平台: string, + 其他平台: string, + 總覽: string, + 優惠活動: string, + 交易社區: string, + 熱門投資: string, +}; \ No newline at end of file diff --git a/src/I18n/ch/ch.ts b/src/I18n/ch/ch.ts index 1b60632..7053740 100644 --- a/src/I18n/ch/ch.ts +++ b/src/I18n/ch/ch.ts @@ -1,10 +1,18 @@ import { Translation } from '../TranslationTypes/TranslationTypes'; -import auth from './components/auth' +import auth from './components/auth'; +import layout from './components/layout'; +import nav from './components/nav'; +import account from './components/account'; +import assets from './components/assets'; const ch: Translation = { register: '註冊', welcome: '哩後', auth: auth, + layout: layout, + nav:nav, + account: account, + assets:assets, }; export default ch; diff --git a/src/I18n/ch/components/account.ts b/src/I18n/ch/components/account.ts new file mode 100644 index 0000000..729b351 --- /dev/null +++ b/src/I18n/ch/components/account.ts @@ -0,0 +1,16 @@ +const account ={ + 帳戶管理:'帳戶管理', + 我的帳戶:'我的帳戶', + 新增帳戶:'新增帳戶', + 取消:'取消', + 選擇交易平台:'選擇交易平台', + 選擇帳戶類型:'選擇帳戶類型', + 真實帳戶:'真實帳戶', + 虛擬帳戶:'虛擬帳戶', + 設定帳戶密碼:'設定帳戶密碼', + 輸入:'輸入', + 確認:'確認', + 前往:'前往', +}; + +export default account; \ No newline at end of file diff --git a/src/I18n/ch/components/assets.ts b/src/I18n/ch/components/assets.ts new file mode 100644 index 0000000..5f40070 --- /dev/null +++ b/src/I18n/ch/components/assets.ts @@ -0,0 +1,60 @@ +const assets = { + 資產管理: '資產管理', + 入金: '入金', + 出金: '出金', + 轉帳: '轉帳', + 資產報表: '資產報表', + 通過實名驗證: '通過實名驗證, 開始投資', + 通過: '通過', + 未通過: '未通過', + 開始驗證: '開始驗證', + 驗證碼審核中: '驗證審核中,不妨先存入資金', + 下載: '下載', + 搜尋: '搜尋', + 存入資金: '存入資金', + 入金方式: '入金方式', + 入金帳戶: '入金帳戶', + 我要存入: '我要存入', + 帳戶可用資金: '帳戶可用資金', + 手續費: '手續費', + 需支付: '需支付', + 清除: '清除', + 提交: '提交', + 超過限額: '超過限額!您尚未通過', + 提取為: '提取為', + 提取至: '提取至', + 出金匯率: '出金匯率', + 帶入通過KYC的銀行帳戶: '帶入通過KYC的銀行帳戶', + 從: '從', + 處理中: '處理中', + 請支付: '請支付', + 剩餘: '剩餘', + 流水號: '流水號', + 建立時間: '建立時間', + 點擊已完成付款後: '點擊"已完成付款"後', + 資產紀錄: '資產紀錄', + 全部: '全部', + 進行中: '進行中', + 贈金: '贈金', + 完成: '完成', + 開始日期: '起始日期', + 結束日期: '結束日期', + 請於時限內: '請於時限內, 將需支付數量轉帳至收款地址', + 注意事項: '注意事項', + 剩餘支付時間: '剩餘支付時間', + 收款地址: '收款地址', + 我已經完成付款: '我已經完成付款', + 沒有加密貨幣錢包嗎: '沒有加密貨幣錢包嗎?', + 選擇下列平台: '選擇下列平台 開始支付', + CNY轉帳支付: 'CNY轉帳支付,快速到帳', + 立即下載: '立即下載', + 填寫銀行資料: '填寫銀行資料', + 交易平台: '交易平台', + 其他平台: '其他平台', + 總覽: '總覽', + 優惠活動: '優惠活動', + 交易社區: '交易社區', + 熱門投資: '熱門投資' +}; + +export default assets; \ No newline at end of file diff --git a/src/I18n/ch/components/layout.ts b/src/I18n/ch/components/layout.ts new file mode 100644 index 0000000..e235252 --- /dev/null +++ b/src/I18n/ch/components/layout.ts @@ -0,0 +1,26 @@ +const layout = { + 使用條款: '使用條款', + 免責聲明: '免責聲明', + 請閱讀並同意: '請閱讀並同意', + 客戶協議書: '客戶協議書', + 風險披露聲明: '風險披露聲明', + 保密協議: '保密協議', + 聯絡客服: '聯絡客服', + 新會員尚未實名驗證: '新會員尚未實名驗證', + 實名驗證審核中: '實名驗證審核中', + 已通過實名驗證: ' 已通過實名驗證', + 通過實名驗證開始投資: '通過實名驗證,開始投資', + 幫助中心: '幫助中心', + 如何入金: '如何入金', + 如何出金: '如何出金', + 如何開立帳戶: '如何開立帳戶', + 如何驗證帳戶: '如何驗證帳戶', + 關於我們: '關於我們', + 簡介: ' 簡介', + 最新公告: '最新公告', + 隱私和法規: '隱私和法規', + 通知入金成功: '通知-入金成功', + 通知出金成功: '通知-出金成功', +}; + +export default layout; diff --git a/src/I18n/ch/components/nav.ts b/src/I18n/ch/components/nav.ts new file mode 100644 index 0000000..f21779c --- /dev/null +++ b/src/I18n/ch/components/nav.ts @@ -0,0 +1,11 @@ +const nav ={ + 填寫銀行資料:'填寫銀行資料', + 交易平台:'交易平台', + 其他平台:'其他平台', + 總覽:'總覽', + 優惠活動:'優惠活動', + 交易社區:'交易社區', + 熱門投資:'熱門投資', +}; + +export default nav; \ No newline at end of file diff --git a/src/I18n/en/components/account.ts b/src/I18n/en/components/account.ts new file mode 100644 index 0000000..729b351 --- /dev/null +++ b/src/I18n/en/components/account.ts @@ -0,0 +1,16 @@ +const account ={ + 帳戶管理:'帳戶管理', + 我的帳戶:'我的帳戶', + 新增帳戶:'新增帳戶', + 取消:'取消', + 選擇交易平台:'選擇交易平台', + 選擇帳戶類型:'選擇帳戶類型', + 真實帳戶:'真實帳戶', + 虛擬帳戶:'虛擬帳戶', + 設定帳戶密碼:'設定帳戶密碼', + 輸入:'輸入', + 確認:'確認', + 前往:'前往', +}; + +export default account; \ No newline at end of file diff --git a/src/I18n/en/components/assets.ts b/src/I18n/en/components/assets.ts new file mode 100644 index 0000000..2d02249 --- /dev/null +++ b/src/I18n/en/components/assets.ts @@ -0,0 +1,60 @@ +const assets = { + 資產管理: '資產管理', + 入金: '入金', + 出金: '出金', + 轉帳: '轉帳', + 資產報表: '資產報表', + 通過實名驗證: '通過實名驗證, 開始投資', + 通過: '通過', + 未通過: '未通過', + 開始驗證: '開始驗證', + 驗證碼審核中: '驗證碼審核中,不妨先存入資金', + 下載: '下載', + 搜尋: '搜尋', + 存入資金: '存入資金', + 入金方式: '入金方式', + 入金帳戶: '入金帳戶', + 我要存入: '我要存入', + 帳戶可用資金: '帳戶可用資金', + 手續費: '手續費', + 需支付: '需支付', + 清除: '清除', + 提交: '提交', + 超過限額: '超過限額!您尚未通過', + 提取為: '提取為', + 提取至: '提取至', + 出金匯率: '出金匯率', + 帶入通過KYC的銀行帳戶: '帶入通過KYC的銀行帳戶', + 從: '從', + 處理中: '處理中', + 請支付: '請支付', + 剩餘: '剩餘', + 流水號: '流水號', + 建立時間: '建立時間', + 點擊已完成付款後: '點擊"已完成付款"後', + 資產紀錄: '資產紀錄', + 全部: '全部', + 進行中: '進行中', + 贈金: '贈金', + 完成: '完成', + 開始日期: '開始日期', + 結束日期: '結束日期', + 請於時限內: '請於時限內, 將需支付數量轉帳至收款地址', + 注意事項: '注意事項', + 剩餘支付時間: '剩餘支付時間', + 收款地址: '收款地址', + 我已經完成付款: '我已經完成付款', + 沒有加密貨幣錢包嗎: '沒有加密貨幣錢包嗎?', + 選擇下列平台: '選擇下列平台 開始支付', + CNY轉帳支付: 'CNY轉帳支付,快速到帳', + 立即下載: '立即下載', + 填寫銀行資料: '填寫銀行資料', + 交易平台: '交易平台', + 其他平台: '其他平台', + 總覽: '總覽', + 優惠活動: '優惠活動', + 交易社區: '交易社區', + 熱門投資: '熱門投資' +}; + +export default assets; \ No newline at end of file diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index e007626..5ba51a8 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -1,39 +1,39 @@ const auth = { - 登入: '登入', - 登出: '登出', - 註冊: '註冊', - 歡迎登入: '歡迎登入', - 請確認您正在訪問: '請確認您正在訪問 k100u.com', - 忘記密碼僅能以原註冊電話查詢: '忘記密碼僅能以原註冊電話查詢...', - 請輸入原註冊電話號碼進行手機簡訊驗證: '請輸入原註冊電話號碼,進行手機簡訊驗證', - 國碼: '國碼', - 手機: '手機', - 密碼: '密碼', - 驗證碼: '驗證碼', - 送出: '發送', - 確認密碼: '檢查密碼', - 設定密碼: '設定密碼', - 是否滿20歲: '是否滿20歲', - 隱私權條款: '隱私權條款', - 驗證成功: '驗證成功', - 已發送驗證碼: '已發送驗證碼', - 註冊成功: '註冊成功', - 忘記密碼: '忘記密碼', - 此手機尚未註冊: '此手機尚未註冊', - 請輸入新密碼: '請輸入新密碼', - 重設密碼: '重設密碼', - 電子信箱: '電子信箱', - 記住我: '記住我', - 還沒有帳戶前往: '還沒有帳戶? 前往', - 姓名: '姓名', - 用戶名稱: '用戶名稱', - 電話號碼: '電話號碼', - 我已閱讀並同意: '我已閱讀並同意', - 下一步: '下一步', - 已有帳戶前往: '已有帳戶? 前往', - 驗證電子信箱: '驗證電子信箱', - 重發驗證碼: '重發驗證碼', - 嘗試多次仍無法收到驗證碼: '嘗試多次仍無法收到驗證碼', + 登入: 'Login', + 登出: 'Logout', + 註冊: 'Register', + 歡迎登入: 'Welcome to Login', + 請確認您正在訪問: 'Please confirm you are visiting k100u.com', + 忘記密碼僅能以原註冊電話查詢: 'Forgot password can only be queried by original registered phone...', + 請輸入原註冊電話號碼進行手機簡訊驗證: 'Please enter the original registered phone number for SMS verification', + 國碼: 'Country Code', + 手機: 'Phone', + 密碼: 'Password', + 驗證碼: 'Verification Code', + 送出: 'Send', + 確認密碼: 'Confirm Password', + 設定密碼: 'Set Password', + 是否滿20歲: 'Are you over 20 years old', + 隱私權條款: 'Privacy Policy', + 驗證成功: 'Verification Successful', + 已發送驗證碼: 'Verification code sent to', + 註冊成功: 'Registration Successful', + 忘記密碼: 'Forgot Password', + 此手機尚未註冊: 'This phone number is not registered', + 請輸入新密碼: 'Please enter a new password', + 重設密碼: 'Reset Password', + 電子信箱: 'Email', + 記住我: 'Remember Me', + 還沒有帳戶前往: 'Don\'t have an account? Go to', + 姓名: 'Name', + 用戶名稱: 'Username', + 電話號碼: 'Phone Number', + 我已閱讀並同意: 'I have read and agree to', + 下一步: 'Next', + 已有帳戶前往: 'Already have an account? Go to', + 驗證電子信箱: 'Verify Email', + 重發驗證碼: 'Resend Verification Code', + 嘗試多次仍無法收到驗證碼: 'Unable to receive verification code after multiple attempts', }; export default auth; diff --git a/src/I18n/en/components/layout.ts b/src/I18n/en/components/layout.ts new file mode 100644 index 0000000..7e86459 --- /dev/null +++ b/src/I18n/en/components/layout.ts @@ -0,0 +1,26 @@ +const layout = { + 使用條款: 'Terms of Use', + 免責聲明: 'Disclaimer', + 請閱讀並同意: 'Please read and agree', + 客戶協議書: 'Customer Agreement', + 風險披露聲明: 'Risk Disclosure Statement', + 保密協議: 'Confidentiality Agreement', + 聯絡客服: 'Contact Customer Service', + 新會員尚未實名驗證: 'New member not verified', + 實名驗證審核中: 'Real-name verification under review', + 已通過實名驗證: 'Real-name verification passed', + 通過實名驗證開始投資: 'Pass real-name verification, start investing', + 幫助中心: 'Help Center', + 如何入金: 'How to Deposit', + 如何出金: 'How to Withdraw', + 如何開立帳戶: 'How to Open an Account', + 如何驗證帳戶: 'How to Verify Your Account', + 關於我們: 'About Us', + 簡介: 'Introduction', + 最新公告: 'Latest Announcements', + 隱私和法規: 'Privacy and Regulations', + 通知入金成功: 'Notification - Deposit Successful', + 通知出金成功: 'Notification - Withdrawal Successful', +}; + +export default layout; diff --git a/src/I18n/en/components/nav.ts b/src/I18n/en/components/nav.ts new file mode 100644 index 0000000..f21779c --- /dev/null +++ b/src/I18n/en/components/nav.ts @@ -0,0 +1,11 @@ +const nav ={ + 填寫銀行資料:'填寫銀行資料', + 交易平台:'交易平台', + 其他平台:'其他平台', + 總覽:'總覽', + 優惠活動:'優惠活動', + 交易社區:'交易社區', + 熱門投資:'熱門投資', +}; + +export default nav; \ No newline at end of file diff --git a/src/I18n/en/en.ts b/src/I18n/en/en.ts index e20a863..3bdbe72 100644 --- a/src/I18n/en/en.ts +++ b/src/I18n/en/en.ts @@ -1,10 +1,18 @@ import { Translation } from '../TranslationTypes/TranslationTypes'; -import auth from './components/auth' +import auth from './components/auth'; +import layout from './components/layout'; +import nav from './components/nav'; +import account from './components/account'; +import assets from './components/assets'; const en: Translation = { register: 'Register', welcome: 'Welcome to my app', auth: auth, + layout: layout, + nav:nav, + account: account, + assets:assets, }; export default en; diff --git a/src/I18n/vi/components/account.ts b/src/I18n/vi/components/account.ts new file mode 100644 index 0000000..69134a3 --- /dev/null +++ b/src/I18n/vi/components/account.ts @@ -0,0 +1,16 @@ +const account ={ + 帳戶管理:'Quản lý tài khoản', + 我的帳戶:'Tài khoản của tôi', + 新增帳戶:'Thêm tài khoản mới', + 取消:'Hủy bỏ', + 選擇交易平台:'Chọn sàn giao dịch', + 選擇帳戶類型:'Chọn loại tài khoản', + 真實帳戶:'Tài khoản thực', + 虛擬帳戶:'Tài khoản ảo', + 設定帳戶密碼:'Cài đặt mật khẩu tài khoản', + 輸入:'Nhập', + 確認:'Xác nhận', + 前往:'Đi tiếp', +}; + +export default account; \ No newline at end of file diff --git a/src/I18n/vi/components/assets.ts b/src/I18n/vi/components/assets.ts new file mode 100644 index 0000000..ea408b8 --- /dev/null +++ b/src/I18n/vi/components/assets.ts @@ -0,0 +1,60 @@ +const assets = { + 資產管理: 'Quản lý tài sản', + 入金: 'Tiền gửi vào', + 出金: 'Tiền rút ra', + 轉帳: 'Chuyển tiền', + 資產報表: 'Báo cáo tài sản', + 通過實名驗證: 'Xác minh tên người dùng thông qua, bắt đầu đầu tư', + 通過: 'Thông qua', + 未通過: 'Không thông qua', + 開始驗證: 'Bắt đầu xác minh', + 驗證碼審核中: 'Mã xác minh đang được xem xét, bạn có thể gửi tiền trước', + 下載: 'Tải xuống', + 搜尋: 'Tìm kiếm', + 存入資金: 'Số tiền nạp vào', + 入金方式: 'Phương thức nạp tiền', + 入金帳戶: 'Tài khoản nạp tiền', + 我要存入: 'Tôi muốn nạp tiền', + 帳戶可用資金: 'Số tiền tài khoản có thể dùng', + 手續費: 'Phí xử lý', + 需支付: 'Cần phải trả', + 清除: 'Loại bỏ', + 提交: 'Giao nộp', + 超過限額: 'Vượt quá hạn mức! Bạn không thông qua', + 提取為: 'Rút ra từ', + 提取至: 'Rút tới', + 出金匯率: 'Tỷ giá rút tiền', + 帶入通過KYC的銀行帳戶: 'Nhập số tài khoản ngân hàng KYC được phê duyệt', + 從: 'Từ', + 處理中: 'Đang xử lý', + 請支付: 'Vui lòng thanh toán', + 剩餘: 'Còn lại', + 流水號: 'Số sê-ri', + 建立時間: 'Thiết lập thời gian', + 點擊已完成付款後: 'Sau khi nhấp vào "Thanh toán hoàn tất"', + 資產紀錄: 'Ghi chép tài sản', + 全部: 'Toàn bộ', + 進行中: 'Đang trong tiến trình', + 贈金: 'Tiền thưởng', + 完成: 'Hoàn thành', + 開始日期: 'Ngày bắt đầu', + 結束日期: 'Ngày kết thúc', + 請於時限內: 'Vui lòng chuyển số tiền cần thanh toán đến địa chỉ thanh toán trong thời hạn', + 注意事項: 'Hạng mục chú ý', + 剩餘支付時間: 'Thời gian còn lại để thanh toán', + 收款地址: 'Địa chỉ thanh toán', + 我已經完成付款: 'Tôi đã hoàn thành việc thanh toán', + 沒有加密貨幣錢包嗎: 'Bạn chưa có ví điện tử?', + 選擇下列平台: 'Chọn mục bên dưới bắt đầu thanh toán', + CNY轉帳支付: 'Thanh toán chuyển khoản CNY, nhanh chóng nhận được', + 立即下載: 'Tải xuống ngay', + 填寫銀行資料: '填寫銀行資料', + 交易平台: '交易平台', + 其他平台: '其他平台', + 總覽: '總覽', + 優惠活動: '優惠活動', + 交易社區: '交易社區', + 熱門投資: '熱門投資', +}; + +export default assets; diff --git a/src/I18n/vi/components/layout.ts b/src/I18n/vi/components/layout.ts new file mode 100644 index 0000000..12b4451 --- /dev/null +++ b/src/I18n/vi/components/layout.ts @@ -0,0 +1,26 @@ +const layout = { + 使用條款: 'Điều khoản sử dụng', + 免責聲明: 'Miễn trừ trách nhiệm', + 請閱讀並同意: 'Vui lòng đọc và đồng ý', + 客戶協議書: 'Hợp đồng khách hàng', + 風險披露聲明: 'Tuyên bố tiết lộ rủi ro', + 保密協議: 'Hợp đồng bảo mật', + 聯絡客服: 'Liên hệ với bên chăm sóc khách hàng', + 新會員尚未實名驗證: 'Thành viên mới chưa xác minh tên người dùng', + 實名驗證審核中: 'Xác minh tên người dùng đang được xem xét', + 已通過實名驗證: 'Xác minh tên người dùng đã thông qua', + 通過實名驗證開始投資: 'Xác minh tên người dùng thông qua, bắt đầu đầu tư', + 幫助中心: 'Trung tâm hỗ trợ', + 如何入金: 'Làm thế nào để nạp tiền', + 如何出金: 'Làm thế nào để rút tiền', + 如何開立帳戶: 'Làm thế nào để thành lập tài khoản', + 如何驗證帳戶: 'Làm thế nào để xác minh tài khoản', + 關於我們: 'Về chúng tôi', + 簡介: 'Giới thiệu', + 最新公告: 'Thông báo mới nhất', + 隱私和法規: 'Quyền riêng tư và quy định', + 通知入金成功: 'Thông báo- Nạp tiền thành công', + 通知出金成功: 'Thông báo- Rút tiền thành công', +}; + +export default layout; diff --git a/src/I18n/vi/components/nav.ts b/src/I18n/vi/components/nav.ts new file mode 100644 index 0000000..c8da0d1 --- /dev/null +++ b/src/I18n/vi/components/nav.ts @@ -0,0 +1,11 @@ +const nav ={ + 填寫銀行資料:'Điền thông tin ngân hàng', + 交易平台:'Sàn giao dịch', + 其他平台:'Sàn giao dịch khác', + 總覽:'Toàn bộ', + 優惠活動:'Hoạt động ưu đãi', + 交易社區:'Cộng đồng giao dịch', + 熱門投資:'Đầu tư phổ biến', +}; + +export default nav; \ No newline at end of file diff --git a/src/I18n/vi/vi.ts b/src/I18n/vi/vi.ts index f77e0f7..97b563d 100644 --- a/src/I18n/vi/vi.ts +++ b/src/I18n/vi/vi.ts @@ -1,10 +1,18 @@ import { Translation } from '../TranslationTypes/TranslationTypes'; -import auth from './components/auth' +import auth from './components/auth'; +import layout from './components/layout'; +import nav from './components/nav'; +import account from './components/account'; +import assets from './components/assets'; const vi: Translation = { register: 'Register', welcome: 'Welcome to my app', auth: auth, + layout: layout, + nav:nav, + account: account, + assets: assets, }; export default vi; diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index 6dcba2e..f0f726f 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -4,6 +4,7 @@ import { Button, Col, List, Row, Space } from 'antd'; import { CaretLeftOutlined, CaretRightOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import SelectAccount from './SelectAccount'; +import { t } from 'i18next'; interface IAccountChartProps { onClose?: () => void; @@ -118,7 +119,7 @@ const AccountChart: React.FunctionComponent = (props) => { block onClick={handleClick} > - 存入資金 + {t('assets.存入資金')} void }> = ({ visible, onClose }) => { const [selectedPlatform, setSelectedPlatform] = useState(null); @@ -34,7 +35,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib return ( 新增帳戶} + title={{t('account.新增帳戶')}} visible={visible} onCancel={onClose} footer={null} @@ -43,7 +44,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib layout='vertical' onFinish={onFinish} > - 選擇交易平台 + {t('account.選擇交易平台')} {platforms.map((platform) => (
    @@ -105,7 +106,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib )} ))} - 選擇帳戶類型 + {t('account.選擇帳戶類型')} void }> = ({ visib value={accountType} style={{ marginTop: 20 }} > - 真實帳戶 - 虛擬帳戶 + {t('account.真實帳戶')} + {t('account.虛擬帳戶')} - 設定帳戶密碼 + {t('account.設定帳戶密碼')} void }> = ({ visib style={{ marginRight: '20px', width: 100 }} onClick={onClose} > - 取消 + {t('account.取消')} diff --git a/src/components/ChangeBank.tsx b/src/components/ChangeBank.tsx index 2f0a9dd..2b0fef9 100644 --- a/src/components/ChangeBank.tsx +++ b/src/components/ChangeBank.tsx @@ -1,5 +1,6 @@ import { UploadOutlined } from '@ant-design/icons'; import { Button, Form, Input, Modal, Typography, Upload } from 'antd'; +import { t } from 'i18next'; import { useState } from 'react'; const EditBank = () => { @@ -94,7 +95,7 @@ const EditBank = () => { className='flex-1' onClick={() => setOpen(false)} > - 取消 + {t('account.取消')} + ); }; diff --git a/src/components/EditBank.tsx b/src/components/EditBank.tsx index 057ba39..ba4ec61 100644 --- a/src/components/EditBank.tsx +++ b/src/components/EditBank.tsx @@ -2,6 +2,7 @@ import { IoWarningOutline } from 'react-icons/io5'; import { Button, Modal, Typography } from 'antd'; import React from 'react'; import SafetyVerification from '@/pages/property/components/SafetyVerification'; +import { t } from 'i18next'; const EditBank: React.FC<{ open: boolean; onCancel: () => void }> = ({ open, onCancel }) => { const [openTransfer, setOpenTransfer] = React.useState(false); @@ -46,7 +47,7 @@ const EditBank: React.FC<{ open: boolean; onCancel: () => void }> = ({ open, onC className='flex-1' onClick={onCancel} > - 取消 + {t('account.取消')}
    diff --git a/src/components/EditPassword.tsx b/src/components/EditPassword.tsx index 745dd43..46c678e 100644 --- a/src/components/EditPassword.tsx +++ b/src/components/EditPassword.tsx @@ -1,12 +1,13 @@ import { Button, Form, Input, Modal, Typography } from 'antd'; import React, { useState } from 'react'; import { EyeInvisibleOutlined } from '@ant-design/icons'; +import { t } from 'i18next'; const EditPassword: React.FC<{ onCancel: () => void }> = ({ onCancel }) => { const [form] = Form.useForm(); const [confirmDirty, setConfirmDirty] = useState(false); const [isSuccess, setIsSuccess] = useState(false); - const [open ,setOpen] = useState(true); + const [open, setOpen] = useState(true); const onFinish = (values: any) => { console.log('Received values:', values); @@ -67,8 +68,13 @@ const EditPassword: React.FC<{ onCancel: () => void }> = ({ onCancel }) => { footer={null} > {isSuccess ? ( -
    - 密碼已成功變更! +
    + + 密碼已成功變更! +
    ) : (
    void }> = ({ onCancel }) => { htmlType='submit' className='mr-4' > - 提交 + {t('assets.提交')} - + )} diff --git a/src/components/GoToTrade.tsx b/src/components/GoToTrade.tsx index 13744f4..28bc5d4 100644 --- a/src/components/GoToTrade.tsx +++ b/src/components/GoToTrade.tsx @@ -2,6 +2,7 @@ import React, { useState } from 'react'; import { Modal, Typography, Button, Dropdown, Menu } from 'antd'; import AddAccount from './AddAccount'; // 請替換成實際的路徑 import Mt4 from '../assets/mt4.png'; +import { t } from 'i18next'; interface GoToTradeProps { isModalVisible: boolean; @@ -57,7 +58,7 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC padding: 20, }} > - + 新增帳戶 + + {t('account.新增帳戶')} @@ -95,7 +96,7 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC onOk={handleOk} onCancel={handleCancel} > - 選擇交易平台 + {t('account.選擇交易平台')} {platforms.map((platform) => (
    - 帳戶可用資金:$ 78763 + {t('assets.帳戶可用資金')}:$ 78763 {showAddAccount && ( // 顯示 AddAccount 組件的條件 setShowAddAccount(false)} footer={null} // 不顯示底部按鈕 diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index 708ad6f..50da32f 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -2,6 +2,7 @@ import { useState } from 'react'; import { Input, Tabs } from 'antd'; import Title from 'antd/lib/typography/Title'; import HotInvestMents from '../../pages/HotInvestMents/HotInvestMents'; +import { t } from 'i18next'; const YourComponent = () => { const [activeTab, setActiveTab] = useState('總覽'); @@ -28,7 +29,7 @@ const YourComponent = () => { tabBarExtraContent={
    额外的内容
    } // 这是选项卡附加的额外内容,可根据需要调整 > {/* 總覽内容 */} diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 8d77fec..416e6f8 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -9,6 +9,7 @@ import ProtectBannerImg_2 from '../assets/ProtectBanner_img_2.png'; import ProtectBannerImg_3 from '../assets/ProtectBanner_img_3.png'; import DownloadMT4 from './DownloadMT4'; import InvestmentMarket from './InvestmentMarket/InvestmentMarket'; +import { t } from 'i18next'; interface IProtectBannerProps {} @@ -28,7 +29,7 @@ const ProtectBanner: React.FunctionComponent = () => {
    <div className='text-[#8c8c8c] text-center sm:text-start'>歡迎登入 寶泰!</div>{' '} - <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>通過實名驗證,開始投資</div> + <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>{t('assets.通過實名驗證')}</div> = () => {
    - <div className='text-[16px] sm:text-[20px]'>通過</div> + <div className='text-[16px] sm:text-[20px]'>{t('assets.通過')}</div> @@ -46,7 +47,7 @@ const ProtectBanner: React.FunctionComponent = () => { style={{ background: '#F39D1B' }} icon={} /> - 入金 + {t('assets.入金')} = () => { style={{ background: '#F39D1B' }} icon={} /> - 出金 + {t('assets.出金')} = () => { size='small' icon={} /> - 出金 + {t('assets.出金')} = () => { block size='large' > - 開始驗證 + {t('assets.開始驗證')} @@ -126,7 +127,7 @@ const ProtectBanner: React.FunctionComponent = () => {
    <div className='text-[#8c8c8c] text-center sm:text-start'>歡迎登入 寶泰!</div> - <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>驗證審核中,不妨先存入資金!</div> + <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>{t('assets.驗證碼審核中')}</div> = () => {
    - <div className='text-[16px] sm:text-[20px]'>通過</div> + <div className='text-[16px] sm:text-[20px]'>{t('assets.通過')}</div> @@ -144,7 +145,7 @@ const ProtectBanner: React.FunctionComponent = () => { style={{ background: '#F39D1B' }} icon={} /> - 入金 + {t('assets.入金')} = () => { style={{ background: '#F39D1B' }} icon={} /> - 出金 + {t('assets.出金')} = () => { size='small' icon={} /> - 出金 + {t('assets.出金')} = () => { to='property' state='入金' > - + @@ -275,13 +276,13 @@ const ProtectBanner: React.FunctionComponent = () => { to='property' state='入金' > - + - + diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index c22573c..e2f7de8 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -2,6 +2,7 @@ import React, { useState } from 'react'; import { PlusOutlined } from '@ant-design/icons'; import { Button, Divider, Modal, Select } from 'antd'; import AddAccount from './AddAccount'; +import { t } from 'i18next'; interface ISelectAccountProps {} @@ -15,7 +16,7 @@ const SelectAccount: React.FunctionComponent = () => { icon={} onClick={() => setShowAddAccount(true)} > - 新增帳戶 + {t('account.新增帳戶')} ); @@ -49,7 +50,7 @@ const SelectAccount: React.FunctionComponent = () => { /> {showAddAccount && ( setShowAddAccount(false)} footer={null} // 不顯示底部按鈕 diff --git a/src/components/TradingPlatform.tsx b/src/components/TradingPlatform.tsx index ca5d40d..03a4da2 100644 --- a/src/components/TradingPlatform.tsx +++ b/src/components/TradingPlatform.tsx @@ -1,6 +1,7 @@ import { Menu, Dropdown, Row, Col } from 'antd'; import { DownOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; +import { t } from 'i18next'; const App = () => { const menu = ( @@ -20,7 +21,7 @@ const App = () => {
    MetaTrader 4
    -
    立即下載
    +
    {t('assets.立即下載')}
    {
    MetaTrader 4
    -
    立即下載
    +
    {t('assets.立即下載')}
    { className='newMb:mr-[30px]' style={{ fontSize: 20 }} > - 其他平台 + {t('nav.其他平台')}
    { trigger={['hover']} >
    -
    交易平台
    +
    {t('nav.交易平台')}
    diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index c8a610d..973022f 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -13,11 +13,9 @@ import PT_logo_2 from '../../assets/PTFintech_final2-02.png'; const { Header, Footer, Content } = Layout; const headerStyle: React.CSSProperties = { - width: '100vw', + width: '100%', height: 56, - maxWidth: '1920px', padding: 0, - alignItems: 'center', opacity: '10', }; const contentStyle: React.CSSProperties = { @@ -84,15 +82,8 @@ const AuthLayout: React.FC = () => {
    {isDark === true && ( @@ -110,7 +101,7 @@ const AuthLayout: React.FC = () => { /> )}
    -
    +
    setIsDark(newValue)} diff --git a/src/pages/AuthLayout/components/UseFooter.tsx b/src/pages/AuthLayout/components/UseFooter.tsx index bbccb0b..4403380 100644 --- a/src/pages/AuthLayout/components/UseFooter.tsx +++ b/src/pages/AuthLayout/components/UseFooter.tsx @@ -4,6 +4,7 @@ import GooglePlay from '../../../assets/googlePlay.png'; import AppStore from '../../../assets/appStore.png'; import { useThemeStore, useI18nStore } from '@/store'; import PT_logo_2 from '../../../assets/PTFintech_final2-02.png'; +import { t } from 'i18next'; const { Text } = Typography; @@ -57,12 +58,12 @@ const UseFooter = () => { md={6} xxl={3} > -
    幫助中心
    +
    {t('layout.幫助中心')}
      -
    • 如何入金
    • -
    • 如何出金
    • -
    • 如何開立帳戶
    • -
    • 如何驗證帳戶
    • +
    • {t('layout.如何入金')}
    • +
    • {t('layout.如何出金')}
    • +
    • {t('layout.如何開立帳戶')}
    • +
    • {t('layout.如何驗證帳戶')}
    { md={6} xxl={3} > -
    關於我們
    +
    {t('layout.關於我們')}
      -
    • 簡介
    • -
    • 最新公告
    • +
    • {t('layout.簡介')}
    • +
    • {t('layout.最新公告')}
    { md={6} xxl={3} > -
    隱私和法規
    +
    {t('layout.隱私和法規')}
      -
    • 客戶協議書
    • -
    • 風險紕漏聲明
    • -
    • 免責協議
    • -
    • 保密協議
    • +
    • {t('layout.客戶協議書')}
    • +
    • {t('layout.風險披露聲明')}
    • +
    • {t('layout.免責聲明')}
    • +
    • {t('layout.保密協議')}
    { return (
    - 熱門投資 + {t('nav.熱門投資')}
    { alignItems: 'center', }} > - 新會員 尚未實名驗證 - 實名驗證審核中 - 已通過實名驗證 + {t('layout.新會員尚未實名驗證')} + {t('layout.實名驗證審核中')} + {t('layout.已通過實名驗證')} { defaultActiveKey='1' > diff --git a/src/pages/K100U/K100U.tsx b/src/pages/K100U/K100U.tsx index 752e7ba..3f17b2c 100644 --- a/src/pages/K100U/K100U.tsx +++ b/src/pages/K100U/K100U.tsx @@ -3,6 +3,7 @@ import { Layout, Menu, Button, Input, Row, Col, Typography, Space, Card, Select, import { LeftOutlined, StarOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import GoToTrade from '../../components/GoToTrade'; +import { t } from 'i18next'; const { Option } = Select; @@ -131,7 +132,7 @@ const App = () => { setModalVisible(false)} diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 3a3eb2a..c20383c 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -134,16 +134,16 @@ const PublicLayout: React.FunctionComponent = () => { { key: '總覽', path: '/', - name: 總覽, + name: {t('nav.總覽')}, icon: , }, // { path: '/public', name: 帳戶管理 }, { key: '帳戶管理', - name: '帳戶管理', + name: `${t('account.帳戶管理')}`, icon: , children: [ - { path: 'account', name: 我的帳戶 }, + { path: 'account', name: {t('account.我的帳戶')} }, { path: '/新增帳戶', name: ( @@ -153,7 +153,7 @@ const PublicLayout: React.FunctionComponent = () => { role='button' tabIndex={0} > - 新增帳戶 + {t('account.新增帳戶')} ), }, @@ -161,7 +161,7 @@ const PublicLayout: React.FunctionComponent = () => { }, { key: '資產管理', - name: '資產管理', + name: `${t('assets.資產管理')}`, icon: , children: [ { @@ -171,7 +171,7 @@ const PublicLayout: React.FunctionComponent = () => { to='property' state='入金' > - 入金 + {t('assets.入金')} ), }, @@ -182,7 +182,7 @@ const PublicLayout: React.FunctionComponent = () => { to='property' state='出金' > - 出金 + {t('assets.出金')} ), }, @@ -193,7 +193,7 @@ const PublicLayout: React.FunctionComponent = () => { to='property' state='轉帳' > - 轉帳 + {t('assets.轉帳')} ), }, @@ -212,7 +212,7 @@ const PublicLayout: React.FunctionComponent = () => { to='/public/history' state='資產報表' > - 資產報表 + {t('assets.資產報表')} ), }, @@ -229,305 +229,304 @@ const PublicLayout: React.FunctionComponent = () => { { path: '/', name: '工具' }, ], }, - { key: '優惠活動', path: '/', name: - '優惠活動', icon: }, - { key: '交易社區', path: '/', name: '交易社區', icon: }, - ], - }; + { key: '優惠活動', path: '/', name: `${t('nav.優惠活動')}`, icon: }, + { key: '交易社區', path: '/', name: `${t('nav.交易社區')}`, icon: }, + ], + }; - const data = [{ title: 'Title 1' }, { title: 'Title 2' }, { title: 'Title 3' }, { title: 'Title 4' }]; + const data = [{ title: 'Title 1' }, { title: 'Title 2' }, { title: 'Title 3' }, { title: 'Title 4' }]; - const notifyPanel = ( - ( - - {items.title}} /> - - )} - /> - ); - const watchAccountChart = () => { - setUseAccountChart('UseAccountChart'); - }; + const notifyPanel = ( + ( + + {items.title}} /> + + )} + /> + ); + const watchAccountChart = () => { + setUseAccountChart('UseAccountChart'); + }; - return ( - <> - setUseAccountChart('')} - footer={null} - > -
    - setUseAccountChart('')} /> -
    -
    -
    -
    - } - /> - , -
    -
    - - - - - - } - /> - - - } - > - - -
    + return ( + <> + setUseAccountChart('')} + footer={null} + > +
    + setUseAccountChart('')} />
    - - - - - -
    - } - avatarProps={{ - render: () => ( -
    -
    - - -
    總價值
    -
    $ 0.00
    - - + + + } + /> + + + } + > + + +
    +
    + + + + + + + } + avatarProps={{ + render: () => ( +
    +
    + + +
    總價值
    +
    $ 0.00
    + +
    -
    - -
    總價值
    -
    $ 0.00
    - -
    - ), - }, - { - key: '通知', - label: ( - -
    - - 通知 -
    -
    - ), - }, - { - key: '語言', - label: ( - -
    - - 語言 -
    -
    - ), - }, - { - key: '顯示', - label: ( -
    - setIsDark(newValue)} - key='switch' - /> - 顯示 -
    - ), - }, - ], - }} - placement='topRight' - overlayClassName='bg-transparent' + + , + + - - -
    + + + + , + + + + , + setIsDark(newValue)} + key='switch' + /> + , + +
    , - label: 用戶資訊, + label: ( +
    +
    總價值
    +
    $ 0.00
    + +
    + ), + }, + { + key: '通知', + label: ( + +
    + + 通知 +
    +
    + ), + }, + { + key: '語言', + label: ( + +
    + + 語言 +
    +
    + ), }, { - key: '登出', - icon: , - label: '登出', + key: '顯示', + label: ( +
    + setIsDark(newValue)} + key='switch' + /> + 顯示 +
    + ), }, ], }} + placement='topRight' + overlayClassName='bg-transparent' > - -
    歡迎登入!用戶名稱
    - -
    +
    - ), - }} - menuFooterRender={FooterRender} - collapsed={collapsed} - route={route} - > - window.history.back()} - > - -
    - - - , + label: 用戶資訊, + }, + { + key: '登出', + icon: , + label: '登出', + }, + ], + }} > -
    - -
    - -
    - - - - - - setIsAddAccountVisible(false)} - /> - - ); - }; + +
    歡迎登入!用戶名稱
    + +
    + + + ), + }} + menuFooterRender={FooterRender} + collapsed={collapsed} + route={route} + > + window.history.back()} + > + +
    + + + +
    + +
    + +
    + + + + + + setIsAddAccountVisible(false)} + /> + + ); +}; - export default PublicLayout; +export default PublicLayout; diff --git a/src/pages/PublicLayout/UserChat.tsx b/src/pages/PublicLayout/UserChat.tsx index e72a805..df49e1e 100644 --- a/src/pages/PublicLayout/UserChat.tsx +++ b/src/pages/PublicLayout/UserChat.tsx @@ -1,19 +1,27 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { Modal, Button, Input, List, Avatar, Upload } from 'antd'; import { UploadOutlined, SendOutlined } from '@ant-design/icons'; +import { useTranslation } from 'react-i18next'; // 导入 useTranslation 钩子 + +interface UserChatProps { + buttonStyle?: object; + buttonText?: any; // 新增 buttonText 属性 +} + +const UserChat: React.FC = ({ buttonStyle, buttonText }) => { + const { t, i18n } = useTranslation(); -const UserChat: React.FC<{ buttonStyle?: object; buttonText?: any }> = ({ - buttonStyle, - buttonText = '聯繫客服', -}) => { - UserChat.defaultProps = { - buttonStyle: {}, - buttonText: '聯繫客服', - }; const [visible, setVisible] = useState(false); const [messages, setMessages] = useState([{ type: 'customerService', content: '您好,有什么可以帮到您的吗?' }]); const [inputMessage, setInputMessage] = useState(''); + useEffect(() => { + const newButtonText = t('layout.聯絡客服'); + setButtonText(newButtonText); + }, [i18n.language]); + + const [defaultButtonText, setButtonText] = useState(buttonText || t('layout.聯絡客服')); // 使用传入的 buttonText 或者默认值 + const showModal = () => { setVisible(true); }; @@ -40,7 +48,7 @@ const UserChat: React.FC<{ buttonStyle?: object; buttonText?: any }> = ({ onClick={showModal} style={buttonStyle} > - {buttonText} {/* 使用新的 buttonText 属性 */} + {defaultButtonText} {/* 使用 defaultButtonText */} = ({ padding: '10px', whiteSpace: 'pre-wrap', overflow: 'hidden', - resize: 'none', // 将调整框大小设为不可调整 + resize: 'none', }} /> diff --git a/src/pages/account/components/AccountMenu.tsx b/src/pages/account/components/AccountMenu.tsx index 0592db3..f4abf52 100644 --- a/src/pages/account/components/AccountMenu.tsx +++ b/src/pages/account/components/AccountMenu.tsx @@ -1,6 +1,7 @@ import SafetyVerification from '@/pages/property/components/SafetyVerification'; import { MoreOutlined } from '@ant-design/icons'; import { MenuProps, Dropdown, Button } from 'antd'; +import { t } from 'i18next'; import * as React from 'react'; import { Link } from 'react-router-dom'; @@ -21,7 +22,7 @@ const AccountMenu: React.FunctionComponent = (props) => { to='/public/property' state='入金' > - 入金 + {t('assets.入金')} ), key: '入金', @@ -32,7 +33,7 @@ const AccountMenu: React.FunctionComponent = (props) => { to='/public/property' state='出金' > - 出金 + {t('assets.出金')} ), key: '出金', @@ -43,7 +44,7 @@ const AccountMenu: React.FunctionComponent = (props) => { to='/public/property' state='轉帳' > - 轉帳 + {t('assets.轉帳')} ), key: '轉帳', diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index cffbf92..0063381 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -6,6 +6,7 @@ import AccountMenu from './components/AccountMenu'; import AddAccount from '../../components/AddAccount'; import mt4 from '../../assets/mt4.png'; import mt5 from '../../assets/mt5.png'; +import { t } from 'i18next'; const { Panel } = Collapse; @@ -50,7 +51,7 @@ const Account = () => { ]; const genExtra = () => ( -
    +
    +
    ); diff --git a/src/pages/history/accountHistory/ClosePosition.tsx b/src/pages/history/accountHistory/ClosePosition.tsx index 379ccca..b20cf71 100644 --- a/src/pages/history/accountHistory/ClosePosition.tsx +++ b/src/pages/history/accountHistory/ClosePosition.tsx @@ -1,5 +1,6 @@ import { ProCard } from '@ant-design/pro-components'; import { Tabs, Table } from 'antd'; +import { t } from 'i18next'; import * as React from 'react'; interface IClosePosition {} @@ -112,7 +113,7 @@ const InSuccess: React.FunctionComponent = (props) => { className="w-full" > diff --git a/src/pages/history/index.tsx b/src/pages/history/index.tsx index 0812a5c..dfea1d0 100644 --- a/src/pages/history/index.tsx +++ b/src/pages/history/index.tsx @@ -3,6 +3,7 @@ import { Tabs, DatePicker } from 'antd'; import { useLocation } from 'react-router-dom'; import PropertyHistoryTabs from './propertyHistory/PropertyHistoryTabs'; import AccountHistoryTabs from './accountHistory/AccountHistory'; +import { t } from 'i18next'; const { TabPane } = Tabs; @@ -35,7 +36,7 @@ const History = () => { diff --git a/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx b/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx index 5b6afd8..01b00a3 100644 --- a/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx +++ b/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx @@ -2,6 +2,7 @@ import { ProCard } from '@ant-design/pro-components'; import * as React from 'react'; import InProgress from '@/pages/property/InProgress'; import { Badge } from 'antd'; +import { t } from 'i18next'; interface IPropertyHistoryTabsProps { } @@ -14,12 +15,12 @@ const PropertyHistoryTabs: React.FunctionComponent = tabs={{ items: [ { - label: '完成', + label: `${t('assets.完成')}`, key: '完成', children: '', }, { - label: 進行中, + label: {t('assets.進行中')}, key: '進行中', children: , }, diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index e5c3579..3c4de12 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -203,10 +203,10 @@ const RegisterPage = () => { onChange={(e) => setChecked(e.target.checked)} > - {t('auth.我已閱讀並同意')}客戶協議書 - 風險披露聲明 - 免責聲明 - 保密協議 + {t('auth.我已閱讀並同意')}{t('layout.客戶協議書')} + {t('layout.風險披露聲明')} + {t('layout.免責聲明')} + {t('layout.保密協議')} diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index 262726c..dc2bba0 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -3,12 +3,12 @@ import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import DepositUsdtTrc20 from './components/DepositUsdtTrc20'; import { useState } from 'react'; +import { t } from 'i18next'; -interface IDepositProps { -} +interface IDepositProps {} const Deposit: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; const [OpenDepostUsdtTrc20, setOpenDepostUsdtTrc20] = useState(false); const [form] = Form.useForm(); @@ -21,44 +21,71 @@ const Deposit: React.FunctionComponent = (props) => { requiredMark={false} form={form} > - - - USDT-TRC20 + + + USDT-TRC20 超過限額。您尚未通過 - - - }]} + label={t('assets.我要存入')} + name='我要存入' + rules={[ + { + required: true, + message: ( + + {t('assets.超過限額')} + + + ), + }, + ]} extra='≒1.00 USDT' > - + - - - setOpenDepostUsdtTrc20(false)} /> + setOpenDepostUsdtTrc20(false)} + />
    ); }; diff --git a/src/pages/property/InProgress.tsx b/src/pages/property/InProgress.tsx index 2fb9d17..49085c5 100644 --- a/src/pages/property/InProgress.tsx +++ b/src/pages/property/InProgress.tsx @@ -1,6 +1,7 @@ import { useState } from 'react'; import { List, Space, Tag, Divider, Input } from 'antd'; import * as React from 'react'; +import { t } from 'i18next'; interface IInProgressProps {} @@ -45,34 +46,38 @@ const InProgress: React.FunctionComponent = () => { return ( <> -
    +
    handleFilterChange('all')} > - 全部 + {t('assets.全部')} handleFilterChange('in')} > - 入金 + {t('assets.入金')} handleFilterChange('out')} > - 出金 + {t('assets.出金')} handleFilterChange('transfer')} > - 轉帳 + {t('assets.轉帳')} - +
    = () => { description={
    {item.account &&
    帳戶:{item.account}
    } - {item.from &&
    從:{item.from}
    } + {item.from && ( +
    + {t('assets.從')}:{item.from} +
    + )} {item.to &&
    轉至:{item.to}
    } -
    流水號:{item.serialNum}
    -
    建立時間:{item.creatDate}
    +
    + {t('assets.流水號')}:{item.serialNum} +
    +
    + {t('assets.建立時間')}:{item.creatDate} +
    } /> diff --git a/src/pages/property/Transfer.tsx b/src/pages/property/Transfer.tsx index edb5f16..39ab380 100644 --- a/src/pages/property/Transfer.tsx +++ b/src/pages/property/Transfer.tsx @@ -2,6 +2,7 @@ import { Button, Form, Input, Space } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import SafetyVerification from './components/SafetyVerification'; +import { t } from 'i18next'; interface ITransferProps {} @@ -25,7 +26,7 @@ const Transfer: React.FunctionComponent = (props) => { form={form} > @@ -37,7 +38,7 @@ const Transfer: React.FunctionComponent = (props) => { > @@ -57,7 +58,7 @@ const Transfer: React.FunctionComponent = (props) => { htmlType='button' onClick={onReset} > - 清除 + {t('assets.清除')} diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 904aaa2..04d06be 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -2,6 +2,7 @@ import { Button, Form, Input, Select, Space, Tooltip, Typography } from 'antd'; import * as React from 'react'; import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; import SafetyVerification from './components/SafetyVerification'; +import { t } from 'i18next'; interface IWithdrawProps {} @@ -48,7 +49,7 @@ const Withdraw: React.FunctionComponent = (props) => { - 使用轉帳功能,將其他帳戶的可用資金轉移至寶泰帳戶後進行出金 + 使用{t('assets.轉帳')}功能,將其他帳戶的可用資金轉移至寶泰帳戶後進行出金
    } > @@ -58,7 +59,7 @@ const Withdraw: React.FunctionComponent = (props) => { @@ -66,13 +67,13 @@ const Withdraw: React.FunctionComponent = (props) => { @@ -81,13 +82,13 @@ const Withdraw: React.FunctionComponent = (props) => { = (props) => { htmlType='button' onClick={onReset} > - 清除 + {t('assets.清除')} - 沒有加密貨幣錢包嗎? + {t('assets.沒有加密貨幣錢包嗎')} - 選擇下列平台 開始支付 + {t('assets.選擇下列平台')} = ({ ope align='center' vertical > - 收款地址 + {t('assets.收款地址')} = ({ ope = ({ style={{ width: 100 }} onClick={onCancel} > - 取消 + {t('account.取消')} @@ -245,19 +245,19 @@ const SafetyVerification: React.FunctionComponent = ({ borderBottom: '1px solid #353535', }} > - 手續費: + {t('assets.手續費')}: gmail
    - 提取為: + {t('assets.提取為')}: gmail
    - 出金匯率: + {t('assets.出金匯率')}: gmail
    - 提取至
    + {t('assets.提取至')}
    {withdrawal} @@ -288,7 +288,7 @@ const SafetyVerification: React.FunctionComponent = ({ style={{ width: 100 }} onClick={onCancel} > - 取消 + {t('account.取消')}
    @@ -342,7 +342,7 @@ const SafetyVerification: React.FunctionComponent = ({ borderBottom: '1px solid #353535', }} > - 手續費: + {t('assets.手續費')}: gmail
    @@ -355,7 +355,7 @@ const SafetyVerification: React.FunctionComponent = ({ style={{ width: 100 }} onClick={onCancel} > - 取消 + {t('account.取消')}
    diff --git a/src/pages/property/components/TransferLoading.tsx b/src/pages/property/components/TransferLoading.tsx index 2c26ceb..886a396 100644 --- a/src/pages/property/components/TransferLoading.tsx +++ b/src/pages/property/components/TransferLoading.tsx @@ -3,6 +3,7 @@ import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '@/pages/PublicLayout/UserChat'; +import { t } from 'i18next'; const TransferLoading = () => { const [open, setOpen] = useState(true); @@ -26,7 +27,7 @@ const TransferLoading = () => { className='tight' level={3} > - 轉帳處理中 + {t('assets.轉帳')}{t('assets.處理中')}
    流水號: @@ -64,7 +65,7 @@ const TransferLoading = () => { style={{ width: '100%', textAlign: 'left' }} >
    - 從: + {t('assets.從')}: 2131421412412
    @@ -80,7 +81,7 @@ const TransferLoading = () => {
    diff --git a/src/pages/property/components/USDTLoading.tsx b/src/pages/property/components/USDTLoading.tsx index 999c2dc..70ff139 100644 --- a/src/pages/property/components/USDTLoading.tsx +++ b/src/pages/property/components/USDTLoading.tsx @@ -3,6 +3,7 @@ import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '@/pages/PublicLayout/UserChat'; +import { t } from 'i18next'; const USDTLoading = () => { const [open, setOpen] = useState(true); @@ -76,7 +77,7 @@ const USDTLoading = () => {
    - 收款地址 + {t('assets.收款地址')} {
    diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx index 4ee37f4..4ebb48a 100644 --- a/src/pages/property/components/UseLoading.tsx +++ b/src/pages/property/components/UseLoading.tsx @@ -1,11 +1,29 @@ -import { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '../../PublicLayout/UserChat'; +import { useTranslation } from 'react-i18next'; const useLogin = () => { const [open, setOpen] = useState(true); + const { t, i18n } = useTranslation(); + + useEffect(() => { + // 监听语言变化,更新按钮文本 + i18n.on('languageChanged', () => { + // 强制更新组件,使按钮文本刷新 + forceUpdate(); + }); + return () => { + i18n.off('languageChanged'); + }; + }, []); + + const forceUpdate = () => { + setOpen(false); // 关闭 Modal 触发重新渲染 + setTimeout(() => setOpen(true), 0); // 延时打开 Modal,确保刷新 + }; const onCancel = () => { setOpen(false); @@ -22,10 +40,7 @@ const useLogin = () => { onCancel={onCancel} title={
    - + 出金申請成功
    @@ -49,28 +64,18 @@ const useLogin = () => {
    - } + indicator={} /> 預計到帳時間 30分鐘
    - +
    - 提取為: + {t('assets.提取為')}: gmail
    - 提取至
    123
    + {t('assets.提取至')}
    123
    錢包地址: @@ -95,7 +100,7 @@ const useLogin = () => {
    diff --git a/src/pages/property/index.tsx b/src/pages/property/index.tsx index 1bb1041..fdf3a5d 100644 --- a/src/pages/property/index.tsx +++ b/src/pages/property/index.tsx @@ -5,6 +5,7 @@ import Deposit from './Deposit'; import Withdraw from './Withdraw'; import Transfer from './Transfer'; import InProgress from './InProgress'; +import { t } from 'i18next'; const { TabPane } = Tabs; @@ -27,25 +28,25 @@ const Property = () => { onChange={handleTabChange} > diff --git a/src/pages/user/components/KYCModal.tsx b/src/pages/user/components/KYCModal.tsx index 183f9e9..74ed949 100644 --- a/src/pages/user/components/KYCModal.tsx +++ b/src/pages/user/components/KYCModal.tsx @@ -1,6 +1,7 @@ import { IdcardOutlined } from '@ant-design/icons'; import { CheckCard, ProForm, ProFormDatePicker, ProFormSelect, ProFormText, ProFormUploadButton, StepsForm } from '@ant-design/pro-components'; import { Modal, Typography, message } from 'antd'; +import { t } from 'i18next'; import * as React from 'react'; import { FaPassport } from "react-icons/fa"; @@ -38,7 +39,7 @@ const KYCModal: React.FunctionComponent = ({ open, onCancel }) = title={
    實名驗證 - 通過實名驗證以開通 交易&出金功能! + {t('assets.通過實名驗證')}
    } open={open} footer={submitter} diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index c1ce59f..c0e082b 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -6,6 +6,7 @@ import logo from '../../assets/PTFintech_logo.png' import KYCModal from './components/KYCModal'; import { useState } from 'react'; import EditBank from '@/components/EditBank'; +import { t } from 'i18next'; interface IUserProps { } @@ -18,7 +19,7 @@ const User: React.FunctionComponent = (props) => {
    { event.stopPropagation(); }}> - +
    ); @@ -118,7 +119,7 @@ const User: React.FunctionComponent = (props) => { color="success" icon={} > - 通過 + {t('assets.通過')} , children: diff --git a/src/utils/calendarLocal.ts b/src/utils/calendarLocal.ts index 72bd3be..661987e 100644 --- a/src/utils/calendarLocal.ts +++ b/src/utils/calendarLocal.ts @@ -1,115 +1,90 @@ -import { PickerLocale } from "antd/es/date-picker/generatePicker"; +import { PickerLocale } from 'antd/es/date-picker/generatePicker'; +import { t } from 'i18next'; const en = { lang: { - locale: "en_US", - placeholder: "Select date", - rangePlaceholder: ["Start date", "End date"], - today: "Today", - now: "Now", - backToToday: "Back to today", - ok: "OK", - clear: "Clear", - month: "Month", - year: "Year", - timeSelect: "Select time", - dateSelect: "Select date", - monthSelect: "Choose a month", - yearSelect: "Choose a year", - decadeSelect: "Choose a decade", - yearFormat: "YYYY", - dateFormat: "M/D/YYYY", - dayFormat: "D", - dateTimeFormat: "M/D/YYYY HH:mm:ss", - monthFormat: "MMMM", + locale: 'en_US', + placeholder: 'Select date', + rangePlaceholder: ['Start date', 'End date'], + today: 'Today', + now: 'Now', + backToToday: 'Back to today', + ok: 'OK', + clear: 'Clear', + month: 'Month', + year: 'Year', + timeSelect: 'Select time', + dateSelect: 'Select date', + monthSelect: 'Choose a month', + yearSelect: 'Choose a year', + decadeSelect: 'Choose a decade', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthFormat: 'MMMM', monthBeforeYear: true, - previousMonth: "Previous month (PageUp)", - nextMonth: "Next month (PageDown)", - previousYear: "Last year (Control + left)", - nextYear: "Next year (Control + right)", - previousDecade: "Last decade", - nextDecade: "Next decade", - previousCentury: "Last century", - nextCentury: "Next century", - shortWeekDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - shortMonths: [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - ], + previousMonth: 'Previous month (PageUp)', + nextMonth: 'Next month (PageDown)', + previousYear: 'Last year (Control + left)', + nextYear: 'Next year (Control + right)', + previousDecade: 'Last decade', + nextDecade: 'Next decade', + previousCentury: 'Last century', + nextCentury: 'Next century', + shortWeekDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], }, timePickerLocale: { - placeholder: "Select time", + placeholder: 'Select time', }, - dateFormat: "YYYY-MM-DD", - dateTimeFormat: "YYYY-MM-DD HH:mm:ss", - weekFormat: "YYYY-wo", - monthFormat: "YYYY-MM", + dateFormat: 'YYYY-MM-DD', + dateTimeFormat: 'YYYY-MM-DD HH:mm:ss', + weekFormat: 'YYYY-wo', + monthFormat: 'YYYY-MM', }; const tw = { lang: { - locale: "ch_tw", - placeholder: "選擇日期", - rangePlaceholder: ["起始日期", "結束日期"], - today: "今天", - now: "現在", - backToToday: "返回今天", - ok: "確定", - clear: "清除", - month: "月", - year: "年", - timeSelect: "選擇時間", - dateSelect: "選擇日期", - monthSelect: "選擇月份", - yearSelect: "選擇年份", - decadeSelect: "選擇年代", - yearFormat: "YYYY", - dateFormat: "M/D/YYYY", - dayFormat: "D", - dateTimeFormat: "M/D/YYYY HH:mm:ss", - monthFormat: "MMMM", + locale: 'ch_tw', + placeholder: '選擇日期', + rangePlaceholder: [`${t('assets.開始日期')}`, `${t('assets.結束日期')}`], + today: '今天', + now: '現在', + backToToday: '返回今天', + ok: '確定', + clear: `${t('assets.清除')}`, + month: '月', + year: '年', + timeSelect: '選擇時間', + dateSelect: '選擇日期', + monthSelect: '選擇月份', + yearSelect: '選擇年份', + decadeSelect: '選擇年代', + yearFormat: 'YYYY', + dateFormat: 'M/D/YYYY', + dayFormat: 'D', + dateTimeFormat: 'M/D/YYYY HH:mm:ss', + monthFormat: 'MMMM', monthBeforeYear: true, - previousMonth: "上個月 (PageUp)", - nextMonth: "下個月 (PageDown)", - previousYear: "上一年 (Ctrl + ←)", - nextYear: "下一年 (Ctrl + →)", - previousDecade: "上個年代", - nextDecade: "下個年代", - previousCentury: "上個世紀", - nextCentury: "下個世紀", - shortWeekDays: ["日", "一", "二", "三", "四", "五", "六"], - shortMonths: [ - "一月", - "二月", - "三月", - "四月", - "五月", - "六月", - "七月", - "八月", - "九月", - "十月", - "十一月", - "十二月", - ], + previousMonth: '上個月 (PageUp)', + nextMonth: '下個月 (PageDown)', + previousYear: '上一年 (Ctrl + ←)', + nextYear: '下一年 (Ctrl + →)', + previousDecade: '上個年代', + nextDecade: '下個年代', + previousCentury: '上個世紀', + nextCentury: '下個世紀', + shortWeekDays: ['日', '一', '二', '三', '四', '五', '六'], + shortMonths: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], }, timePickerLocale: { - placeholder: "選擇時間", + placeholder: '選擇時間', }, - dateFormat: "YYYY-MM-DD", - dateTimeFormat: "YYYY-MM-DD HH:mm:ss", - weekFormat: "YYYY-wo", - monthFormat: "YYYY-MM", + dateFormat: 'YYYY-MM-DD', + dateTimeFormat: 'YYYY-MM-DD HH:mm:ss', + weekFormat: 'YYYY-wo', + monthFormat: 'YYYY-MM', } as PickerLocale; export { en, tw }; diff --git a/src/utils/options.ts b/src/utils/options.ts index ae8a2a8..7c312e3 100644 --- a/src/utils/options.ts +++ b/src/utils/options.ts @@ -1,3 +1,4 @@ +import { t } from 'i18next'; import { CountryKeyNum, VerifyStatusNum } from './enums'; @@ -5,7 +6,7 @@ import { CountryKeyNum, VerifyStatusNum } from './enums'; const verifyStatusOptions = [ { value: VerifyStatusNum.Verifing, label: '驗證中' }, { value: VerifyStatusNum.Fail, label: '失敗' }, - { value: VerifyStatusNum.Pass, label: '通過' }, + { value: VerifyStatusNum.Pass, label: `${t('assets.通過')}` }, ]; const countryOptions = [ From afb978afc587ea324c536d1ad5d3c0fbcbea6b6a Mon Sep 17 00:00:00 2001 From: kirito_li Date: Thu, 20 Jun 2024 18:04:27 +0800 Subject: [PATCH 024/118] login and register debug --- react-i18n/package-lock.json | 0 src/I18n/I18n.ts | 2 - src/I18n/TranslationTypes/TranslationTypes.ts | 4 + .../TranslationTypes/components/report.ts | 28 + src/I18n/TranslationTypes/components/serve.ts | 17 + src/I18n/ch/ch.ts | 4 + src/I18n/ch/components/report.ts | 30 + src/I18n/ch/components/serve.ts | 20 + src/I18n/en/components/report.ts | 30 + src/I18n/en/components/serve.ts | 20 + src/I18n/en/en.ts | 4 + src/I18n/index.ts | 1 + src/I18n/vi/components/report.ts | 30 + src/I18n/vi/components/serve.ts | 19 + src/I18n/vi/vi.ts | 4 + src/api/auth/useLogin.ts | 58 +- src/components/AccountChart.tsx | 13 +- src/components/AddAccount.tsx | 5 +- src/components/ChangeBank.tsx | 7 +- src/components/DownloadMT4.tsx | 3 +- src/components/EditBank.tsx | 5 +- src/components/EditPassword.tsx | 7 +- src/components/GoToTrade.tsx | 8 +- .../InvestmentMarket/InvestmentMarket.tsx | 66 +- src/components/ProtectBanner.tsx | 12 +- src/components/SelectAccount.tsx | 8 +- src/components/TradingPlatform.tsx | 241 +-- src/main.tsx | 55 +- src/pages/AppRouter.tsx | 111 +- src/pages/AuthLayout/AuthLayout.tsx | 19 +- src/pages/AuthLayout/components/UseFooter.tsx | 17 +- src/pages/HotInvestMents/HotInvestMents.tsx | 41 +- src/pages/HotInvestMents/MyFocus.tsx | 37 +- src/pages/K100U/K100U.tsx | 18 +- src/pages/PublicLayout/PublicLayout.tsx | 121 +- src/pages/PublicLayout/UserChat.tsx | 17 +- src/pages/account/components/AccountMenu.tsx | 7 +- src/pages/account/index.tsx | 16 +- src/pages/currencydetails/CurrencyDetails.tsx | 3 +- .../history/accountHistory/AccountHistory.tsx | 52 +- .../history/accountHistory/ClosePosition.tsx | 112 +- src/pages/history/index.tsx | 6 +- .../propertyHistory/PropertyHistoryTabs.tsx | 4 +- src/pages/login/LoginPage.tsx | 59 +- src/pages/login/RegisterPage.tsx | 282 ++- src/pages/property/Deposit.tsx | 4 +- src/pages/property/InProgress.tsx | 9 +- src/pages/property/Transfer.tsx | 4 +- src/pages/property/Withdraw.tsx | 4 +- .../property/components/DepositUsdtTrc20.tsx | 6 +- .../components/SafetyVerification.tsx | 6 +- .../property/components/TransferLoading.tsx | 4 +- src/pages/property/components/USDTLoading.tsx | 4 +- src/pages/property/components/UseLoading.tsx | 11 +- src/pages/property/index.tsx | 4 +- src/pages/user/components/KYCModal.tsx | 162 +- src/pages/user/index.tsx | 4 +- src/utils/calendarLocal.ts | 3 +- src/utils/options.ts | 3 +- src/utils/useTestMaster.ts | 108 +- src/vite-env.d.ts | 34 + yarn.lock | 1815 ++++++++--------- 62 files changed, 2056 insertions(+), 1752 deletions(-) create mode 100644 react-i18n/package-lock.json create mode 100644 src/I18n/TranslationTypes/components/report.ts create mode 100644 src/I18n/TranslationTypes/components/serve.ts create mode 100644 src/I18n/ch/components/report.ts create mode 100644 src/I18n/ch/components/serve.ts create mode 100644 src/I18n/en/components/report.ts create mode 100644 src/I18n/en/components/serve.ts create mode 100644 src/I18n/index.ts create mode 100644 src/I18n/vi/components/report.ts create mode 100644 src/I18n/vi/components/serve.ts diff --git a/react-i18n/package-lock.json b/react-i18n/package-lock.json new file mode 100644 index 0000000..e69de29 diff --git a/src/I18n/I18n.ts b/src/I18n/I18n.ts index 50e1496..d91e050 100644 --- a/src/I18n/I18n.ts +++ b/src/I18n/I18n.ts @@ -1,5 +1,3 @@ -// i18n.ts - import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; import en from './en/en'; diff --git a/src/I18n/TranslationTypes/TranslationTypes.ts b/src/I18n/TranslationTypes/TranslationTypes.ts index 55b28ba..c00d75f 100644 --- a/src/I18n/TranslationTypes/TranslationTypes.ts +++ b/src/I18n/TranslationTypes/TranslationTypes.ts @@ -3,6 +3,8 @@ import { layout } from './components/layout'; import { nav } from './components/nav'; import { account } from './components/account'; import { assets } from './components/assets'; +import { report } from './components/report'; +import { serve } from './components/serve'; export type Translation = { register: string; @@ -12,4 +14,6 @@ export type Translation = { account: account; nav: nav; assets: assets; + report: report; + serve: serve; }; diff --git a/src/I18n/TranslationTypes/components/report.ts b/src/I18n/TranslationTypes/components/report.ts new file mode 100644 index 0000000..ed87204 --- /dev/null +++ b/src/I18n/TranslationTypes/components/report.ts @@ -0,0 +1,28 @@ +export type report = { + 報表查詢: string; + 帳戶報表: string; + 資產報表: string; + 我的總價值: string; + 寶泰帳戶: string; + MT4帳戶: string; + MT5帳戶: string; + 貨幣: string; + 指數: string; + 股票: string; + 大宗商品: string; + 加密貨幣: string; + 平倉: string; + 持倉: string; + 掛單: string; + 開立倉位: string; + 單位: string; + 開倉: string; + 止損: string; + 止盈: string; + 傭金: string; + 稅收: string; + 過夜利息: string; + 盈虧: string; + 損益: string; + 浮動損益: string; +}; diff --git a/src/I18n/TranslationTypes/components/serve.ts b/src/I18n/TranslationTypes/components/serve.ts new file mode 100644 index 0000000..4e63993 --- /dev/null +++ b/src/I18n/TranslationTypes/components/serve.ts @@ -0,0 +1,17 @@ +export type serve = { + 客戶服務: string; + 投資市場: string; + 我的關注: string; + 新聞: string; + 工具: string; + 每日波動: string; + 漲跌幅: string; + 一天: string; + 賣出: string; + 買入: string; + 五十二周區間: string; + 情緒: string; + 交易: string; + 關注: string; + 前往交易: string; +}; diff --git a/src/I18n/ch/ch.ts b/src/I18n/ch/ch.ts index 7053740..0ca502b 100644 --- a/src/I18n/ch/ch.ts +++ b/src/I18n/ch/ch.ts @@ -4,6 +4,8 @@ import layout from './components/layout'; import nav from './components/nav'; import account from './components/account'; import assets from './components/assets'; +import report from './components/report'; +import serve from './components/serve'; const ch: Translation = { register: '註冊', @@ -13,6 +15,8 @@ const ch: Translation = { nav:nav, account: account, assets:assets, + report: report, + serve: serve, }; export default ch; diff --git a/src/I18n/ch/components/report.ts b/src/I18n/ch/components/report.ts new file mode 100644 index 0000000..c9bd48a --- /dev/null +++ b/src/I18n/ch/components/report.ts @@ -0,0 +1,30 @@ +const report= { + 報表查詢:'報表查詢', + 帳戶報表:'帳戶報表', + 資產報表:'資產報表', + 我的總價值:'我的總價值', + 寶泰帳戶:'寶泰帳戶', + MT4帳戶:'MT4帳戶', + MT5帳戶:'MT5帳戶', + 貨幣:'貨幣', + 指數:'指數', + 股票:'股票', + 大宗商品:'大宗商品', + 加密貨幣:'加密貨幣', + 平倉:'平倉', + 持倉:'持倉', + 掛單:'掛單', + 開立倉位:'開立倉位', + 單位:'單位', + 開倉:'開倉', + 止損:'止損', + 止盈:'止盈', + 傭金:'傭金', + 稅收:'稅收', + 過夜利息:'過夜利息', + 盈虧:'盈虧', + 損益:'損益', + 浮動損益:'浮動損益', +}; + +export default report; \ No newline at end of file diff --git a/src/I18n/ch/components/serve.ts b/src/I18n/ch/components/serve.ts new file mode 100644 index 0000000..d50ecb2 --- /dev/null +++ b/src/I18n/ch/components/serve.ts @@ -0,0 +1,20 @@ +const serve = { + 客戶服務: '客戶服務', + 投資市場: '投資市場', + 我的關注: '我的關注', + 新聞: '新聞', + 工具: '工具', + 每日波動: '每日波動', + 漲跌幅: '漲跌幅', + 一天: '1天', + 賣出: '賣出', + 買入: '買入', + 五十二周區間: '52周區間', + 情緒: '情緒', + 交易: '交易', + 關注: '關注', + 前往交易: '前往交易', + }; + + export default serve; + \ No newline at end of file diff --git a/src/I18n/en/components/report.ts b/src/I18n/en/components/report.ts new file mode 100644 index 0000000..c9bd48a --- /dev/null +++ b/src/I18n/en/components/report.ts @@ -0,0 +1,30 @@ +const report= { + 報表查詢:'報表查詢', + 帳戶報表:'帳戶報表', + 資產報表:'資產報表', + 我的總價值:'我的總價值', + 寶泰帳戶:'寶泰帳戶', + MT4帳戶:'MT4帳戶', + MT5帳戶:'MT5帳戶', + 貨幣:'貨幣', + 指數:'指數', + 股票:'股票', + 大宗商品:'大宗商品', + 加密貨幣:'加密貨幣', + 平倉:'平倉', + 持倉:'持倉', + 掛單:'掛單', + 開立倉位:'開立倉位', + 單位:'單位', + 開倉:'開倉', + 止損:'止損', + 止盈:'止盈', + 傭金:'傭金', + 稅收:'稅收', + 過夜利息:'過夜利息', + 盈虧:'盈虧', + 損益:'損益', + 浮動損益:'浮動損益', +}; + +export default report; \ No newline at end of file diff --git a/src/I18n/en/components/serve.ts b/src/I18n/en/components/serve.ts new file mode 100644 index 0000000..d50ecb2 --- /dev/null +++ b/src/I18n/en/components/serve.ts @@ -0,0 +1,20 @@ +const serve = { + 客戶服務: '客戶服務', + 投資市場: '投資市場', + 我的關注: '我的關注', + 新聞: '新聞', + 工具: '工具', + 每日波動: '每日波動', + 漲跌幅: '漲跌幅', + 一天: '1天', + 賣出: '賣出', + 買入: '買入', + 五十二周區間: '52周區間', + 情緒: '情緒', + 交易: '交易', + 關注: '關注', + 前往交易: '前往交易', + }; + + export default serve; + \ No newline at end of file diff --git a/src/I18n/en/en.ts b/src/I18n/en/en.ts index 3bdbe72..874bfed 100644 --- a/src/I18n/en/en.ts +++ b/src/I18n/en/en.ts @@ -4,6 +4,8 @@ import layout from './components/layout'; import nav from './components/nav'; import account from './components/account'; import assets from './components/assets'; +import report from './components/report'; +import serve from './components/serve'; const en: Translation = { register: 'Register', @@ -13,6 +15,8 @@ const en: Translation = { nav:nav, account: account, assets:assets, + report: report, + serve: serve }; export default en; diff --git a/src/I18n/index.ts b/src/I18n/index.ts new file mode 100644 index 0000000..62d2d91 --- /dev/null +++ b/src/I18n/index.ts @@ -0,0 +1 @@ +export * from './I18n'; \ No newline at end of file diff --git a/src/I18n/vi/components/report.ts b/src/I18n/vi/components/report.ts new file mode 100644 index 0000000..ae1ad8e --- /dev/null +++ b/src/I18n/vi/components/report.ts @@ -0,0 +1,30 @@ +const report = { + 報表查詢: 'Báo cáo điều tra', + 帳戶報表: 'Báo cáo khách hàng', + 資產報表: 'Báo cáo tài sản', + 我的總價值: 'Tổng giá trị của tôi', + 寶泰帳戶: 'Tài khoản Bảo Thái', + MT4帳戶: 'Tài khoản MT4', + MT5帳戶: 'Tài khoản MT5', + 貨幣: 'Tiền tệ', + 指數: 'Chỉ số', + 股票: 'Cổ phiếu', + 大宗商品: 'Số lượng lớn hàng hóa', + 加密貨幣: 'Tiền điện tử', + 平倉: 'Vị thế đóng', + 持倉: 'Vị thế đặc biệt', + 掛單: 'Lệnh chờ', + 開立倉位: 'Mở vị thế', + 單位: 'Đơn vị', + 開倉: 'Mở lệnh', + 止損: 'Dừng lỗ', + 止盈: 'Dừng lợi nhuận', + 傭金: 'Tiền hoa hồng', + 稅收: 'Thuế', + 過夜利息: 'Lãi suất qua đêm', + 盈虧: 'Lời lỗ', + 損益: 'Lỗ lãi', + 浮動損益: 'Lãi và lỗ thả nổi', +}; + +export default report; diff --git a/src/I18n/vi/components/serve.ts b/src/I18n/vi/components/serve.ts new file mode 100644 index 0000000..2df5004 --- /dev/null +++ b/src/I18n/vi/components/serve.ts @@ -0,0 +1,19 @@ +const serve = { + 客戶服務: 'Chăm sóc khách hàng', + 投資市場: 'Thị trường đầu tư', + 我的關注: 'Sự quan tâm của tôi', + 新聞: 'Tin tức', + 工具: 'Công cụ', + 每日波動: 'Biến động hàng ngày', + 漲跌幅: 'Thay đổi giá', + 一天: '1 Ngày', + 賣出: 'Bán ra', + 買入: 'Mua vào', + 五十二周區間: 'Phạm vi 52 tuần', + 情緒: 'Trạng thái', + 交易: 'Giao dịch', + 關注: 'Quan tâm', + 前往交易: 'Đi tới giao dịch', +}; + +export default serve; diff --git a/src/I18n/vi/vi.ts b/src/I18n/vi/vi.ts index 97b563d..3488799 100644 --- a/src/I18n/vi/vi.ts +++ b/src/I18n/vi/vi.ts @@ -4,6 +4,8 @@ import layout from './components/layout'; import nav from './components/nav'; import account from './components/account'; import assets from './components/assets'; +import report from './components/report'; +import serve from './components/serve'; const vi: Translation = { register: 'Register', @@ -13,6 +15,8 @@ const vi: Translation = { nav:nav, account: account, assets: assets, + report: report, + serve: serve }; export default vi; diff --git a/src/api/auth/useLogin.ts b/src/api/auth/useLogin.ts index 9e6d47c..aad194d 100644 --- a/src/api/auth/useLogin.ts +++ b/src/api/auth/useLogin.ts @@ -1,35 +1,29 @@ -import { UseTestMutationProps, useTestMutation } from "@/utils"; -import { axiosRoot } from "@/utils/axiosRoot"; - -type LoginRes = { - id: string; - token: string; -}; -type LoginProps ={ - email:string; - password: string; -} -type Other ={} - -const useLogin =(useProps: UseTestMutationProps) =>{ - const {...config} = useProps; - - const testMutation = useTestMutation({ - ...config, - mutationFn: (props) =>{ - const request = axiosRoot.post('/login', props).then(({data})=>data); - return request; +const express = require('express'); +const router = express.Router(); +const User = require('../models/User'); +router.post( + '/login', + async ( + req: { body: { email: any; password: any } }, + res: { + status: (arg0: number) => { (): any; new (): any; json: { (arg0: { message: string }): any; new (): any } }; }, - delay: 1000, - onTest: (props )=>{ - return Promise.resolve({ - id: props.email , - token: props.password, - }) + ) => { + const { email, password } = req.body; + try { + const user = await User.findOne({ email }); + if (!user) { + return res.status(400).json({ message: '用戶不存在' }); + } + if (password !== user.password) { + return res.status(400).json({ message: '密碼錯誤' }); + } + return res.status(200).json({ message: '登錄成功' }); + } catch (error) { + console.error('Login error:', error); + return res.status(500).json({ message: '內部錯誤' }); } - }) - return testMutation; -} + }, +); -export {useLogin} -export type { LoginRes, LoginProps }; +module.exports = router; diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index f0f726f..8cdf0b4 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -4,14 +4,14 @@ import { Button, Col, List, Row, Space } from 'antd'; import { CaretLeftOutlined, CaretRightOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import SelectAccount from './SelectAccount'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface IAccountChartProps { onClose?: () => void; } - const AccountChart: React.FunctionComponent = (props) => { + const { t } = useTranslation(); const { onClose } = props || {}; const handleClick = () => { @@ -102,7 +102,7 @@ const AccountChart: React.FunctionComponent = (props) => { } dataSource={dataText} renderItem={(item) => ( - +
    {item.value}
    @@ -113,11 +113,14 @@ const AccountChart: React.FunctionComponent = (props) => { direction='vertical' style={{ width: '100%' }} > - + diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx index 41bf3cd..c3b9951 100644 --- a/src/components/AddAccount.tsx +++ b/src/components/AddAccount.tsx @@ -1,11 +1,12 @@ import React, { useState } from 'react'; import { Modal, Typography, Button, Dropdown, Menu, Radio, Form, Input } from 'antd'; import Mt4 from '../assets/mt4.png'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visible, onClose }) => { const [selectedPlatform, setSelectedPlatform] = useState(null); const [accountType, setAccountType] = useState('real'); + const { t } = useTranslation(); const platforms = [ { name: 'metaTrade 4', key: 'mt4' }, @@ -36,7 +37,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib return ( {t('account.新增帳戶')}} - visible={visible} + open={visible} onCancel={onClose} footer={null} > diff --git a/src/components/ChangeBank.tsx b/src/components/ChangeBank.tsx index 2b0fef9..c0a06e2 100644 --- a/src/components/ChangeBank.tsx +++ b/src/components/ChangeBank.tsx @@ -1,14 +1,15 @@ import { UploadOutlined } from '@ant-design/icons'; import { Button, Form, Input, Modal, Typography, Upload } from 'antd'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import { useState } from 'react'; const EditBank = () => { const [open, setOpen] = useState(true); + const { t } = useTranslation(); const onCancel = () => { setOpen(false); }; - + return ( {
    } - visible={open} + open={open} destroyOnClose width={480} footer={null} diff --git a/src/components/DownloadMT4.tsx b/src/components/DownloadMT4.tsx index 443f91c..972eb5c 100644 --- a/src/components/DownloadMT4.tsx +++ b/src/components/DownloadMT4.tsx @@ -1,11 +1,12 @@ import { AndroidOutlined, AppleOutlined, DownloadOutlined, WindowsFilled } from '@ant-design/icons'; import { Button, Dropdown, MenuProps } from 'antd'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import * as React from 'react'; interface IDownloadMT4Props {} const DownloadMT4: React.FunctionComponent = (props) => { + const { t } = useTranslation(); const {} = props || {}; const items: MenuProps['items'] = [ { diff --git a/src/components/EditBank.tsx b/src/components/EditBank.tsx index ba4ec61..be666fc 100644 --- a/src/components/EditBank.tsx +++ b/src/components/EditBank.tsx @@ -2,9 +2,10 @@ import { IoWarningOutline } from 'react-icons/io5'; import { Button, Modal, Typography } from 'antd'; import React from 'react'; import SafetyVerification from '@/pages/property/components/SafetyVerification'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const EditBank: React.FC<{ open: boolean; onCancel: () => void }> = ({ open, onCancel }) => { + const { t } = useTranslation(); const [openTransfer, setOpenTransfer] = React.useState(false); const [currentStep, setCurrentStep] = React.useState('login'); const [withdrawal, setWithdrawal] = React.useState('EditBank'); @@ -29,7 +30,7 @@ const EditBank: React.FC<{ open: boolean; onCancel: () => void }> = ({ open, onC
    } - visible={open} + open={open} destroyOnClose width={480} footer={null} diff --git a/src/components/EditPassword.tsx b/src/components/EditPassword.tsx index 46c678e..7ce1b74 100644 --- a/src/components/EditPassword.tsx +++ b/src/components/EditPassword.tsx @@ -1,14 +1,15 @@ import { Button, Form, Input, Modal, Typography } from 'antd'; import React, { useState } from 'react'; import { EyeInvisibleOutlined } from '@ant-design/icons'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const EditPassword: React.FC<{ onCancel: () => void }> = ({ onCancel }) => { + const { t } = useTranslation(); const [form] = Form.useForm(); const [confirmDirty, setConfirmDirty] = useState(false); const [isSuccess, setIsSuccess] = useState(false); const [open, setOpen] = useState(true); - + const onFinish = (values: any) => { console.log('Received values:', values); setIsSuccess(true); @@ -62,7 +63,7 @@ const EditPassword: React.FC<{ onCancel: () => void }> = ({ onCancel }) => {
    } - visible={open} + open={open} destroyOnClose width={480} footer={null} diff --git a/src/components/GoToTrade.tsx b/src/components/GoToTrade.tsx index 28bc5d4..b3f2303 100644 --- a/src/components/GoToTrade.tsx +++ b/src/components/GoToTrade.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Modal, Typography, Button, Dropdown, Menu } from 'antd'; import AddAccount from './AddAccount'; // 請替換成實際的路徑 import Mt4 from '../assets/mt4.png'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface GoToTradeProps { isModalVisible: boolean; @@ -11,6 +11,8 @@ interface GoToTradeProps { } const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleCancel }) => { + const { t } = useTranslation(); + const [selectedPlatform, setSelectedPlatform] = useState(null); const [showAddAccount, setShowAddAccount] = useState(false); // 控制顯示新增帳戶彈窗的狀態 @@ -92,7 +94,7 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC } - visible={isModalVisible} + open={isModalVisible} onOk={handleOk} onCancel={handleCancel} > @@ -175,7 +177,7 @@ const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleC {showAddAccount && ( // 顯示 AddAccount 組件的條件 setShowAddAccount(false)} footer={null} // 不顯示底部按鈕 > diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index 50da32f..d334fc8 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -2,15 +2,25 @@ import { useState } from 'react'; import { Input, Tabs } from 'antd'; import Title from 'antd/lib/typography/Title'; import HotInvestMents from '../../pages/HotInvestMents/HotInvestMents'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const YourComponent = () => { const [activeTab, setActiveTab] = useState('總覽'); + const { t } = useTranslation(); const handleTabChange = (key: string) => { setActiveTab(key); }; + const tabItems = [ + { key: '總覽', label: t('nav.總覽'), content: }, + { key: '貨幣', label: t('report.貨幣'), content:
    貨幣內容
    }, + { key: '指數', label: t('report.指數'), content:
    指數內容
    }, + { key: '股票', label: t('report.股票'), content:
    股票內容
    }, + { key: '大宗商品', label: t('report.大宗商品'), content:
    大宗商品內容
    }, + { key: '加密貨幣', label: t('report.加密貨幣'), content:
    加密貨幣內容
    }, + ]; + return (
    { 额外的内容
    } // 这是选项卡附加的额外内容,可根据需要调整 - > - - {/* 總覽内容 */} - - - {/* 貨幣内容 */} - - - {/* 指數内容 */} - - - {/* 股票内容 */} - - - {/* 大宗商品内容 */} - - - {/* 加密貨幣内容 */} - - - {/* 根據 activeTab 的值顯示不同的內容 */} - {activeTab === '總覽' && } - {activeTab === '貨幣' &&
    貨幣內容
    } - {activeTab === '指數' &&
    指數內容
    } - {activeTab === '股票' &&
    股票內容
    } - {activeTab === '大宗商品' &&
    大宗商品內容
    } - {activeTab === '加密貨幣' &&
    加密貨幣內容
    } + tabBarExtraContent={
    额外的内容
    } + activeKey={activeTab} + items={tabItems.map(item => ({ + key: item.key, + label: item.label, + children: item.content, + }))} + /> ); }; diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 416e6f8..7154461 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -9,15 +9,22 @@ import ProtectBannerImg_2 from '../assets/ProtectBanner_img_2.png'; import ProtectBannerImg_3 from '../assets/ProtectBanner_img_3.png'; import DownloadMT4 from './DownloadMT4'; import InvestmentMarket from './InvestmentMarket/InvestmentMarket'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; + + interface IProtectBannerProps {} const ProtectBanner: React.FunctionComponent = () => { + const { t } = useTranslation(); const { Title, Text } = Typography; const [openKYCModal, setOpenKYCModal] = useState(false); const { Divider } = StatisticCard; + const ScrollToTopButton = () => { + window.location.href = '#'; // 將頁面滾動到頂部 + } + return (
    {/* 尚未實名驗證 */} @@ -201,6 +208,7 @@ const ProtectBanner: React.FunctionComponent = () => { @@ -233,7 +241,7 @@ const ProtectBanner: React.FunctionComponent = () => { > 我的總價值} + title={{t('report.我的總價值')}} prefix='$' value={400000} precision={2} diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index e2f7de8..ca5d66f 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -2,13 +2,15 @@ import React, { useState } from 'react'; import { PlusOutlined } from '@ant-design/icons'; import { Button, Divider, Modal, Select } from 'antd'; import AddAccount from './AddAccount'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface ISelectAccountProps {} const SelectAccount: React.FunctionComponent = () => { + const { t } = useTranslation(); const [showAddAccount, setShowAddAccount] = useState(false); // 將 useState 放在組件內部 + const AddAccountButton = () => (
    -
    -
    - MetaTrader 4 -
    -
    MetaTrader 4
    -
    -
    {t('assets.立即下載')}
    - - WIN - - - MAC - - - Android - - - iOS - + const { t } = useTranslation(); + + const menuItems: MenuProps['items'] = [ + { + key: '1', + label: ( + +
    +
    +
    + MetaTrader 4 +
    +
    MetaTrader 4
    +
    +
    {t('assets.立即下載')}
    + + WIN + + + MAC + + + Android + + + iOS + +
    -
    -
    - MetaTrader 4 -
    -
    MetaTrader 4
    -
    -
    {t('assets.立即下載')}
    - - WIN - - - MAC - - - Android - - - iOS - +
    + MetaTrader 4 +
    +
    MetaTrader 4
    +
    +
    {t('assets.立即下載')}
    + + WIN + + + MAC + + + Android + + + iOS + +
    -
    - -
    -
    + +
    - {t('nav.其他平台')} -
    -
    - Platform 3 -
    -
    Title 2
    -
    description 3
    +
    + {t('nav.其他平台')}
    -
    -
    - Platform 3 -
    -
    Title 2
    -
    description 3
    +
    + Platform 3 +
    +
    Title 2
    +
    description 3
    +
    -
    -
    - Platform 3 -
    -
    Title 2
    -
    description 3
    +
    + Platform 3 +
    +
    Title 2
    +
    description 3
    +
    +
    +
    + Platform 3 +
    +
    Title 2
    +
    description 3
    +
    -
    - - - - ); + + + ), + }, + ]; return ( - +
    {t('nav.交易平台')}
    diff --git a/src/main.tsx b/src/main.tsx index d497ba4..43ce3b2 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -8,7 +8,7 @@ import AppRouter from './pages/AppRouter'; import FallbackLoading from './components/FallbackLoading'; import NotifyProvider from './components/NotifyProvider'; import { useThemeStore } from './store'; -import './I18n/I18n'; +import '@/I18n'; const App: React.FunctionComponent = () => { const queryClient = new QueryClient(); @@ -17,34 +17,31 @@ const App: React.FunctionComponent = () => { return ( - - - }> - - - - - {/* */} - + + + + }> + + + + ); }; diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index e818054..4c61054 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -1,4 +1,4 @@ -import { lazy, Suspense } from 'react'; +import { lazy } from 'react'; import { HashRouter, Navigate, Route, Routes } from 'react-router-dom'; const PublicLayout = lazy(() => import('./PublicLayout')); @@ -13,73 +13,66 @@ const RegisterPage = lazy(() => import('./login/RegisterPage')); const InvestmentMarket = lazy(() => import('../components/InvestmentMarket/InvestmentMarket')); const MyFocus = lazy(() => import('./HotInvestMents/MyFocus')); const CurrencyDetails = lazy(() => import('./currencydetails/CurrencyDetails')); -const K100U = lazy(() => import('./K100U/K100U')); -const AppRouter: React.FunctionComponent = () => { +const AppRouter = () => { return ( - Loading...
    }> - + + } + /> + } + > } + index + element={} /> } + path='account' + element={} /> } - > - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - } - /> - + path='property' + element={} + /> + } + /> + } + /> + } + /> } - > - } - /> - } - /> - - - + path='MyFocus' + element={} + /> + } + /> + + } + > + } + /> + } + /> + + ); }; diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 973022f..8ebe96c 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -40,23 +40,22 @@ const layoutStyle: React.CSSProperties = { position: 'relative', }; -const AuthLayout: React.FC = () => { +const AuthLayout = () => { + const { i18n } = useTranslation(); const { isDark, setIsDark } = useThemeStore(); - const { t, i18n } = useTranslation(); const { language, setLanguage } = useI18nStore(); - const oldChangeLanguage = (language: any) => { - i18n.changeLanguage(language); - }; useEffect(() => { - oldChangeLanguage(language); - }, []); + const { changeLanguage: i18nChange } = i18n || {}; + if (!i18nChange || language) return; + i18nChange(language); + }, [i18n, language]); const changeLanguage = (lng: any) => { setLanguage(lng); i18n.changeLanguage(lng); }; - const resourcesData = i18n.options.resources; + const resourcesData = i18n.options?.resources; const items = []; for (let key in resourcesData) { const newKey: any = resourcesData[key].language; @@ -83,7 +82,9 @@ const AuthLayout: React.FC = () => { style={{ padding: '0 16px', }} - className={`h-14 flex items-center justify-between w-full fixed top-0 z-10 ${isDark ? 'bg-black' : 'bg-white'}`} + className={`h-14 flex items-center justify-between w-full fixed top-0 z-10 ${ + isDark ? 'bg-black' : 'bg-white' + }`} >
    {isDark === true && ( diff --git a/src/pages/AuthLayout/components/UseFooter.tsx b/src/pages/AuthLayout/components/UseFooter.tsx index 4403380..8f22c5d 100644 --- a/src/pages/AuthLayout/components/UseFooter.tsx +++ b/src/pages/AuthLayout/components/UseFooter.tsx @@ -2,13 +2,14 @@ import { Divider, Row, Col, Typography } from 'antd'; import PTLogo from '../../../assets/logo.png'; import GooglePlay from '../../../assets/googlePlay.png'; import AppStore from '../../../assets/appStore.png'; -import { useThemeStore, useI18nStore } from '@/store'; +import { useThemeStore } from '@/store'; import PT_logo_2 from '../../../assets/PTFintech_final2-02.png'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const { Text } = Typography; const UseFooter = () => { + const { t } = useTranslation(); const { isDark } = useThemeStore(); return ( @@ -43,13 +44,13 @@ const UseFooter = () => { md={6} xxl={3} > -
    投資市場
    +
    ${t('serve.投資市場')}
      -
    • 貨幣
    • -
    • 指數
    • -
    • 股票
    • -
    • 大宗商品
    • -
    • 加密貨幣
    • +
    • {t('report.貨幣')}
    • +
    • {t('report.指數')}
    • +
    • {t('report.股票')}
    • +
    • {t('report.大宗商品')}
    • +
    • {t('report.加密貨幣')}
    { + const [isModalVisible, setIsModalVisible] = useState(false); - + const { t } = useTranslation(); + const showModal = () => { setIsModalVisible(true); }; @@ -20,57 +22,66 @@ const HotInvestments = () => { const handleOk = () => { setIsModalVisible(false); }; - + const handleCancel = () => { setIsModalVisible(false); }; - + const columns = [ { + id:1, title: '市場', dataIndex: 'market', key: 'market', }, { - title: '漲跌幅', + id:2, + title: `${t('serve.漲跌幅')}` , dataIndex: 'quoteChange', key: 'quoteChange', }, { - title: '1天', + id:3, + title: `${t('serve.一天')}`, dataIndex: 'oneDay', key: 'oneDay', }, { - title: '賣出', + id:4, + title: `${t('serve.賣出')}`, dataIndex: 'sell', key: 'sell', }, { - title: '買入', + id:5, + title: `${t('serve.買入')}`, dataIndex: 'buy', key: 'buy', }, { - title: '52周區間', + id:6, + title: `${t('serve.52周區間')}`, dataIndex: 'weeks52', key: 'weeks52', width: 200, }, { - title: '情緒', + id:7, + title: `${t('serve.情緒')}`, dataIndex: 'mood', key: 'mood', width: 200, }, { - title: '交易', + id:8, + title: `${t('serve.交易')}`, dataIndex: 'trade', key: 'trade', width: 150, }, { - title: '關注', + id:9, + title: `${t('serve.關注')}`, dataIndex: 'focus', key: 'focus', render: () => ( @@ -90,7 +101,7 @@ const HotInvestments = () => { const data = [ { - key: '1', + id:1, market: ( { ), @@ -234,7 +245,7 @@ const HotInvestments = () => {
    - 每日波動 + {t('serve.每日波動')} { + const { t } = useTranslation(); const TabContent: React.FC = ({}) => { const [focus, setFocus] = useState(false); const [isModalVisible, setIsModalVisible] = useState(false); @@ -31,50 +32,59 @@ const HotInvestments = () => { const columns = [ { + id:1, title: '市場', dataIndex: 'market', key: 'market', }, { - title: '漲跌幅', + id:2, + title: `${t('serve.漲跌幅')}`, dataIndex: 'quoteChange', key: 'quoteChange', }, { - title: '1天', + id:3, + title: `${t('serve.一天')}`, dataIndex: 'OneDay', key: 'OneDay', }, { - title: '賣出', + id:4, + title: `${t('serve.賣出')}`, dataIndex: 'sell', key: 'sell', }, { - title: '買入', + id:5, + title: `${t('serve.買入')}`, dataIndex: 'buy', key: 'buy', }, { - title: '52周區間', + id:6, + title: `${t('serve.52周區間')}`, dataIndex: 'weeks52', key: 'Weeks52', width: '200px', }, { - title: '情緒', + id:7, + title: `${t('serve.情緒')}`, dataIndex: 'mood', key: 'mood', width: '200px', }, { - title: '交易', + id:8, + title: `${t('serve.交易')}`, dataIndex: 'trade', key: 'trade', width: '150px', }, { - title: '關注', + id:9, + title: `${t('serve.關注')}`, dataIndex: 'focus', key: 'focus', render: () => ( @@ -94,6 +104,7 @@ const HotInvestments = () => { const contentData = [ { + id:1, market: 123, quoteChange: '456', OneDay: '123', @@ -177,25 +188,25 @@ const HotInvestments = () => { diff --git a/src/pages/K100U/K100U.tsx b/src/pages/K100U/K100U.tsx index 3f17b2c..6a5568f 100644 --- a/src/pages/K100U/K100U.tsx +++ b/src/pages/K100U/K100U.tsx @@ -1,13 +1,11 @@ -import React, { useState } from 'react'; -import { Layout, Menu, Button, Input, Row, Col, Typography, Space, Card, Select, Modal } from 'antd'; -import { LeftOutlined, StarOutlined } from '@ant-design/icons'; -import { Link } from 'react-router-dom'; -import GoToTrade from '../../components/GoToTrade'; -import { t } from 'i18next'; +import { useState } from 'react'; +import { Button, Typography, Select, Modal } from 'antd'; +import { useTranslation } from 'react-i18next'; const { Option } = Select; const App = () => { + const { t } = useTranslation(); const [modalVisible, setModalVisible] = useState(false); const handleConfirm = () => { @@ -133,13 +131,13 @@ const App = () => {
    setModalVisible(false)} styles={{ - content:{ - backgroundColor: 'blue' - } + content: { + backgroundColor: 'blue', + }, }} >

    確認要送出嗎?

    diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index c20383c..0077f9a 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -1,10 +1,10 @@ -import React, { useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { Link, Outlet } from 'react-router-dom'; import { ProLayout, PageContainer } from '@ant-design/pro-components'; import { HiChat } from 'react-icons/hi'; import { CiAlignRight } from 'react-icons/ci'; import { MdOutlineCurrencyExchange } from 'react-icons/md'; -import { Switch, Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space, Modal, Menu } from 'antd'; +import { Switch, Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space, Modal } from 'antd'; import { ApartmentOutlined, BellFilled, @@ -51,38 +51,43 @@ const FooterRender = () => ( const PublicLayout: React.FunctionComponent = () => { const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); const [collapsed, setCollapsed] = useState(false); + const [menuOpen, setMenuOpen] = useState(false); const [UseAccountChart, setUseAccountChart] = useState(''); - const [scrollListenerEnabled, setScrollListenerEnabled] = useState(true); const { isDark, setIsDark } = useThemeStore(); const { t, i18n } = useTranslation(); const { language, setLanguage } = useI18nStore(); - const oldChangeLanguage = (language: any) => { - i18n.changeLanguage(language); - }; + const oldChangeLanguage = useCallback( + (language: any) => { + i18n.changeLanguage(language); + }, + [language], + ); useEffect(() => { oldChangeLanguage(language); - }, []); + }, [language, oldChangeLanguage]); - useEffect(() => { - const handleScroll = () => { - if (window.scrollY > 60 && window.innerWidth < 768) { - setCollapsed(true); - } else { - setCollapsed(false); - } - }; + const handleCollapse = (collapsed: boolean) => { + setCollapsed(collapsed); + setMenuOpen(!collapsed); + }; - if (scrollListenerEnabled) { + const handleScroll = () => { + if (menuOpen) { + setCollapsed(true); + setMenuOpen(false); + } + }; + + useEffect(() => { + if (innerWidth < 768) { window.addEventListener('scroll', handleScroll); - } else { - window.removeEventListener('scroll', handleScroll); } return () => { window.removeEventListener('scroll', handleScroll); }; - }, [scrollListenerEnabled]); + }, [menuOpen]); const HeaderTitle = () => (
    @@ -105,11 +110,13 @@ const PublicLayout: React.FunctionComponent = () => {
    ); + const changeLanguage = (lng: any) => { setLanguage(lng); console.log(language); i18n.changeLanguage(lng); }; + const resourcesData = i18n.options.resources; const items: { key: string; value: any; label: JSX.Element }[] = []; for (let key in resourcesData) { @@ -137,7 +144,6 @@ const PublicLayout: React.FunctionComponent = () => { name: {t('nav.總覽')}, icon: , }, - // { path: '/public', name: 帳戶管理 }, { key: '帳戶管理', name: `${t('account.帳戶管理')}`, @@ -201,10 +207,10 @@ const PublicLayout: React.FunctionComponent = () => { }, { key: '報表查詢', - name: '報表查詢', + name: `${t('report.報表查詢')}`, icon: , children: [ - { path: '/帳戶報表', name: 帳戶報表 }, + { path: '/帳戶報表', name: {t('report.帳戶報表')} }, { path: '/資產報表', name: ( @@ -220,13 +226,13 @@ const PublicLayout: React.FunctionComponent = () => { }, { key: '客戶服務', - name: '客戶服務', + name: `${t('serve.客戶服務')}`, icon: , children: [ - { path: '/投資市場', name: 投資市場 }, - { path: '/我的關注', name: 我的關注 }, - { path: '/', name: '新聞' }, - { path: '/', name: '工具' }, + { path: '/投資市場', name: {t('serve.投資市場')} }, + { path: '/我的關注', name: {t('serve.我的關注')} }, + { path: '/', name: `${t('serve.新聞')}` }, + { path: '/', name: `${t('serve.工具')}` }, ], }, { key: '優惠活動', path: '/', name: `${t('nav.優惠活動')}`, icon: }, @@ -240,12 +246,13 @@ const PublicLayout: React.FunctionComponent = () => { ( - + {items.title}} /> )} /> ); + const watchAccountChart = () => { setUseAccountChart('UseAccountChart'); }; @@ -253,7 +260,7 @@ const PublicLayout: React.FunctionComponent = () => { return ( <> setUseAccountChart('')} footer={null} > @@ -268,35 +275,40 @@ const PublicLayout: React.FunctionComponent = () => { buttonStyle={{ display: 'flex', justifyContent: 'center', alignItems: 'center' }} buttonText={} /> - ,
    - - + ), + }, + { + key: '2', + label: ( + } /> - - - - } - /> - - - } + ), + }, + ], + }} >
    = () => { ), }} - menuFooterRender={FooterRender} collapsed={collapsed} + onCollapse={handleCollapse} + menuFooterRender={FooterRender} route={route} > = ({ buttonStyle, buttonText }) => { - const { t, i18n } = useTranslation(); - + const [visible, setVisible] = useState(false); const [messages, setMessages] = useState([{ type: 'customerService', content: '您好,有什么可以帮到您的吗?' }]); const [inputMessage, setInputMessage] = useState(''); - + const { t, i18n } = useTranslation(); + useEffect(() => { const newButtonText = t('layout.聯絡客服'); setButtonText(newButtonText); }, [i18n.language]); + - const [defaultButtonText, setButtonText] = useState(buttonText || t('layout.聯絡客服')); // 使用传入的 buttonText 或者默认值 + const [defaultButtonText, setButtonText] = useState(buttonText || t('layout.聯絡客服')); const showModal = () => { setVisible(true); @@ -48,11 +49,11 @@ const UserChat: React.FC = ({ buttonStyle, buttonText }) => { onClick={showModal} style={buttonStyle} > - {defaultButtonText} {/* 使用 defaultButtonText */} + {buttonText || defaultButtonText} {/* 使用 defaultButtonText */} = ({ buttonStyle, buttonText }) => { }} itemLayout='horizontal' dataSource={messages} - renderItem={(message) => ( - + renderItem={(message, index) => ( + } /> : null diff --git a/src/pages/account/components/AccountMenu.tsx b/src/pages/account/components/AccountMenu.tsx index f4abf52..fceb724 100644 --- a/src/pages/account/components/AccountMenu.tsx +++ b/src/pages/account/components/AccountMenu.tsx @@ -1,20 +1,23 @@ import SafetyVerification from '@/pages/property/components/SafetyVerification'; import { MoreOutlined } from '@ant-design/icons'; import { MenuProps, Dropdown, Button } from 'antd'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import * as React from 'react'; import { Link } from 'react-router-dom'; interface IAccountMenuProps {} const AccountMenu: React.FunctionComponent = (props) => { - const {} = props || {}; + const { t } = useTranslation(); + + const [openTransfer, setOpenTransfer] = React.useState(false); const [currentStep, setCurrentStep] = React.useState('login'); const [withdrawal, setWithdrawal] = React.useState('EditPassword'); const handleNextStep = () => { setOpenTransfer(true); }; + const {} = props || {}; const items: MenuProps['items'] = [ { label: ( diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index 0063381..1046d95 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -1,22 +1,24 @@ import { List, Avatar, Button, Collapse, Dropdown, Menu, Space } from 'antd'; -import { PlusOutlined } from '@ant-design/icons'; import * as React from 'react'; import logo from '../../assets/PTFintech_logo.png'; import AccountMenu from './components/AccountMenu'; import AddAccount from '../../components/AddAccount'; import mt4 from '../../assets/mt4.png'; import mt5 from '../../assets/mt5.png'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const { Panel } = Collapse; const Account = () => { + const { t } = useTranslation(); + const [isAddAccountVisible, setIsAddAccountVisible] = React.useState(false); - + const PTAccount = [ { + id:'1', account: 'email@qq.com', - accountType: '寶泰帳戶', + accountType: `${t('report.寶泰帳戶')}`, icon: logo, balance: '$ 0.00', }, @@ -37,12 +39,14 @@ const Account = () => { const MT4Account = [ { + id:'1', account: '3000000015', accountType: 'MT4', balance: '$ 0.00', isReal: '真實', }, { + id:'2', account: '3000000016', accountType: 'MT4', balance: '$ 0.00', @@ -77,7 +81,7 @@ const Account = () => { ( - ]}> + ]}> { ( - ]}> + ]}> = () => { + const { t } = useTranslation(); const location = useLocation(); const [pageState, setPageState] = React.useState(''); + React.useEffect(() => { setPageState(location.state ?? '平倉'); }, [location]); + console.log(pageState); - const handleTabChange = (key: any) => { + + const handleTabChange = (key: string) => { setPageState(key); }; + const items = [ + { + key: '平倉', + label: t('report.平倉'), + children: , + }, + { + key: '持倉', + label: t('report.持倉'), + children: , + }, + { + key: '掛單', + label: t('report.掛單'), + children: , + }, + ]; + return (
    - - - - - - - - - - - +
    ); }; diff --git a/src/pages/history/accountHistory/ClosePosition.tsx b/src/pages/history/accountHistory/ClosePosition.tsx index b20cf71..39936b3 100644 --- a/src/pages/history/accountHistory/ClosePosition.tsx +++ b/src/pages/history/accountHistory/ClosePosition.tsx @@ -1,6 +1,6 @@ import { ProCard } from '@ant-design/pro-components'; import { Tabs, Table } from 'antd'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import * as React from 'react'; interface IClosePosition {} @@ -10,9 +10,12 @@ interface TabContentProps { } const TabContent: React.FC = () => { + const { t } = useTranslation(); + const data = [ { - 開立倉位: '開立倉位()', + id:1, + 開立倉位: '開立倉位123', 單位: '買入', 開倉: '123', 平倉: '123', @@ -24,65 +27,77 @@ const TabContent: React.FC = () => { 盈虧: '123', }, { + id:2, 傭金: '0', 稅收: '0', 過夜利息: '0', - 盈虧: '損益' + 盈虧: `${t('report.損益')}` }, { - 過夜利息: '損益', + id:3, + 過夜利息:`${t('report.損益')}`, 盈虧: '-8763' }, ]; const columns = [ { - title: '開立倉位()', + id:1, + title: `${t('report.開立倉位')}`, dataIndex: '開立倉位', key: '開立倉位', }, { - title: '單位', + id:2, + title: `${t('report.單位')}`, dataIndex: '單位', key: '單位', }, { - title: '開倉', + id:3, + title: `${t('report.開倉')}`, dataIndex: '開倉', key: '開倉', }, { - title: '平倉', + id:4, + title: `${t('report.平倉')}`, dataIndex: '平倉', key: '平倉', }, { - title: '止損', + id:5, + title: `${t('report.止損')}`, dataIndex: '止損', key: '止損', }, { - title: '止盈', + id:6, + title: `${t('report.止盈')}`, dataIndex: '止盈', key: '止盈', }, { - title: '傭金', + id:7, + title:`${t('report.傭金')}`, dataIndex: '傭金', key: '傭金', }, { - title: '稅收', + id:8, + title: `${t('report.稅收')}`, dataIndex: '稅收', key: '稅收', }, { - title: '過夜利息', + id:9, + title: `${t('report.過夜利息')}`, dataIndex: '過夜利息', key: '過夜利息', }, { - title: '盈虧', + id:10, + title:`${t('report.盈虧')}`, dataIndex: '盈虧', key: '盈虧', }, @@ -98,52 +113,47 @@ const TabContent: React.FC = () => { bordered scroll={{ x: 800, y: 400 }} rowKey='id' - /> + /> ); }; const InSuccess: React.FunctionComponent = (props) => { const {} = props || {}; + const { t } = useTranslation(); + + const items = [ + { + key: '全部', + label: t('assets.全部'), + children: , + }, + { + key: '貨幣', + label: t('report.貨幣'), + children: , + }, + { + key: '指數', + label: t('report.指數'), + children: , + }, + { + key: '大宗商品', + label: t('report.大宗商品'), + children: , + }, + { + key: '加密貨幣', + label: t('report.加密貨幣'), + children: , + }, + ]; return ( - - - - - - - - - - - - - - - - - + ); }; + export default InSuccess; diff --git a/src/pages/history/index.tsx b/src/pages/history/index.tsx index dfea1d0..841e237 100644 --- a/src/pages/history/index.tsx +++ b/src/pages/history/index.tsx @@ -3,14 +3,16 @@ import { Tabs, DatePicker } from 'antd'; import { useLocation } from 'react-router-dom'; import PropertyHistoryTabs from './propertyHistory/PropertyHistoryTabs'; import AccountHistoryTabs from './accountHistory/AccountHistory'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const { TabPane } = Tabs; const History = () => { + const { t } = useTranslation(); const location = useLocation(); const [activeTab, setActiveTab] = useState('帳戶報表'); + useEffect(() => { if (location.state === '持倉') { setActiveTab('帳戶報表'); @@ -30,7 +32,7 @@ const History = () => { onChange={handleTabChange} > diff --git a/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx b/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx index 01b00a3..37b6dfc 100644 --- a/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx +++ b/src/pages/history/propertyHistory/PropertyHistoryTabs.tsx @@ -2,12 +2,14 @@ import { ProCard } from '@ant-design/pro-components'; import * as React from 'react'; import InProgress from '@/pages/property/InProgress'; import { Badge } from 'antd'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface IPropertyHistoryTabsProps { } const PropertyHistoryTabs: React.FunctionComponent = (props) => { + const { t } = useTranslation(); + const { } = props || {}; return ( diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index e0edfd0..c253d3a 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -1,41 +1,26 @@ -import { useLogin } from '@/api'; -import { Link, useNavigate } from 'react-router-dom'; +import { Link } from 'react-router-dom'; import { useState } from 'react'; -import { Button, Card, Checkbox, Form, Input, Typography, notification } from 'antd'; +import { Button, Card, Checkbox, Form, Input, Typography } from 'antd'; import { useTranslation } from 'react-i18next'; +import axios from 'axios'; const { Title, Text } = Typography; interface ILoginPageProps {} - -const LoginPage: React.FunctionComponent = (props) => { - const {} = props || {}; +const LoginPage: React.FunctionComponent = () => { + const { t } = useTranslation(); const [remember, setRemember] = useState(false); - const { t, i18n } = useTranslation(); - const navigate = useNavigate(); - // mutation - const { mutate: login, isPending: underLogin } = useLogin({ - isTest: false, - onSuccess: () => { - notification.success({ - message: '登入成功', - description: '您已成功登入,將跳轉至首頁。', - placement: 'bottom', - duration: 3, - }); - setTimeout(() => { - navigate('/'); - }, 3000); - }, - onError: () => { - notification.error({ - message: '登入失敗', - description: '登入過程中發生錯誤,請重試。', - placement: 'bottom', - }); - }, - }); + const handleLogin = async (values: { email: string; password: string }) => { + try { + const response = await axios.post('/api/login', values); + if (response.status === 200) { + console.log(response.data.message); + } + } catch (error) { + console.error('Login failed:', error); + } + }; return ( = (props) => { layout='vertical' className='w-[200px] sm:w-[380px]' style={{ minWidth: 200, marginBottom: 25 }} - onFinish={(values) => login(values)} + onFinish={handleLogin} > - + = (props) => { - diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 3c4de12..0d0cfdf 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -1,77 +1,142 @@ -import { useRegister, useSendVerificationCode, onSetPasswordFinish } from '@/api'; -import { useTestMutation } from '@/utils'; -import { ExclamationCircleOutlined } from '@ant-design/icons'; -import { Alert, Button, Card, Checkbox, Form, Input, Select, Typography, notification } from 'antd'; import { useState } from 'react'; +import { Button, Card, Checkbox, Form, Input, Select, Typography, notification } from 'antd'; import { Link, useNavigate } from 'react-router-dom'; -import UserChat from '../PublicLayout/UserChat'; +import axios from 'axios'; import { useTranslation } from 'react-i18next'; import { useI18nStore } from '@/store'; const { Title, Text } = Typography; const RegisterPage = () => { + const [userData, setUserData] = useState({ + userName: '', + userCountryCode: '', + userPhone: '', + userEmail: '', + }); const [checked, setChecked] = useState(false); const [verificationCode, setVerificationCode] = useState(''); - const [currentStep, setCurrentStep] = useState('register'); // 'register', 'verify', 'setPassword' + const [currentStep, setCurrentStep] = useState('register'); + const [underRegister, setUnderRegister] = useState(false); + const [sendCodeError, setSendCodeError] = useState(''); const [disabled, setDisabled] = useState(false); const [countdown, setCountdown] = useState('3:00'); + const [setPasswordError, setSetPasswordError] = useState(''); + const [underSetPassword, setUnderSetPassword] = useState(false); const { setLanguage } = useI18nStore(); - const navigate = useNavigate(); // 使用 useNavigate 來獲取導航函數 + const navigate = useNavigate(); - const { - mutate: register, - isPending: underRegister, - error: registerError, - verificationCode: oldVerificationCode, - } = useRegister({ onSuccess: () => setCurrentStep('verify') }); + // 填寫註冊資料 + const onRegisterFinish = async (values: any) => { + try { + setUnderRegister(true); + const response = await axios.post('/api/register', values); + if (response.status === 200) { + notification.success({ + message: '註冊成功', + description: '請登錄您的帳戶', + }); + sendVerificationCode; + setCurrentStep('verify'); + } + } catch (error: any) { + notification.error({ + message: '註冊失敗', + description: error.response.data.message || '註冊失敗,請稍後再試。', + }); + sendVerificationCode; + setCurrentStep('verify'); + } finally { + setUnderRegister(false); + } + }; - const { - sendVerificationCode, - verificationCode: newVerificationCode, - error: sendCodeError, - } = useSendVerificationCode(); + // 產生一個 6 位數的隨機數字 + const generateVerificationCode = () => { + const code = Math.floor(100000 + Math.random() * 900000); + return code.toString(); // 將數字轉換為字串格式 + }; - const { - mutate: setPassword, - isPending: underSetPassword, - error: setPasswordError, - } = useTestMutation({ - mutationFn: (values) => onSetPasswordFinish(values, navigate), // 傳遞 navigate 給 onSetPasswordFinish - onSuccess: () => { + // 發送驗證碼 + const sendVerificationCode = async (email: any) => { + try { + const verificationCode = generateVerificationCode(); // 產生驗證碼 + const response = await axios.post('/api/sendVerificationCode', { email, verificationCode }); notification.success({ - message: '註冊成功', - description: '您已成功註冊,將跳轉至登入頁面。', - placement: 'bottom', - duration: 3, + message: '驗證碼已發送', + description: '請檢查您的郵箱,並填寫驗證碼。', }); - setTimeout(() => { - navigate('/auth/loginPage'); - }, 3000); - }, - onError: () => { + setVerificationCode(verificationCode); // 將產生的驗證碼保存在狀態中,以便後續驗證 + } catch (error: any) { + setSendCodeError(error.response.data.message || '發送驗證碼失敗,請稍後再試。'); + } + }; + + // 重新發送驗證碼 + const resendVerificationCode = async () => { + setUnderRegister(true); + try { + const newVerificationCode = generateVerificationCode(); // 產生新的驗證碼 + await sendVerificationCode(newVerificationCode); // 寄送包含新驗證碼的郵件 + notification.success({ + message: '新的驗證碼已發送', + description: '請檢查您的郵箱,並填寫新的驗證碼。', + }); + setVerificationCode(newVerificationCode); // 更新狀態中的驗證碼 + } catch (error: any) { + setSendCodeError(error.response.data.message || '重新寄送驗證碼失敗,請稍後再試。'); + } finally { + setUnderRegister(false); + } + }; + + // 輸入驗證碼是否正確 + const onVerifyFinish = async (values: any) => { + setUnderRegister(true); + try { + const response = await axios.post('/api/verifyCode', values); + notification.success({ + message: '驗證成功', + description: '您可以繼續設置密碼。', + }); + setCurrentStep('setPassword'); + } catch (error: any) { notification.error({ - message: '註冊失敗', - description: '註冊過程中發生錯誤,請重試。', - placement: 'bottom', + message: '驗證失敗', + description: error.response.data.message || '驗證失敗,請確認驗證碼是否正確。', }); - }, - }); + setCurrentStep('setPassword'); + } finally { + setUnderRegister(false); + } + }; + + // 設定密碼 + const onSetPasswordFormFinish = async (values: any) => { + try { + setUnderSetPassword(true); + const response = await axios.post('/api/setPassword', values); + if (response.status === 200) { + notification.success({ + message: '設定密碼成功', + description: '您已成功註冊帳戶,請登入。', + }); + navigate('/auth/loginPage'); + } + } catch (error: any) { + setSetPasswordError(error.response.data.message || '設定密碼失敗,請稍後再試。'); + } finally { + setUnderSetPassword(false); + } + }; - const [userData, setUserData] = useState({ - userName: '', - userCountryCode: '', - userPhone: '', - userEmail: '', - }); const { t, i18n } = useTranslation(); const changeLanguage = (lng: any) => { setLanguage(lng); i18n.changeLanguage(lng); }; - const countryCodes = [ { value: '+886', label:
    changeLanguage('ch')}>{'台灣(+886)'}
    }, { value: '+1', label:
    changeLanguage('en')}>{'美國 (+1)'}
    }, @@ -96,61 +161,19 @@ const RegisterPage = () => { }, 1000); }; - const onRegisterFinish = (values: any) => { - setUserData(values); - register(values); - setCurrentStep('verify'); - }; - - const allVerificationCode = newVerificationCode || oldVerificationCode; - - const onVerifyFinish = () => { - if (verificationCode !== allVerificationCode) { - console.log(verificationCode); - console.log(allVerificationCode); - return; - } - setCurrentStep('setPassword'); - }; - - const onSetPasswordFormFinish = (values: any) => { - if (values.password !== values.confirmPassword) { - setUserData(values); - return; - } - setPassword(values); - }; - return (
    {currentStep === 'register' && ( <> - {t('auth.註冊')} -
    - - - 請確保註冊資訊是正確無誤的。不正確的資訊可能導致帳戶無法使用或無法接收重要通知。 - -
    - {registerError && ( - - {registerError.message},請檢查輸入的資訊是否正確。 - - )} + 註冊
    @@ -163,7 +186,7 @@ const RegisterPage = () => {
    { options={countryCodes} value={userData.userCountryCode} onChange={(value) => setUserData({ ...userData, userCountryCode: value })} - /> + > {
    @@ -202,12 +225,11 @@ const RegisterPage = () => { checked={checked} onChange={(e) => setChecked(e.target.checked)} > - - {t('auth.我已閱讀並同意')}{t('layout.客戶協議書')} - {t('layout.風險披露聲明')} - {t('layout.免責聲明')} - {t('layout.保密協議')} - + 我已閱讀並同意 + 客戶協議書 + 風險披露聲明 + 免責聲明 + 保密協議 - {t('auth.已有帳戶前往')}{t('auth.登入')} + 已有帳戶前往登入 )} {currentStep === 'verify' && ( <> - {t('auth.驗證電子信箱')} + 驗證電子信箱 - {t('auth.已發送驗證碼')}{userData.userEmail} + 已發送驗證碼{userData.userEmail} {sendCodeError && ( { onFinish={onVerifyFinish} > @@ -266,8 +288,9 @@ const RegisterPage = () => { type='primary' style={{ width: '100%' }} htmlType='submit' + loading={underRegister} > - {t('auth.送出')} + 送出 ) : ( @@ -277,79 +300,48 @@ const RegisterPage = () => { type='primary' style={{ width: '100%' }} disabled={disabled} + loading={underRegister} onClick={() => { handleClick(); - sendVerificationCode(userData.userEmail); + resendVerificationCode(); }} > - {disabled ? `請等待 ${countdown} 秒,重新寄送` : `${t('auth.重發驗證碼')}`} + {disabled ? `請等待 ${countdown} 秒,重新寄送` : '寄送驗證碼'} )} - {t('auth.嘗試多次仍無法收到驗證碼')} - + 嘗試多次仍無法收到驗證碼聯繫客服 )} {currentStep === 'setPassword' && ( <> - {t('auth.設定密碼')} - - 設置安全係數高的密碼 (使用字母、數字和符號的組合) - + 設定密碼 {setPasswordError && ( - {setPasswordError.message},請檢查輸入的資訊是否正確。 + {setPasswordError} )} -
    - {t('auth.姓名')} - {userData.userName} -
    -
    -
    - {t('auth.電話號碼')} - - {userData.userCountryCode} {userData.userPhone} - -
    -
    - {t('auth.電子信箱')} - {userData.userEmail} -
    -
    { style={{ width: '100%' }} htmlType='submit' > - {t('auth.設定密碼')} + 設定密碼 diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index dc2bba0..68cba3e 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -3,11 +3,13 @@ import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import DepositUsdtTrc20 from './components/DepositUsdtTrc20'; import { useState } from 'react'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface IDepositProps {} const Deposit: React.FunctionComponent = (props) => { + const { t } = useTranslation(); + const {} = props || {}; const [OpenDepostUsdtTrc20, setOpenDepostUsdtTrc20] = useState(false); diff --git a/src/pages/property/InProgress.tsx b/src/pages/property/InProgress.tsx index 49085c5..06185c5 100644 --- a/src/pages/property/InProgress.tsx +++ b/src/pages/property/InProgress.tsx @@ -1,13 +1,14 @@ import { useState } from 'react'; import { List, Space, Tag, Divider, Input } from 'antd'; import * as React from 'react'; -import { t } from 'i18next'; - +import { useTranslation } from 'react-i18next'; interface IInProgressProps {} const InProgress: React.FunctionComponent = () => { + const [filterType, setFilterType] = useState('all'); // 狀態用於過濾列表 - + const { t } = useTranslation(); + const handleFilterChange = (type: string) => { setFilterType(type); }; @@ -89,7 +90,7 @@ const InProgress: React.FunctionComponent = () => { return false; })} renderItem={(item) => ( - + diff --git a/src/pages/property/Transfer.tsx b/src/pages/property/Transfer.tsx index 39ab380..e830c8e 100644 --- a/src/pages/property/Transfer.tsx +++ b/src/pages/property/Transfer.tsx @@ -2,12 +2,14 @@ import { Button, Form, Input, Space } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import SafetyVerification from './components/SafetyVerification'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface ITransferProps {} const Transfer: React.FunctionComponent = (props) => { const {} = props || {}; + const { t } = useTranslation(); + const [openTransfer, setOpenTransfer] = React.useState(false); const [currentStep, setCurrentStep] = React.useState('login'); const [withdrawal, setWithdrawal] = React.useState('transfer'); diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 04d06be..5bc5dd5 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -2,12 +2,14 @@ import { Button, Form, Input, Select, Space, Tooltip, Typography } from 'antd'; import * as React from 'react'; import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; import SafetyVerification from './components/SafetyVerification'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface IWithdrawProps {} const Withdraw: React.FunctionComponent = (props) => { + const { t } = useTranslation(); const {} = props || {}; + const { Text } = Typography; const [form] = Form.useForm(); const [openSafetyVerification, setOpenSafetyVerification] = React.useState(false); diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index 474354f..f8d48ca 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -2,7 +2,7 @@ import { Avatar, Button, Collapse, CollapseProps, Divider, Flex, Form, List, Mod import * as React from 'react'; import K100U_logo from '../../../assets/k100u_logo.png'; import USDTLoading from './USDTLoading'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface IDepositUsdtTrc20Props { open: boolean; @@ -10,6 +10,8 @@ interface IDepositUsdtTrc20Props { } const DepositUsdtTrc20: React.FunctionComponent = ({ open, onCancel }) => { + const { t } = useTranslation(); + const { Title, Text } = Typography; const Trc20Address = 'Te48192as1d6qwd84q9w8d49q8wnoas4'; const items: CollapseProps['items'] = [ @@ -95,7 +97,7 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope itemLayout='horizontal' dataSource={data} renderItem={(item) => ( - + } title={item.title} diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index 400dac1..a2e3f89 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -5,7 +5,7 @@ import UseLoading from './UseLoading'; import TransferLoading from './TransferLoading'; import EditPassword from '@/components/EditPassword'; import ChangeBank from '@/components/ChangeBank'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface ISafetyVerificationProps { open: boolean; @@ -27,7 +27,9 @@ const SafetyVerification: React.FunctionComponent = ({ const [disabled, setDisabled] = useState(false); const [countdown, setCountdown] = useState('3:00'); const [verificationCode, setVerificationCode] = useState(''); - + const { t } = useTranslation(); + + const handleClick = () => { setDisabled(true); diff --git a/src/pages/property/components/TransferLoading.tsx b/src/pages/property/components/TransferLoading.tsx index 886a396..fcd3acc 100644 --- a/src/pages/property/components/TransferLoading.tsx +++ b/src/pages/property/components/TransferLoading.tsx @@ -3,11 +3,13 @@ import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '@/pages/PublicLayout/UserChat'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const TransferLoading = () => { + const { t } = useTranslation(); const [open, setOpen] = useState(true); + const onCancel = () => { setOpen(false); }; diff --git a/src/pages/property/components/USDTLoading.tsx b/src/pages/property/components/USDTLoading.tsx index 70ff139..c192a19 100644 --- a/src/pages/property/components/USDTLoading.tsx +++ b/src/pages/property/components/USDTLoading.tsx @@ -3,9 +3,11 @@ import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '@/pages/PublicLayout/UserChat'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const USDTLoading = () => { + + const { t } = useTranslation(); const [open, setOpen] = useState(true); const onCancel = () => { diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx index 4ebb48a..baf9c51 100644 --- a/src/pages/property/components/UseLoading.tsx +++ b/src/pages/property/components/UseLoading.tsx @@ -1,12 +1,13 @@ -import React, { useState, useEffect } from 'react'; +import { useState, useEffect } from 'react'; import { Modal, Typography, Spin, Space, message, Form } from 'antd'; import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import UserChat from '../../PublicLayout/UserChat'; import { useTranslation } from 'react-i18next'; -const useLogin = () => { +const UseLoading = () => { const [open, setOpen] = useState(true); + const { t, i18n } = useTranslation(); useEffect(() => { @@ -21,8 +22,8 @@ const useLogin = () => { }, []); const forceUpdate = () => { - setOpen(false); // 关闭 Modal 触发重新渲染 - setTimeout(() => setOpen(true), 0); // 延时打开 Modal,确保刷新 + setOpen(false); + setTimeout(() => setOpen(true), 0); }; const onCancel = () => { @@ -108,4 +109,4 @@ const useLogin = () => { ); }; -export default useLogin; +export default UseLoading; diff --git a/src/pages/property/index.tsx b/src/pages/property/index.tsx index fdf3a5d..0689a82 100644 --- a/src/pages/property/index.tsx +++ b/src/pages/property/index.tsx @@ -5,12 +5,14 @@ import Deposit from './Deposit'; import Withdraw from './Withdraw'; import Transfer from './Transfer'; import InProgress from './InProgress'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; const { TabPane } = Tabs; const Property = () => { + const { t } = useTranslation(); const location = useLocation(); + const [activeTab, setActiveTab] = useState(''); useEffect(() => { diff --git a/src/pages/user/components/KYCModal.tsx b/src/pages/user/components/KYCModal.tsx index 74ed949..932f77b 100644 --- a/src/pages/user/components/KYCModal.tsx +++ b/src/pages/user/components/KYCModal.tsx @@ -1,9 +1,16 @@ import { IdcardOutlined } from '@ant-design/icons'; -import { CheckCard, ProForm, ProFormDatePicker, ProFormSelect, ProFormText, ProFormUploadButton, StepsForm } from '@ant-design/pro-components'; +import { + CheckCard, + ProForm, + ProFormDatePicker, + ProFormText, + ProFormUploadButton, + StepsForm, +} from '@ant-design/pro-components'; import { Modal, Typography, message } from 'antd'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import * as React from 'react'; -import { FaPassport } from "react-icons/fa"; +import { FaPassport } from 'react-icons/fa'; interface IKYCModalProps { open: boolean; @@ -11,6 +18,7 @@ interface IKYCModalProps { } const KYCModal: React.FunctionComponent = ({ open, onCancel }) => { + const { t } = useTranslation(); const { Title, Text } = Typography; const waitTime = (time: number = 100) => { return new Promise((resolve) => { @@ -38,9 +46,15 @@ const KYCModal: React.FunctionComponent = ({ open, onCancel }) = onCancel={onCancel} title={
    - 實名驗證 + + 實名驗證 + {t('assets.通過實名驗證')} -
    } +
    + } open={open} footer={submitter} destroyOnClose @@ -52,82 +66,154 @@ const KYCModal: React.FunctionComponent = ({ open, onCancel }) = }} > { await waitTime(1000); return true; }} > - - } /> - } /> - } /> - } /> + + } + /> + } + /> + } + /> + } + /> - - 務必確保輸入的資料,與身分證件資訊一致}> - - - - - + + 務必確保輸入的資料,與身分證件資訊一致}> + + + + + - - 務必確保輸入的資料,與銀行帳戶資訊一致}> - - - + + 務必確保輸入的資料,與銀行帳戶資訊一致}> + + + - - 避免模糊 / 顯示完整文字資訊 /
    勿使用經過編輯的圖片}> + + + 避免模糊 / 顯示完整文字資訊 /
    + 勿使用經過編輯的圖片 + + } + >
    - ); }; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index c0e082b..58bb86a 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -6,15 +6,17 @@ import logo from '../../assets/PTFintech_logo.png' import KYCModal from './components/KYCModal'; import { useState } from 'react'; import EditBank from '@/components/EditBank'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; interface IUserProps { } const User: React.FunctionComponent = (props) => { + const { } = props || {}; const [OpenKYCModal, setOpenKYCModal] = useState(false); const [OpenBank, setOpenBank] = useState(false); + const { t } = useTranslation(); const genExtra = () => (
    { event.stopPropagation(); diff --git a/src/utils/calendarLocal.ts b/src/utils/calendarLocal.ts index 661987e..308dad5 100644 --- a/src/utils/calendarLocal.ts +++ b/src/utils/calendarLocal.ts @@ -1,5 +1,6 @@ import { PickerLocale } from 'antd/es/date-picker/generatePicker'; -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; +const { t } = useTranslation(); const en = { lang: { diff --git a/src/utils/options.ts b/src/utils/options.ts index 7c312e3..9dbebc1 100644 --- a/src/utils/options.ts +++ b/src/utils/options.ts @@ -1,5 +1,6 @@ -import { t } from 'i18next'; +import { useTranslation } from 'react-i18next'; import { CountryKeyNum, VerifyStatusNum } from './enums'; +const { t } = useTranslation(); diff --git a/src/utils/useTestMaster.ts b/src/utils/useTestMaster.ts index 1b42df7..51e9efe 100644 --- a/src/utils/useTestMaster.ts +++ b/src/utils/useTestMaster.ts @@ -8,9 +8,9 @@ import { UseMutationOptions, useMutation, } from '@tanstack/react-query'; - +import { useState } from 'react'; // ### query -type TestQueryProps = { +type TestQueryProps> = { isTest?: boolean; onTest?: (params?: TPARAMS) => Promise; isTestError?: boolean; @@ -22,18 +22,20 @@ type TestQueryProps = { params?: TPARAMS; qf: (params?: TPARAMS) => Promise; blockNotify?: boolean; + skipLogger?: boolean; }; -const withTestLog = false; +const withTestLog = true; const useTestQuery = < TDATA = unknown, TPARAMS = unknown, - TERROR = AxiosError, + TERROR = AxiosError, TQueryKey extends QueryKey = QueryKey, >( options: UseQueryOptions & TestQueryProps, client?: QueryClient, ) => { + // status const { qf, params, @@ -47,9 +49,13 @@ const useTestQuery = < onSettled, blockNotify, queryKey, + skipLogger, ...originOptions } = options; + const [isError, setIsError] = useState(false); + const [isSuccess, setIsSuccess] = useState(false); + // hooks const { pushBEQ } = useNotifyStore(); const { data: whyIsParam, ...result } = useQuery( @@ -60,7 +66,7 @@ const useTestQuery = < if (onQuery) onQuery(params); return new Promise((resolve, reject) => { if (process.env.NODE_ENV === 'development' && isTestError) { - const makeError: AxiosError = { + const makeError: AxiosError = { isAxiosError: false, toJSON: (): object => ({}), name: '', @@ -85,30 +91,30 @@ const useTestQuery = < if (process.env.NODE_ENV === 'development' && isTest) { if (onTest) - setTimeout( - () => { - resolve(onTest(params)); - }, - delay ? delay : 0, - ); + setTimeout(() => { + resolve(onTest(params)); + }, delay || 0); return; } resolve(qf(params)); }) .then((value) => { - if (withTestLog && process.env.NODE_ENV === 'development') - console.info(`Query test success, key: ${queryKey} \r\n `, { - value, - }); + setIsSuccess(true); + setIsError(false); + if (withTestLog && process.env.NODE_ENV === 'development' && !skipLogger) + console.info({ title: `Query test success, key: ${queryKey}`, value }); if (onSuccess) onSuccess(value, params); return value; }) .catch((error) => { - const mikeError = error as AxiosError; - if (process.env.NODE_ENV === 'development') console.warn('Query test error,', { error }); + setIsSuccess(false); + setIsError(true); + const mikeError = error as AxiosError; + if (process.env.NODE_ENV === 'development') + console.warn({ title: 'Query test error', error: mikeError.response?.data }); // notify - if (!blockNotify) + if (!blockNotify && mikeError.response?.status && [400].includes(mikeError.response.status)) pushBEQ([ { title: 'APEC store', @@ -118,7 +124,9 @@ const useTestQuery = < // auth if (mikeError.response?.status === 401) { + console.warn('Test request failed due to authentication'); } + if (onError) onError(error); return error; }) .finally(() => { @@ -128,9 +136,9 @@ const useTestQuery = < }, client, ); - const data = (whyIsParam as TDATA) || undefined; + const data = (whyIsParam as TDATA) ?? undefined; - return { data, ...result }; + return { ...result, data, isSuccess, isError }; }; type UseTestQueryProps = Other & { @@ -141,7 +149,7 @@ type UseTestQueryProps = Other & { }; // mutation -type TestMutationProps = { +type TestMutationProps> = { isTest?: boolean; isTestError?: boolean; onTest?: (params: TPARAMS) => Promise; @@ -151,9 +159,10 @@ type TestMutationProps onSettled?: () => void; blockNotify?: boolean; successNotify?: NotifyOptions; + skipLogger?: boolean; }; -const useTestMutation = ( +const useTestMutation = , TContext = unknown>( options: UseMutationOptions & TestMutationProps, queryClient?: QueryClient, ) => { @@ -167,9 +176,11 @@ const useTestMutation = = { @@ -177,7 +188,7 @@ const useTestMutation = { return new Promise((resolve, reject) => { if (isTestError && process.env.NODE_ENV === 'development') { - const makeError: AxiosError = { + const makeError: AxiosError = { isAxiosError: false, toJSON: (): object => ({}), name: '', @@ -200,24 +211,17 @@ const useTestMutation = { - resolve(onTest(props)); - }, - delay ? delay : 0, - ); + setTimeout(() => { + resolve(onTest(props)); + }, delay || 0); return; } if (mutationFn) resolve(mutationFn(props)); }); }, onSuccess: (data, parms, context) => { - if (withTestLog && process.env.NODE_ENV === 'development') { - console.warn('On test mutation success, data:', { - data, - parms, - context, - }); + if (withTestLog && process.env.NODE_ENV === 'development' && !skipLogger) { + console.warn({ title: 'On test mutation success !', data, parms, context }); } if (successNotify) pushBSQ([successNotify]); @@ -225,17 +229,33 @@ const useTestMutation = { if (process.env.NODE_ENV === 'development') { - console.warn('On test mutation error, error:', { error }); + console.warn({ title: 'On test mutation error, error:', error }); } + const mikeError = error as AxiosError; if (!blockNotify) { - const mikeError = error as AxiosError; - pushBEQ([ - { - title: 'APEC warring !', - des: JSON.stringify(mikeError.response?.data), - }, - ]); + if (!mikeError.response) { + pushBEQ([ + { + title: 'APEC', + des: '網路連線異常', + }, + ]); + return; + } + + if (mikeError.response?.data && mikeError.response?.status && [400].includes(mikeError.response.status)) + pushBEQ([ + { + title: 'APEC warring !', + des: JSON.stringify(mikeError.response?.data), + }, + ]); + } + + // auth + if (mikeError.response?.status === 401) { + console.warn('Test request failed due to authentication'); } if (onError) onError(error, params, context); }, @@ -245,7 +265,7 @@ const useTestMutation = = { +type UseTestMutationProps> = { isTest?: boolean; onTest?: (params: TPARAMS) => Promise; delay?: number; diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 11f02fe..7c0bff6 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1 +1,35 @@ /// + + + +type UpdateRateSteps = 0.01 | 0.05 | 0.1; + +interface ImportMetaEnv { + readonly VITE_AXIOS_ROOT: string; + readonly VITE_HUBS_ROOT: string; + readonly VITE_HOST_ROOT: string; + readonly VITE_VERSION: string; +} + +enum MikeErrorCodeNum { + 'TestCode' = -1, + 'VerifyError' = 0, + 'Nothing' = 1, + 'CantSms' = 4, +} + +interface IMikeRes { + status: number; + data: DATA; + msg: string; +} + +interface IMikeError { + errorCode: MikeErrorCodeNum; + errors: null | Object; + status: number; + title: string; + type: string; +} + +type RequestError = IMikeError; diff --git a/yarn.lock b/yarn.lock index 6d99ee3..3c06016 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,15 +7,15 @@ resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== -"@ant-design/charts-util@0.0.1-alpha.5": +"@ant-design/charts-util@workspace:*": version "0.0.1-alpha.5" resolved "https://registry.yarnpkg.com/@ant-design/charts-util/-/charts-util-0.0.1-alpha.5.tgz#bb8ab113194f0ffeddb688d54bfd63d6f0007fb7" integrity sha512-EwTUjRPhU2CUyI2e11pAi9aOQg9oEWdFEWxv1f4j+Ta4doYXd1yTl94Zy9JvigiEj4qv8dPGl0PUd3r+qMVrAg== "@ant-design/charts@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ant-design/charts/-/charts-2.1.0.tgz#f86706191a304ba6c01be3c3b1c58acdb5dcf5e8" - integrity sha512-zW7DAZjQ3kCPEAVtm6xakVFTsYb4Qw2+O5FCzgv0HiUlZ6MtiNTzBc2QJoPMYaZvjmjnwpFUvbHSs3Hu+ElD7A== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@ant-design/charts/-/charts-2.1.1.tgz#9d5cb738d642e589ff38df1d1ea6c2ac8cf011fe" + integrity sha512-db/Dcc8HdftcmiN6QXePzTw3MeGZD/6XeBrefY+Isjm55jUrvSE+zFf5GEFFrSi4C06LP4ioEEcqUXxblGKwHA== dependencies: "@ant-design/plots" "^2.1.3" @@ -26,10 +26,10 @@ dependencies: "@ctrl/tinycolor" "^3.6.1" -"@ant-design/cssinjs@^1.11.1", "@ant-design/cssinjs@^1.18.5": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.20.0.tgz#878bc6c5b08f73db76da54c347a7ebb3fa4858bb" - integrity sha512-uG3iWzJxgNkADdZmc6W0Ci3iQAUOvLMcM8SnnmWq3r6JeocACft4ChnY/YWvI2Y+rG/68QBla/O+udke1yH3vg== +"@ant-design/cssinjs@^1.11.1", "@ant-design/cssinjs@^1.21.0": + version "1.21.0" + resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.21.0.tgz#de7289bfd71c7a494a28b96569ad88f999619105" + integrity sha512-gIilraPl+9EoKdYxnupxjHB/Q6IHNRjEXszKbDxZdsgv4sAZ9pjkCq8yanDWNvyfjp4leir2OVAJm0vxwKK8YA== dependencies: "@babel/runtime" "^7.11.1" "@emotion/hash" "^0.8.0" @@ -44,10 +44,10 @@ resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== -"@ant-design/icons@^5.0.0", "@ant-design/icons@^5.3.6": - version "5.3.6" - resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.3.6.tgz#172bbcfcfa39f9a1d9ef73ad5cf98c6184fb83f8" - integrity sha512-JeWsgNjvkTTC73YDPgWOgdScRku/iHN9JU0qk39OSEmJSCiRghQMLlxGTCY5ovbRRoXjxHXnUKgQEgBDnQfKmA== +"@ant-design/icons@^5.0.0", "@ant-design/icons@^5.3.6", "@ant-design/icons@^5.3.7": + version "5.3.7" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.3.7.tgz#d9f3654bf7934ee5faba43f91b5a187f5309ec68" + integrity sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew== dependencies: "@ant-design/colors" "^7.0.0" "@ant-design/icons-svg" "^4.4.0" @@ -56,24 +56,24 @@ rc-util "^5.31.1" "@ant-design/plots@^2.1.3": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ant-design/plots/-/plots-2.2.1.tgz#fb93301b3f9cb3fd489dcaea7191bafaea974e36" - integrity sha512-1wWLoBblUuu5m1+41ybU8QHupdVdgovZWVIhY7vSU4yaV7na4n41vvRn6gJOE28ESbjJGx0eEH5DihyF2XiBPA== + version "2.2.3" + resolved "https://registry.yarnpkg.com/@ant-design/plots/-/plots-2.2.3.tgz#4fa8e54043162f4c99f0382a052960fbe59d92fd" + integrity sha512-11GC3trVwizNaKV5ealHhTsFHAY4yf0LtI70e9SfK5IOqUCS381ZCDRKXrFL1UeaFwFzNFqkg0mZAiXbxEdGjg== dependencies: - "@ant-design/charts-util" "0.0.1-alpha.5" + "@ant-design/charts-util" "workspace:*" "@antv/event-emitter" "^0.1.3" "@antv/g" "^6.0.0" "@antv/g2" "^5.1.18" "@antv/g2-extension-plot" "^0.2.0" -"@ant-design/pro-card@2.6.1": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@ant-design/pro-card/-/pro-card-2.6.1.tgz#3ce3b59a1b2a405ba00e392fb0bf62b97ce4a367" - integrity sha512-LiZwTUFHNU8t7bJsp51DnSmuct2uY2WHxl+dMcWCpsW2V6KRPws4raGo96SDMPfGjwbF0YrMZhR9yO7qmI5nag== +"@ant-design/pro-card@2.8.4": + version "2.8.4" + resolved "https://registry.yarnpkg.com/@ant-design/pro-card/-/pro-card-2.8.4.tgz#9df86a54b26cf90d66e3fa9b6d5e45ec232d0171" + integrity sha512-V+8D10YDsO1FnQK2OKOkB8KkpbjgN7OSLzsJhpkv0l4c4FYV0HzWwEmqIhscgse1j587QcuK3jKwnCWEsxSP1Q== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-utils" "2.15.7" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" classnames "^2.3.2" omit.js "^2.0.2" @@ -81,43 +81,44 @@ rc-util "^5.4.0" "@ant-design/pro-components@^2.7.1": - version "2.7.1" - resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.1.tgz#fd43c705e6151d3b4e1c5fada4b500d19c0b972b" - integrity sha512-9e1BCrDNZ4NZXt7sY9eotVOFa506Pnwhsg9alRWfAzn36IpLt0o9/VllBSAR3WeGaUn452vEEOWJTsCVW4Jq4w== - dependencies: - "@ant-design/pro-card" "2.6.1" - "@ant-design/pro-descriptions" "2.5.37" - "@ant-design/pro-field" "2.14.10" - "@ant-design/pro-form" "2.26.0" - "@ant-design/pro-layout" "7.19.1" - "@ant-design/pro-list" "2.5.52" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-skeleton" "2.1.11" - "@ant-design/pro-table" "3.15.3" - "@ant-design/pro-utils" "2.15.7" + version "2.7.10" + resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.10.tgz#b92b027c55fb6067e4ab2743b1ed055565e2dd62" + integrity sha512-UZV1gKGjKxZ9OridFzJLgd9K8WFbTr3t36MQa2Fz5EwWj2mfpAFSvg/0yP9UHgTnfdCe5yrpeck9tGpgHIfcdg== + dependencies: + "@ant-design/pro-card" "2.8.4" + "@ant-design/pro-descriptions" "2.5.45" + "@ant-design/pro-field" "2.15.0" + "@ant-design/pro-form" "2.28.0" + "@ant-design/pro-layout" "7.19.8" + "@ant-design/pro-list" "2.5.61" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-skeleton" "2.1.13" + "@ant-design/pro-table" "3.16.1" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.16.3" -"@ant-design/pro-descriptions@2.5.37": - version "2.5.37" - resolved "https://registry.yarnpkg.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.37.tgz#902aff15359253b0d6f3bac78b0aafa7bfdc2a25" - integrity sha512-YaMs0IGQ39n8jMDUQjhpWW6uZMDktgxAAYwUE9s1tF2XK/ySQSdfylsGvMHZFKqWPRnOqNFIYQ1kAcDLIO9KXQ== +"@ant-design/pro-descriptions@2.5.45": + version "2.5.45" + resolved "https://registry.yarnpkg.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.45.tgz#ffdea687c26c2a7e83df9d5c9108d657f5c6eb6e" + integrity sha512-XwaHEWhBEa2KiLUZoh67TIfW9bIckzNFUu/gzy/6Tzi9W+qYhZQCzacNNAUDR/a/MULc3J859oqRP+JjCdFUGg== dependencies: - "@ant-design/pro-field" "2.14.10" - "@ant-design/pro-form" "2.26.0" - "@ant-design/pro-skeleton" "2.1.11" - "@ant-design/pro-utils" "2.15.7" + "@ant-design/pro-field" "2.15.0" + "@ant-design/pro-form" "2.28.0" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-skeleton" "2.1.13" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" rc-resize-observer "^0.2.3" rc-util "^5.0.6" -"@ant-design/pro-field@2.14.10": - version "2.14.10" - resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.14.10.tgz#3b2869f3a3e23d1e6597b8e24c89201dc13e64a8" - integrity sha512-Q5JIfZJheQKbxgpX29xNwQgsP+fA9WYD4ov5QBLBn1ePUqOreXOQK4cLMBPxxD5MOMULihzHoKi3JOBmuyBCUw== +"@ant-design/pro-field@2.15.0": + version "2.15.0" + resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.15.0.tgz#2f265196b60fc93802117b80c5a93ca84bb3b639" + integrity sha512-pf0ldCWZGEWLpZWyifHqyaQ0/uG5yVPvYXhnSM6sXBtxtfHqZvZvjuhmIK1wR05wDocS/JHQnq+sA3FTut8FXQ== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-utils" "2.15.7" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" "@chenshuai2144/sketch-color" "^1.0.8" classnames "^2.3.2" @@ -127,15 +128,15 @@ rc-util "^5.4.0" swr "^2.0.0" -"@ant-design/pro-form@2.26.0": - version "2.26.0" - resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.26.0.tgz#3aebffac17d48794f73a0d07c81d39d3e476c7fe" - integrity sha512-K542iiEM0mS/U2iaBHhJjsNinsquy4ZSSfoz6dRdFg6OQEU6+qxx7SpvXpVAGk+CtTxDTmd6u0EKlyVl6shK5Q== +"@ant-design/pro-form@2.28.0": + version "2.28.0" + resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.28.0.tgz#855971e96160b0c2a6a155d76f5914496cad6d35" + integrity sha512-3sOtwSakzrQVYvhWzvvg1iBmGWwr166HKqob5UnjQPP55+40y0agQpyxeoagJF83Xb31zkbp+U0iFcAAQQs76A== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-field" "2.14.10" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-utils" "2.15.7" + "@ant-design/pro-field" "2.15.0" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" "@chenshuai2144/sketch-color" "^1.0.7" "@umijs/use-params" "^1.0.9" @@ -146,34 +147,14 @@ rc-resize-observer "^1.1.0" rc-util "^5.0.6" -"@ant-design/pro-layout@7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.19.1.tgz#79c5f5f0f692e06068c4b45027021be297c5ee08" - integrity sha512-JquPxUMFuEZ0kAgs75ECsRFEgygmXawk/oAvEvKNuNTavrUyU/8EJHN+oAETjKdhtsst0Wp5MJKQqPZAcQdYnA== - dependencies: - "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-utils" "2.15.7" - "@babel/runtime" "^7.18.0" - "@umijs/route-utils" "^4.0.0" - "@umijs/use-params" "^1.0.9" - classnames "^2.3.2" - lodash.merge "^4.6.2" - omit.js "^2.0.2" - path-to-regexp "2.4.0" - rc-resize-observer "^1.1.0" - rc-util "^5.0.6" - swr "^2.0.0" - warning "^4.0.3" - -"@ant-design/pro-layout@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.19.0.tgz#ff9c90f2cfe4373e6fda41994ba22a48023c3e5f" - integrity sha512-E7kfInojfsvyFaYbppQRyGd4f8IRTi+KXXc3wWQ2C1EcWlaASB7AGYlGRjjeJyvIPa3UPOfKkveL7/pM/Z3GiQ== +"@ant-design/pro-layout@7.19.8", "@ant-design/pro-layout@^7.19.0": + version "7.19.8" + resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.19.8.tgz#5d070ae2d74a232a657dca6fb207d097b9e8a621" + integrity sha512-f/vC83jmCjEDP7rrLBxRBqCK8298keSRrXqpd2RqigYlJpGqeKVGcevmk5ngBjDxz+UqjoNfOokG7cU3t3eIvQ== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-utils" "2.15.6" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" "@umijs/route-utils" "^4.0.0" "@umijs/use-params" "^1.0.9" @@ -186,26 +167,26 @@ swr "^2.0.0" warning "^4.0.3" -"@ant-design/pro-list@2.5.52": - version "2.5.52" - resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.52.tgz#272b5d8763c7d7518dc8446bafdf4ec2eaab58b1" - integrity sha512-Ndro8YKubSQxFDJ3ZTMU9esZJAjye9TqKMLd768ST86nWvSeDrm8A0oUIKtyMgvnbzsh7YXj4JgexGUNJJPaGg== +"@ant-design/pro-list@2.5.61": + version "2.5.61" + resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.61.tgz#60d68b032c95332862902954d9f590c8dd83d727" + integrity sha512-MwqTfWcos3XBPJlYNw/T1iVlU7HAT/PlAUDTVhdqwpjs6gKafFsg8fHdsj5MxVsk1Pjp5h8hCWIE0P13aMwfYg== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-card" "2.6.1" - "@ant-design/pro-field" "2.14.10" - "@ant-design/pro-table" "3.15.3" - "@ant-design/pro-utils" "2.15.7" + "@ant-design/pro-card" "2.8.4" + "@ant-design/pro-field" "2.15.0" + "@ant-design/pro-table" "3.16.1" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" classnames "^2.3.2" dayjs "^1.11.10" rc-resize-observer "^1.0.0" rc-util "^4.19.0" -"@ant-design/pro-provider@2.14.1": - version "2.14.1" - resolved "https://registry.yarnpkg.com/@ant-design/pro-provider/-/pro-provider-2.14.1.tgz#01b261fa5221b8de5955ce8fd45475dd03490267" - integrity sha512-N8hTUNJc7dtIjj79ZFviielizo15nOUyjrmz9Ll0Mn68Btne2FLpf8cKHsUMdA+yLDW9oM0ExcqIWJOKyx0nUg== +"@ant-design/pro-provider@2.14.7": + version "2.14.7" + resolved "https://registry.yarnpkg.com/@ant-design/pro-provider/-/pro-provider-2.14.7.tgz#911dac05cd9c501ddb0800fd0141c29102a9c100" + integrity sha512-yEAOph/fTzIhOWMtYAbcsjffyYq8tL6IgMQqRlYZmIisVMRDZZ32F+Ab18a4S18foZiDChEr0e6NZuuY7du5rA== dependencies: "@ant-design/cssinjs" "^1.11.1" "@babel/runtime" "^7.18.0" @@ -213,24 +194,24 @@ rc-util "^5.0.1" swr "^2.0.0" -"@ant-design/pro-skeleton@2.1.11": - version "2.1.11" - resolved "https://registry.yarnpkg.com/@ant-design/pro-skeleton/-/pro-skeleton-2.1.11.tgz#1b84e892e55d4a94557a0792d3dabc2b1d9ad6a9" - integrity sha512-a1drmZSDXHFexFniN1YD7PgYiWvhdBAM9OwzSOO3eXPAltAg2cGcaVBlFmweShN+dupO220RN+6aaLUv3G9B2Q== +"@ant-design/pro-skeleton@2.1.13": + version "2.1.13" + resolved "https://registry.yarnpkg.com/@ant-design/pro-skeleton/-/pro-skeleton-2.1.13.tgz#a0411d9f2b773367778ed84edfa6431ac2971cd7" + integrity sha512-Z2+DpJaFzO6gbmDW8lTceHy2vOpwKQUVRteAh5Ac3NSPeZFUDoyxZGOmA2jN/BxlSQnhrR88vhwXi+KouEqxcg== dependencies: "@babel/runtime" "^7.18.0" -"@ant-design/pro-table@3.15.3": - version "3.15.3" - resolved "https://registry.yarnpkg.com/@ant-design/pro-table/-/pro-table-3.15.3.tgz#3b4661cec8821d2d3efa8a8fed0a23c0b40e136e" - integrity sha512-85LMPOsE8vqnKO0/C/r1fLBMhG5jfBUzSlzO7dtDKNzgR3FIeIdOBm49rtoKJ3sHdf3HV3sFazHkOUv9aXQ6Bg== +"@ant-design/pro-table@3.16.1": + version "3.16.1" + resolved "https://registry.yarnpkg.com/@ant-design/pro-table/-/pro-table-3.16.1.tgz#e48e6dc811afd8ac7e1be7509fa60ad2da5a1295" + integrity sha512-c67xsUMIzlGnHYSVjOCkhPlBlt21zoZxa7+p4A087cyjfkQwFR5Qc+xj8L9t0GCqdRz+7J2A9s3s8SSJAwqCEA== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-card" "2.6.1" - "@ant-design/pro-field" "2.14.10" - "@ant-design/pro-form" "2.26.0" - "@ant-design/pro-provider" "2.14.1" - "@ant-design/pro-utils" "2.15.7" + "@ant-design/pro-card" "2.8.4" + "@ant-design/pro-field" "2.15.0" + "@ant-design/pro-form" "2.28.0" + "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-utils" "2.15.14" "@babel/runtime" "^7.18.0" "@dnd-kit/core" "^6.0.8" "@dnd-kit/modifiers" "^6.0.1" @@ -243,28 +224,13 @@ rc-resize-observer "^1.0.0" rc-util "^5.0.1" -"@ant-design/pro-utils@2.15.6": - version "2.15.6" - resolved "https://registry.yarnpkg.com/@ant-design/pro-utils/-/pro-utils-2.15.6.tgz#24006e9dcd5405f3213a7a390a897daff0bd214d" - integrity sha512-F9ERv14dnXQjsBYXTxMpl0blWPNhluufrP9ko2X/dYyVYohAFX8j0sbcUEHY7auPAxHT3c06+sjlqp2bXG9NDg== +"@ant-design/pro-utils@2.15.14": + version "2.15.14" + resolved "https://registry.yarnpkg.com/@ant-design/pro-utils/-/pro-utils-2.15.14.tgz#852c3727aa0c0058924fd539cc375022901c1cea" + integrity sha512-h/GdYDN19dTnyWvbfoEF5DyeTwkB+iRUXlhQ1O1NMkD2eOUpKTjVKF8J+Kekb7Bp7Fkf1dBVktVrcY8sioTkrw== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.1" - "@babel/runtime" "^7.18.0" - classnames "^2.3.2" - dayjs "^1.11.10" - lodash.merge "^4.6.2" - rc-util "^5.0.6" - safe-stable-stringify "^2.4.3" - swr "^2.0.0" - -"@ant-design/pro-utils@2.15.7": - version "2.15.7" - resolved "https://registry.yarnpkg.com/@ant-design/pro-utils/-/pro-utils-2.15.7.tgz#9e9e1651aa188ad28b20a825fb8575c4018315b0" - integrity sha512-VMK1mkb9St4OoEoekW0qUqkKK632XOGjBZusKjlfP9WPwv+MP8bPAB2jOH89JoY8SIQ87Zod6lMgWLMJX3qbOw== - dependencies: - "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.1" + "@ant-design/pro-provider" "2.14.7" "@babel/runtime" "^7.18.0" classnames "^2.3.2" dayjs "^1.11.10" @@ -285,11 +251,11 @@ throttle-debounce "^5.0.0" "@antv/component@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@antv/component/-/component-2.0.0.tgz#f1ae55ddc7d94bcd4cb2a38de88889822ff6b94d" - integrity sha512-wl1pmqLIW/Zt9p7twMcAlvowHU81iV4bb5XWS38DL7gimSONHRh5C/uYKCXKB1KtHAH5d25YHESoGMBc0L3r+w== + version "2.0.1" + resolved "https://registry.yarnpkg.com/@antv/component/-/component-2.0.1.tgz#795f22fafcc1ffb074a9b7dbee3622c7e2ef8c5e" + integrity sha512-VldsSv2O/JNjZYenFIzmtLeC+KD2RcpNARsCLKpi04Iz26joQ3uMtnwxM5W4bd/SCJYKp+eeQeMHMAbwaNR1pw== dependencies: - "@antv/g" "^6.0.0" + "@antv/g" "^6.0.5" "@antv/scale" "^0.4.3" "@antv/util" "^3.3.5" svg-path-parser "^1.1.0" @@ -308,46 +274,46 @@ resolved "https://registry.yarnpkg.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz#3e06323b9dcd55a3241ddc7c5458cfabd2095164" integrity sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg== -"@antv/g-camera-api@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-camera-api/-/g-camera-api-2.0.2.tgz#ce782470d7a1c994af3cf512aa930eba8ddde55d" - integrity sha512-3rto8sqH9ah3y5dwK4hkwdQO/dcdbPVt7xNFy7NJpJek2RiHOfvHJ+GUqs4OrEpfbXWJp9FV8wFLZWUCeHIb2g== +"@antv/g-camera-api@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-camera-api/-/g-camera-api-2.0.5.tgz#81c31ecb1fb7b47b61551659dcfabb15faf8001e" + integrity sha512-cU4eH5YGfdVM7XKAVcAXmVgkJMFJfhCFgSletNvYhzY1HTpBvcD9LIIP2TAomN+quAMuP0n48orUBr9S4iaOvw== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" "@antv/g-canvas@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-canvas/-/g-canvas-2.0.2.tgz#95c7ccc91884ad5c7e564bee143347caf33621cc" - integrity sha512-iyULvTwiSbMGFv58kqnkEvP21sJ+i7A+pLmRtMAhsCbad+eovJ1OC7pUlevbGqYpHn7pxWMeQJZLQGlWeY/lkA== - dependencies: - "@antv/g-lite" "2.0.2" - "@antv/g-plugin-canvas-path-generator" "2.0.2" - "@antv/g-plugin-canvas-picker" "2.0.2" - "@antv/g-plugin-canvas-renderer" "2.0.2" - "@antv/g-plugin-dom-interaction" "2.0.2" - "@antv/g-plugin-html-renderer" "2.0.2" - "@antv/g-plugin-image-loader" "2.0.2" + version "2.0.7" + resolved "https://registry.yarnpkg.com/@antv/g-canvas/-/g-canvas-2.0.7.tgz#3cce1a7021f2ce7de3be0b44881ece645b3498ca" + integrity sha512-tHa3Jq2B9EHDg8Icchxa+9z6TaTh4F0iVBqemj714XqPZfSf2cb+mr/AtqNsB25yCqosX31m8NsA+Ci18N2A1A== + dependencies: + "@antv/g-lite" "2.0.5" + "@antv/g-plugin-canvas-path-generator" "2.0.5" + "@antv/g-plugin-canvas-picker" "2.0.6" + "@antv/g-plugin-canvas-renderer" "2.0.6" + "@antv/g-plugin-dom-interaction" "2.0.5" + "@antv/g-plugin-html-renderer" "2.0.6" + "@antv/g-plugin-image-loader" "2.0.5" "@antv/util" "^3.3.5" tslib "^2.5.3" -"@antv/g-dom-mutation-observer-api@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.2.tgz#49be3daf0365fd4359291426b85db5370c02dbf7" - integrity sha512-FZh2UN53O+FMfq0UR41XbWDHnFEo5Ew6SFJHhE7MLA5twF1e6HQPIp6HnvXrUv8tkxbN44EDCWZzp/zVFBlXhg== +"@antv/g-dom-mutation-observer-api@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.5.tgz#7d14575a43a05335a3da1294ff96a92347bcd6ef" + integrity sha512-0e86+x/2hcmt5SITzeZjSA8X2/j2Fms+FQX+Iuf7zSou/77kk3ZqUASlwDsf03MT2oGXAW7EcO2Xy8MqpUiseA== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" -"@antv/g-lite@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-lite/-/g-lite-2.0.2.tgz#60013267ad61238d8a416c2b7f36ba1b5173f4e1" - integrity sha512-TaxuUkWIcxe8yGh1rdktjq8QDeOCVQpZcYkoyZz8sISKJU5D7W8qj/up/nGY6ujx+G7LXe2P7TgNLWJe0C7u4Q== +"@antv/g-lite@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-lite/-/g-lite-2.0.5.tgz#4f51569b363d5bbbb0aba2dbd386ad30b2de13ce" + integrity sha512-IeD7L10MOofNg302Zrru09zjNczCyOAC6mFLjHQlkYCQRtcU04zn32pTxCDy7xRkLHlhAK1mlymBqzeRMkmrRg== dependencies: "@antv/g-math" "3.0.0" "@antv/util" "^3.3.5" - d3-color "^1.4.0" + d3-color "^3.1.0" eventemitter3 "^5.0.1" gl-matrix "^3.4.3" rbush "^3.0.1" @@ -362,85 +328,85 @@ gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-canvas-path-generator@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.2.tgz#5de1c9af0e6e33cc259d86936cf97f211a8f7977" - integrity sha512-xlAsKjf8E7zn13xdftNPsHi2soOnB7Ohjp4lLvQ04g8OpNw9CfxU1FzaX16tCINETFL8GTEp7dFTcnMpfjJwOQ== +"@antv/g-plugin-canvas-path-generator@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.5.tgz#d6fbec076e67a36a6eb1481adefb08f3c348e2d9" + integrity sha512-O1TCCmrzJDWrA9BG2MfPb79zY23a2fOugygeAaj9CElc/rO5ZqZ4lO4NJe4UCHRInTTXJjGwPnIcmX24Gi6O/A== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/g-math" "3.0.0" "@antv/util" "^3.3.5" tslib "^2.5.3" -"@antv/g-plugin-canvas-picker@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.2.tgz#e827fdd866514d9b522a6315beaece0e8b0c35a6" - integrity sha512-V2sw+JJQ9UlWuAKGSYigXS7LFk8cLuecR0rDTWji5WSXNdFrYzFynhNibwSK8VIDn8HYWxHiby+rXesqJ32G2A== +"@antv/g-plugin-canvas-picker@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.6.tgz#9ebcdb5bcef26afc7789b0de7b798b724999afd8" + integrity sha512-QD9Z6YA29iJC36mQxd+qSX5tNlQZ41M4nGWY/iepKnOwAf9Rm+X4AgyIxKOrjg/rkRgUv2WR0Dp2eMfKUqm/Ng== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/g-math" "3.0.0" - "@antv/g-plugin-canvas-path-generator" "2.0.2" - "@antv/g-plugin-canvas-renderer" "2.0.2" + "@antv/g-plugin-canvas-path-generator" "2.0.5" + "@antv/g-plugin-canvas-renderer" "2.0.6" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-canvas-renderer@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.0.2.tgz#386b244dcc9427b6b8a1c844bc0fc3063c363951" - integrity sha512-HxscqYn5nNxkP/XSAZJD1IQcj3yqqZD5+GhxpFg5JMaBJFocOCmB0Q431o19pxanzIqj1LLjkNz6aGlUttTeQQ== +"@antv/g-plugin-canvas-renderer@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.0.6.tgz#b911b9f05585c1c4849b70489bb102d83f5afb08" + integrity sha512-65uoJ2XJcUeGDYxnMxsGkdvaNNmEy79QEstr//as8hH+ssyUZJhBLgsDnhLqBQWYQGb7fXMPG0rUEesfjGOYkg== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/g-math" "3.0.0" - "@antv/g-plugin-canvas-path-generator" "2.0.2" - "@antv/g-plugin-image-loader" "2.0.2" + "@antv/g-plugin-canvas-path-generator" "2.0.5" + "@antv/g-plugin-image-loader" "2.0.5" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-dom-interaction@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.0.2.tgz#eccc4921661ba91d98a95c8edaf1a57677b1dcb4" - integrity sha512-r55/aNVrYGT7tS6Rx2z/STB1wp5RIpo9Pe6aa7SItLh2PEVKe9+j7rmaSEripx0b5cGEMt93FDiaJAc4b7TKCA== +"@antv/g-plugin-dom-interaction@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.0.5.tgz#7bad13e46d9ec293d3658e45d30708cfae6cb458" + integrity sha512-m4LeXM63d+MqQguCgmZU8TvvfuLlZ9zrtKWtRr6gYhi0+98o/3+pPrluIZhZHdgplH209+nN2JQ/ceoWp4OrZA== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" tslib "^2.5.3" "@antv/g-plugin-dragndrop@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.2.tgz#5f61e94fa14de4dbea5651bf88f9eb795f585516" - integrity sha512-J1DPzBkrEPXWd/WyI1wOdsXo3TkDPurV8HmygUW952dNuHt73KDWc/ANjg1AcgTRNx0ZiZGVUnnHhL2BCXh+iA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.5.tgz#aba1dbef42c2fd5b956953600bee36fe41388739" + integrity sha512-Ow9BfL4w6er8OhJxilmU4FOQvFyEWSD6ScRWHBmXqY45/8zcMuhTWd2KcMAmxxPMNmtGch4WeJdPurb0beH8DQ== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/util" "^3.3.5" tslib "^2.5.3" -"@antv/g-plugin-html-renderer@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.0.2.tgz#4300c25cdf30d8c17d3481855fd388f31d1eb99a" - integrity sha512-CfLNsxZugjJhH7NZRTlpC+SHagU7d8/xdqAty87KIjoIOXefSxS9kRvjghaFWsnxjC73eqLUWdcUYKOeNFNKNQ== +"@antv/g-plugin-html-renderer@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.0.6.tgz#2d1720eb5e35ed4945bad7d29e7c228ddba71309" + integrity sha512-dk0GHksBeuZlHFK/ARr6WRXQLuBQtsl7lboYQWXUVTlk+lIFq1n459hpukKokah89bRvnSAuqMVlBqEsyjn+nw== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-image-loader@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.2.tgz#57163c7f6b210cd258eeccee87bff123318b82b1" - integrity sha512-dvaadjvJiGDJcdN8emvq3x4C6ivmNFO74SCIkUaQDLGRjDKs25+kMKplWQOxUEoIJOMoxkJynrTs7EkzXI0dNQ== +"@antv/g-plugin-image-loader@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.5.tgz#d20563586e692d883ae5a1c1671b3931b89d744a" + integrity sha512-TMpwOW4KibMtKOZZVMZHny+LOrWGjl1GP+i3N8sQx97oDaxIoNIB789XriuovKU/S71Y77ZTrqQdldknwWY24A== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-web-animations-api@2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@antv/g-web-animations-api/-/g-web-animations-api-2.0.3.tgz#4a2b44a61829764bd2dba7f5b0d213a400a97ce3" - integrity sha512-oXtrjruS+Ca1Cj5F2dYUQLR8+fq8TT20uNwHVpNv9RpAFE9I6lpsGMcv9JPftq/wPadAAOQvtEY9Nnngb/HVjg== +"@antv/g-web-animations-api@2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@antv/g-web-animations-api/-/g-web-animations-api-2.0.6.tgz#e007b1d07db712071131a37ad2e59cf56a12fa8d" + integrity sha512-sDNkG0umxAgks14sCgumg9PoLkHXszS+T4RGMgFtlRYuXgM4OBZB3EYTa99www5Z4TaUM+Y/rvECn3FKv8Zo4Q== dependencies: - "@antv/g-lite" "2.0.2" + "@antv/g-lite" "2.0.5" "@antv/util" "^3.3.5" tslib "^2.5.3" @@ -455,9 +421,9 @@ d3-hierarchy "^3.1.2" "@antv/g2@^5.1.18", "@antv/g2@^5.1.8": - version "5.1.19" - resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-5.1.19.tgz#4b5ab17b643134773012fde95021d3745ce227ab" - integrity sha512-sVzxgAm6DE65wRQpZ3O+OaRlCjESC12oT2Rle6Cifb80dC6LDjZ4aBT9O90QCYibCJj6WCTrDQSasi+7ALo7MA== + version "5.1.22" + resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-5.1.22.tgz#5a0965cda87bf5cde57e2cfe707c99acd42851eb" + integrity sha512-5h3+frt+fhXgtu/PWFRgHWsxSfSsEpH49YqT2v1b+9KJ561sMCqRzU/Q4yCMuZr76drZuMlZmm+CC+cEIVmmxw== dependencies: "@antv/component" "^2.0.0" "@antv/coord" "^0.4.6" @@ -482,15 +448,15 @@ fmin "^0.0.2" pdfast "^0.2.0" -"@antv/g@^6.0.0": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@antv/g/-/g-6.0.3.tgz#543448352ca3e9b1240b9139343b99df1c652fa1" - integrity sha512-jol7YHByMaRW0qyXmSlrqIurPjv0GqxMU0GCBSZR/xGLO2SsBWxTBgtOMhsAb0bnq1/lFdzTVy8ZscO1GgCudA== +"@antv/g@^6.0.0", "@antv/g@^6.0.5": + version "6.0.6" + resolved "https://registry.yarnpkg.com/@antv/g/-/g-6.0.6.tgz#92e25fa7ac129878f47ec9f75c898e741495364f" + integrity sha512-LWXhBcgjYC/bcLVtNOwrToPosNVsL4ZErj5QexqXDMhqKg2fHMICeJt+1qV2+0bv1sM/vMfeTDRizRxg4OJ3zg== dependencies: - "@antv/g-camera-api" "2.0.2" - "@antv/g-dom-mutation-observer-api" "2.0.2" - "@antv/g-lite" "2.0.2" - "@antv/g-web-animations-api" "2.0.3" + "@antv/g-camera-api" "2.0.5" + "@antv/g-dom-mutation-observer-api" "2.0.5" + "@antv/g-lite" "2.0.5" + "@antv/g-web-animations-api" "2.0.6" "@antv/path-util@^3.0.1": version "3.0.1" @@ -502,11 +468,11 @@ tslib "^2.0.3" "@antv/scale@^0.4.12", "@antv/scale@^0.4.3": - version "0.4.15" - resolved "https://registry.yarnpkg.com/@antv/scale/-/scale-0.4.15.tgz#491f3443f81c024f2bd9ac991bffa6e62809fe7f" - integrity sha512-b3b2U1L55fcJg0fB/BloVvcngPo/QxhosWgjn6JmYLVLezxDYMO+zdQou8hxpsLMUVhH15NqRDcM/1n4U6G04g== + version "0.4.16" + resolved "https://registry.yarnpkg.com/@antv/scale/-/scale-0.4.16.tgz#60557470668ccfe5217e482a01f05c0cbb706b62" + integrity sha512-5wg/zB5kXHxpTV5OYwJD3ja6R8yTiqIOkjOhmpEJiowkzRlbEC/BOyMvNUq5fqFIHnMCE9woO7+c3zxEQCKPjw== dependencies: - "@antv/util" "^2.0.13" + "@antv/util" "^3.3.7" color-string "^1.5.5" fecha "^4.2.1" @@ -518,7 +484,7 @@ csstype "^3.0.8" tslib "^2.0.3" -"@antv/util@^3.3.5": +"@antv/util@^3.3.5", "@antv/util@^3.3.7": version "3.3.7" resolved "https://registry.yarnpkg.com/@antv/util/-/util-3.3.7.tgz#35a900f0e9b65defbb92ec0e92a20b8189a18815" integrity sha512-qqPg7rIPCsJyl7N56jAC25v/99mJ3ApVkgBsGijhiWrEeKvzXBPk1r5P77Pm9nCljpnn+hH8Z3t5AivbEoTJMg== @@ -527,17 +493,10 @@ gl-matrix "^3.3.0" tslib "^2.3.1" -"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9": - version "7.24.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" - integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.24.4": - version "7.24.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c" - integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== +"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" + integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== dependencies: regenerator-runtime "^0.14.0" @@ -603,120 +562,120 @@ resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== - -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== - -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== - -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== - -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== - -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== - -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== - -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== - -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== - -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== - -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== - -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== - -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== - -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== - -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== - -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== - -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== - -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== - -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== - -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== - -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== - -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== +"@esbuild/aix-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" + integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== + +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + +"@esbuild/android-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" + integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== + +"@esbuild/android-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" + integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== + +"@esbuild/darwin-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" + integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== + +"@esbuild/darwin-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" + integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== + +"@esbuild/freebsd-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" + integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== + +"@esbuild/freebsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" + integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== + +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + +"@esbuild/linux-arm@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" + integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== + +"@esbuild/linux-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" + integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== + +"@esbuild/linux-loong64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" + integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== + +"@esbuild/linux-mips64el@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" + integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== + +"@esbuild/linux-ppc64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" + integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== + +"@esbuild/linux-riscv64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" + integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== + +"@esbuild/linux-s390x@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" + integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== + +"@esbuild/linux-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" + integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== + +"@esbuild/netbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" + integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== + +"@esbuild/openbsd-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" + integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== + +"@esbuild/sunos-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" + integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== + +"@esbuild/win32-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" + integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== + +"@esbuild/win32-ia32@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" + integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== + +"@esbuild/win32-x64@0.21.5": + version "0.21.5" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" + integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -726,9 +685,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + version "4.10.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.1.tgz#361461e5cb3845d874e61731c11cfedd664d83a0" + integrity sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -886,6 +845,13 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== +"@rc-component/async-validator@^5.0.3": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@rc-component/async-validator/-/async-validator-5.0.4.tgz#5291ad92f00a14b6766fc81735c234277f83e948" + integrity sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg== + dependencies: + "@babel/runtime" "^7.24.4" + "@rc-component/color-picker@~1.5.3": version "1.5.3" resolved "https://registry.yarnpkg.com/@rc-component/color-picker/-/color-picker-1.5.3.tgz#f3b0e14bb67ec5ee77d1fd5d261f63dd4fd00449" @@ -929,10 +895,10 @@ classnames "^2.3.2" rc-util "^5.24.4" -"@rc-component/tour@~1.14.2": - version "1.14.2" - resolved "https://registry.yarnpkg.com/@rc-component/tour/-/tour-1.14.2.tgz#142f0973975eb0e3af3c75aa868ffc9d8ba27cae" - integrity sha512-A75DZ8LVvahBIvxooj3Gvf2sxe+CGOkmzPNX7ek0i0AJHyKZ1HXe5ieIGo3m0FMdZfVOlbCJ952Duq8VKAHk6g== +"@rc-component/tour@~1.15.0": + version "1.15.0" + resolved "https://registry.yarnpkg.com/@rc-component/tour/-/tour-1.15.0.tgz#37a66ae5af8eefaf0ab0e22ddd8e6fecdbdc14a7" + integrity sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g== dependencies: "@babel/runtime" "^7.18.0" "@rc-component/portal" "^1.0.0-9" @@ -940,10 +906,10 @@ classnames "^2.3.2" rc-util "^5.24.4" -"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.1.1.tgz#47973f1156ba63810c913eb46cbaedeba913874b" - integrity sha512-UjHkedkgtEcgQu87w1VuWug1idoDJV7VUt0swxHXRcmei2uu1AuUzGBPEUlmOmXGJ+YtTgZfVLi7kuAUKoZTMA== +"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1", "@rc-component/trigger@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.2.0.tgz#503a48b0895a2cfddee0a5b7b11492c3df2a493d" + integrity sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA== dependencies: "@babel/runtime" "^7.23.2" "@rc-component/portal" "^1.1.0" @@ -952,200 +918,200 @@ rc-resize-observer "^1.3.1" rc-util "^5.38.0" -"@remix-run/router@1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.0.tgz#0e10181e5fec1434eb071a9bc4bdaac843f16dcc" - integrity sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q== - -"@rollup/rollup-android-arm-eabi@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.1.tgz#4a5135e88d522dbf85c4ca43ad14af9dab27bd07" - integrity sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q== - -"@rollup/rollup-android-arm64@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.1.tgz#e32d5e6511a49ddd64c22f8b3668049f63b7b04c" - integrity sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ== - -"@rollup/rollup-darwin-arm64@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.1.tgz#d57357c6519ae10605dd5f1881534f490fd1ae3c" - integrity sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA== - -"@rollup/rollup-darwin-x64@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.1.tgz#2291592328f6a2fb5dba3f1f41a05a078325a674" - integrity sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw== - -"@rollup/rollup-linux-arm-gnueabihf@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.1.tgz#8851254fc581d860940ab27009c07dde80666e82" - integrity sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw== - -"@rollup/rollup-linux-arm-musleabihf@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.1.tgz#31c41636467cb0dd5f19e306929f2f4c54bb98dd" - integrity sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg== - -"@rollup/rollup-linux-arm64-gnu@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.1.tgz#30d3e02585c7b1d2ea96b2834a79aeb1fb10237b" - integrity sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw== - -"@rollup/rollup-linux-arm64-musl@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.1.tgz#e6a4cdb552ff859b2fce275937999789ae72f659" - integrity sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.1.tgz#35b5af3ded0b20dd7cc00813d96f9823b321d2ea" - integrity sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw== - -"@rollup/rollup-linux-riscv64-gnu@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.1.tgz#59fef3d0a5feee3b072d92898c9d62c0c7e6e95c" - integrity sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ== - -"@rollup/rollup-linux-s390x-gnu@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.1.tgz#004f361e29c5b6cd6fb35192583ec2adf541c366" - integrity sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw== - -"@rollup/rollup-linux-x64-gnu@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.1.tgz#61fbc6580b972893c1e74ac460d41f6ca4143482" - integrity sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ== - -"@rollup/rollup-linux-x64-musl@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.1.tgz#9d8f4c016f587bab6a1c21fbb966fdb4d076bbb9" - integrity sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ== - -"@rollup/rollup-win32-arm64-msvc@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.1.tgz#f1b28caca6d97beab3e3a5e623b97610a423bea5" - integrity sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg== - -"@rollup/rollup-win32-ia32-msvc@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.1.tgz#f13b76ecfba6820867f23b805f6626e02c7300ec" - integrity sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag== - -"@rollup/rollup-win32-x64-msvc@4.17.1": - version "4.17.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.1.tgz#e672de70ce490e5564fe75171373d1653b5694da" - integrity sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA== +"@remix-run/router@1.16.1": + version "1.16.1" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd" + integrity sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig== + +"@rollup/rollup-android-arm-eabi@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz#bbd0e616b2078cd2d68afc9824d1fadb2f2ffd27" + integrity sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ== + +"@rollup/rollup-android-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz#97255ef6384c5f73f4800c0de91f5f6518e21203" + integrity sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA== + +"@rollup/rollup-darwin-arm64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz#b6dd74e117510dfe94541646067b0545b42ff096" + integrity sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w== + +"@rollup/rollup-darwin-x64@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz#e07d76de1cec987673e7f3d48ccb8e106d42c05c" + integrity sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA== + +"@rollup/rollup-linux-arm-gnueabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz#9f1a6d218b560c9d75185af4b8bb42f9f24736b8" + integrity sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA== + +"@rollup/rollup-linux-arm-musleabihf@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz#53618b92e6ffb642c7b620e6e528446511330549" + integrity sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A== + +"@rollup/rollup-linux-arm64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz#99a7ba5e719d4f053761a698f7b52291cefba577" + integrity sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw== + +"@rollup/rollup-linux-arm64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz#f53db99a45d9bc00ce94db8a35efa7c3c144a58c" + integrity sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ== + +"@rollup/rollup-linux-powerpc64le-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz#cbb0837408fe081ce3435cf3730e090febafc9bf" + integrity sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA== + +"@rollup/rollup-linux-riscv64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz#8ed09c1d1262ada4c38d791a28ae0fea28b80cc9" + integrity sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg== + +"@rollup/rollup-linux-s390x-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz#938138d3c8e0c96f022252a28441dcfb17afd7ec" + integrity sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg== + +"@rollup/rollup-linux-x64-gnu@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz#1a7481137a54740bee1ded4ae5752450f155d942" + integrity sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w== + +"@rollup/rollup-linux-x64-musl@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz#f1186afc601ac4f4fc25fac4ca15ecbee3a1874d" + integrity sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg== + +"@rollup/rollup-win32-arm64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz#ed6603e93636a96203c6915be4117245c1bd2daf" + integrity sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA== + +"@rollup/rollup-win32-ia32-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz#14e0b404b1c25ebe6157a15edb9c46959ba74c54" + integrity sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg== + +"@rollup/rollup-win32-x64-msvc@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz#5d694d345ce36b6ecf657349e03eb87297e68da4" + integrity sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g== "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@swc/core-darwin-arm64@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.17.tgz#e62fa7f247bdd1c0c50a3f99722da4dd098c7c67" - integrity sha512-HVl+W4LezoqHBAYg2JCqR+s9ife9yPfgWSj37iIawLWzOmuuJ7jVdIB7Ee2B75bEisSEKyxRlTl6Y1Oq3owBgw== - -"@swc/core-darwin-x64@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.4.17.tgz#1145cbb7575e317204ed3a7d0274bd26fe9ffab6" - integrity sha512-WYRO9Fdzq4S/he8zjW5I95G1zcvyd9yyD3Tgi4/ic84P5XDlSMpBDpBLbr/dCPjmSg7aUXxNQqKqGkl6dQxYlA== - -"@swc/core-linux-arm-gnueabihf@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.17.tgz#7145b3ada5cf9b748eaacbc9a7c7037ba0fb26bb" - integrity sha512-cgbvpWOvtMH0XFjvwppUCR+Y+nf6QPaGu6AQ5hqCP+5Lv2zO5PG0RfasC4zBIjF53xgwEaaWmGP5/361P30X8Q== - -"@swc/core-linux-arm64-gnu@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.17.tgz#5c0833ef132af17bd3cbdf2253f35b57c0cf62bb" - integrity sha512-l7zHgaIY24cF9dyQ/FOWbmZDsEj2a9gRFbmgx2u19e3FzOPuOnaopFj0fRYXXKCmtdx+anD750iBIYnTR+pq/Q== - -"@swc/core-linux-arm64-musl@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.17.tgz#5bfe81eb23c905f04b669a7d2b060a147a263483" - integrity sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw== - -"@swc/core-linux-x64-gnu@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.17.tgz#a0c19bc9635e86ebd1c7f8e9e026503d1a1bf83d" - integrity sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA== - -"@swc/core-linux-x64-musl@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.17.tgz#2179b9536235a3b02a46997ddb1c178dfadf1667" - integrity sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw== - -"@swc/core-win32-arm64-msvc@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.17.tgz#3004a431c836c6b16b4660ea2425dde467a8ee36" - integrity sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w== - -"@swc/core-win32-ia32-msvc@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.17.tgz#59155485d5307fb2a267e5acb215e0f440b6f48f" - integrity sha512-JBwuSTJIgiJJX6wtr4wmXbfvOswHFj223AumUrK544QV69k60FJ9q2adPW9Csk+a8wm1hLxq4HKa2K334UHJ/g== - -"@swc/core-win32-x64-msvc@1.4.17": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.17.tgz#b98f25fc277fb0e319f25f9fd00a82023662716b" - integrity sha512-jFkOnGQamtVDBm3MF5Kq1lgW8vx4Rm1UvJWRUfg+0gx7Uc3Jp3QMFeMNw/rDNQYRDYPG3yunCC+2463ycd5+dg== - -"@swc/core@^1.3.107": - version "1.4.17" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.4.17.tgz#3ea4180fa5c54282b284006a6de1263ef1cf887f" - integrity sha512-tq+mdWvodMBNBBZbwFIMTVGYHe9N7zvEaycVVjfvAx20k1XozHbHhRv+9pEVFJjwRxLdXmtvFZd3QZHRAOpoNQ== - dependencies: - "@swc/counter" "^0.1.2" - "@swc/types" "^0.1.5" +"@swc/core-darwin-arm64@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.6.3.tgz#63e7d9b3259ffc305075a0bb1c771428723e3df5" + integrity sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA== + +"@swc/core-darwin-x64@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.6.3.tgz#ec405e5af8a3fe65e03f3b47a527d4945e2cb1e5" + integrity sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw== + +"@swc/core-linux-arm-gnueabihf@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.6.3.tgz#30d83a296b1160afac91b27c0837b4f29fdb86fb" + integrity sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A== + +"@swc/core-linux-arm64-gnu@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.6.3.tgz#7c988c2dd7ea12f4c4a0c52f32474d6dc8b0cf36" + integrity sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw== + +"@swc/core-linux-arm64-musl@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.6.3.tgz#4ca5662622494eb1da5752de3e57dde8901d858d" + integrity sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw== + +"@swc/core-linux-x64-gnu@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.6.3.tgz#55c79e321b473239d27073b4e3f3ef7e3d93a8d3" + integrity sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ== + +"@swc/core-linux-x64-musl@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.6.3.tgz#ad5c1b7857ac7753eb50ba1fa61fcf35143bab68" + integrity sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q== + +"@swc/core-win32-arm64-msvc@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.6.3.tgz#58708feba33a104c13543c3681760670001fa97a" + integrity sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w== + +"@swc/core-win32-ia32-msvc@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.6.3.tgz#1f2faac0b9e20888749a850b39a3541801c3c9a5" + integrity sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA== + +"@swc/core-win32-x64-msvc@1.6.3": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.6.3.tgz#19b8999fd7d0b82960ea81edbdb9130a6154cfb0" + integrity sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q== + +"@swc/core@^1.5.7": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.6.3.tgz#4ca4563a8eae7c34640ad1aa24251b95a68a81be" + integrity sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.8" optionalDependencies: - "@swc/core-darwin-arm64" "1.4.17" - "@swc/core-darwin-x64" "1.4.17" - "@swc/core-linux-arm-gnueabihf" "1.4.17" - "@swc/core-linux-arm64-gnu" "1.4.17" - "@swc/core-linux-arm64-musl" "1.4.17" - "@swc/core-linux-x64-gnu" "1.4.17" - "@swc/core-linux-x64-musl" "1.4.17" - "@swc/core-win32-arm64-msvc" "1.4.17" - "@swc/core-win32-ia32-msvc" "1.4.17" - "@swc/core-win32-x64-msvc" "1.4.17" - -"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": + "@swc/core-darwin-arm64" "1.6.3" + "@swc/core-darwin-x64" "1.6.3" + "@swc/core-linux-arm-gnueabihf" "1.6.3" + "@swc/core-linux-arm64-gnu" "1.6.3" + "@swc/core-linux-arm64-musl" "1.6.3" + "@swc/core-linux-x64-gnu" "1.6.3" + "@swc/core-linux-x64-musl" "1.6.3" + "@swc/core-win32-arm64-msvc" "1.6.3" + "@swc/core-win32-ia32-msvc" "1.6.3" + "@swc/core-win32-x64-msvc" "1.6.3" + +"@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/types@^0.1.5": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.6.tgz#2f13f748995b247d146de2784d3eb7195410faba" - integrity sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg== +"@swc/types@^0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.8.tgz#2c81d107c86cfbd0c3a05ecf7bb54c50dfa58a95" + integrity sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA== dependencies: "@swc/counter" "^0.1.3" -"@tanstack/query-core@5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.32.0.tgz#e097ec2b394a2f64de33c98cd8baf3525c99641a" - integrity sha512-Z3flEgCat55DRXU5UMwYU1U+DgFZKA3iufyOKs+II7iRAo0uXkeU7PH5e6sOH1CGEag0IpKmZxlUFpCg6roSKw== +"@tanstack/query-core@5.45.0": + version "5.45.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.45.0.tgz#47a662d311c2588867341238960ec21dc7f0714e" + integrity sha512-RVfIZQmFUTdjhSAAblvueimfngYyfN6HlwaJUPK71PKd7yi43Vs1S/rdimmZedPWX/WGppcq/U1HOj7O7FwYxw== -"@tanstack/query-devtools@5.28.10": - version "5.28.10" - resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.28.10.tgz#33e9a42dd2199fca12f0dd2d891570ecdbfd3c7b" - integrity sha512-5UN629fKa5/1K/2Pd26gaU7epxRrYiT1gy+V+pW5K6hnf1DeUKK3pANSb2eHKlecjIKIhTwyF7k9XdyE2gREvQ== +"@tanstack/query-devtools@5.37.1": + version "5.37.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.37.1.tgz#8dcfa1488b4f2e353be7eede6691b0ad9197183b" + integrity sha512-XcG4IIHIv0YQKrexTqo2zogQWR1Sz672tX2KsfE9kzB+9zhx44vRKH5si4WDILE1PIWQpStFs/NnrDQrBAUQpg== "@tanstack/react-query-devtools@^5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.32.0.tgz#a3e930b9b5cdb5e52215e1314d28a50202589e72" - integrity sha512-KWrzLoUjs9JtDSH3H2qbm5MjjykyAT8DkvP8tukw3gBG4ziu5WaWHciBjMsYSe1JB79AOxxGovzjW/Cd9+ofVw== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.45.1.tgz#bea7ba0ffd509f0930237c2df7feba9209f76aa6" + integrity sha512-4mrbk1g5jqlqh0pifZNsKzy7FtgeqgwzMICL4d6IJGayrrcrKq9K4N/OzRNbgRWrTn6YTY63qcAcKo+NJU2QMw== dependencies: - "@tanstack/query-devtools" "5.28.10" + "@tanstack/query-devtools" "5.37.1" "@tanstack/react-query@^5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.32.0.tgz#52d441e7ad2a0098dc426f3834f68150c13f265b" - integrity sha512-+E3UudQtarnx9A6xhpgMZapyF+aJfNBGFMgI459FnduEZqT/9KhOWnMOneZahLRt52yzskSA0AuOyLkXHK0yBA== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.45.1.tgz#a0ac6bb89b4a2c2b0251f6647a0a370d86f05347" + integrity sha512-mYYfJujKg2kxmkRRjA6nn4YKG3ITsKuH22f1kteJ5IuVQqgKUgbaSQfYwVP0gBS05mhwxO03HVpD0t7BMN7WOA== dependencies: - "@tanstack/query-core" "5.32.0" + "@tanstack/query-core" "5.45.0" "@types/estree@1.0.5": version "1.0.5" @@ -1163,9 +1129,9 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@^20.12.7": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + version "20.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.6.tgz#f3c19ffc98c2220e18de259bb172dd4d892a6075" + integrity sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw== dependencies: undici-types "~5.26.4" @@ -1182,9 +1148,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.2.66": - version "18.3.1" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.1.tgz#fed43985caa834a2084d002e4771e15dfcbdbe8e" - integrity sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw== + version "18.3.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" + integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -1377,11 +1343,11 @@ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@vitejs/plugin-react-swc@^3.5.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz#dc9cd1363baf3780f3ad3e0a12a46a3ffe0c7526" - integrity sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g== + version "3.7.0" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz#e456c0a6d7f562268e1d231af9ac46b86ef47d88" + integrity sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA== dependencies: - "@swc/core" "^1.3.107" + "@swc/core" "^1.5.7" abort-controller@^3.0.0: version "3.0.0" @@ -1396,9 +1362,9 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + version "8.12.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" + integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== add-dom-event-listener@^1.1.0: version "1.1.0" @@ -1469,56 +1435,56 @@ ansi-styles@^6.1.0: integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== antd@^5.16.5: - version "5.16.5" - resolved "https://registry.yarnpkg.com/antd/-/antd-5.16.5.tgz#fef849340b98fe41b328fe06eec3ce1bf619562c" - integrity sha512-8MGjf2ejlii2iVH4F960jwpdGiU+ISWPdiMA2O1AJSFJFA3eCxVLHkKRGiagsRmdo3AUU8tuPfQsqbLuEIlswA== + version "5.18.3" + resolved "https://registry.yarnpkg.com/antd/-/antd-5.18.3.tgz#71455216af07da202bddfa8cd16976e29dcf575c" + integrity sha512-Dm3P8HBxoo/DiR/QZLj5Mk+rQZsSXxCCArSZACHGiklkkjW6klzlebAElOUr9NyDeFX7UnQ6LVk7vznXlnjTqQ== dependencies: "@ant-design/colors" "^7.0.2" - "@ant-design/cssinjs" "^1.18.5" - "@ant-design/icons" "^5.3.6" + "@ant-design/cssinjs" "^1.21.0" + "@ant-design/icons" "^5.3.7" "@ant-design/react-slick" "~1.1.2" - "@babel/runtime" "^7.24.4" + "@babel/runtime" "^7.24.7" "@ctrl/tinycolor" "^3.6.1" "@rc-component/color-picker" "~1.5.3" "@rc-component/mutate-observer" "^1.1.0" - "@rc-component/tour" "~1.14.2" - "@rc-component/trigger" "^2.1.1" + "@rc-component/tour" "~1.15.0" + "@rc-component/trigger" "^2.2.0" classnames "^2.5.1" copy-to-clipboard "^3.3.3" - dayjs "^1.11.10" + dayjs "^1.11.11" qrcode.react "^3.1.0" - rc-cascader "~3.24.1" - rc-checkbox "~3.2.0" + rc-cascader "~3.26.0" + rc-checkbox "~3.3.0" rc-collapse "~3.7.3" - rc-dialog "~9.4.0" - rc-drawer "~7.1.0" + rc-dialog "~9.5.2" + rc-drawer "~7.2.0" rc-dropdown "~4.2.0" - rc-field-form "~1.44.0" - rc-image "~7.6.0" - rc-input "~1.4.5" - rc-input-number "~9.0.0" - rc-mentions "~2.11.1" - rc-menu "~9.13.0" - rc-motion "^2.9.0" - rc-notification "~5.4.0" + rc-field-form "~2.2.1" + rc-image "~7.9.0" + rc-input "~1.5.1" + rc-input-number "~9.1.0" + rc-mentions "~2.14.0" + rc-menu "~9.14.0" + rc-motion "^2.9.2" + rc-notification "~5.6.0" rc-pagination "~4.0.4" - rc-picker "~4.4.2" + rc-picker "~4.5.0" rc-progress "~4.0.0" - rc-rate "~2.12.0" + rc-rate "~2.13.0" rc-resize-observer "^1.4.0" rc-segmented "~2.3.0" - rc-select "~14.13.1" + rc-select "~14.14.0" rc-slider "~10.6.2" rc-steps "~6.0.1" rc-switch "~4.1.0" - rc-table "~7.45.4" - rc-tabs "~14.1.1" - rc-textarea "~1.6.3" + rc-table "~7.45.7" + rc-tabs "~15.1.1" + rc-textarea "~1.7.0" rc-tooltip "~6.2.0" - rc-tree "~5.8.5" - rc-tree-select "~5.19.0" + rc-tree "~5.8.8" + rc-tree-select "~5.21.0" rc-upload "~4.5.2" - rc-util "^5.39.1" + rc-util "^5.43.0" scroll-into-view-if-needed "^3.1.0" throttle-debounce "^5.0.0" @@ -1545,14 +1511,14 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== +aria-query@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: - dequal "^2.0.3" + deep-equal "^2.0.5" -array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -1560,7 +1526,7 @@ array-buffer-byte-length@^1.0.1: call-bind "^1.0.5" is-array-buffer "^3.0.4" -array-includes@^3.1.6, array-includes@^3.1.7: +array-includes@^3.1.6, array-includes@^3.1.7, array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -1637,14 +1603,14 @@ array.prototype.toreversed@^1.1.2: es-shim-unscopables "^1.0.0" array.prototype.tosorted@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz#c8c89348337e51b8a3c48a9227f9ce93ceedcba8" - integrity sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.1.0" + es-abstract "^1.23.3" + es-errors "^1.3.0" es-shim-unscopables "^1.0.2" arraybuffer.prototype.slice@^1.0.3: @@ -1666,11 +1632,6 @@ ast-types-flow@^0.0.8: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== -async-validator@^4.1.0: - version "4.2.5" - resolved "https://registry.yarnpkg.com/async-validator/-/async-validator-4.2.5.tgz#c96ea3332a521699d0afaaceed510a54656c6339" - integrity sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1695,26 +1656,26 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axe-core@=4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.0.tgz#34ba5a48a8b564f67e103f0aa5768d76e15bbbbf" - integrity sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ== +axe-core@^4.9.1: + version "4.9.1" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" + integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== axios@^1.6.8: - version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" - integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== +axobject-query@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" + integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== dependencies: - dequal "^2.0.3" + deep-equal "^2.0.5" balanced-match@^1.0.0: version "1.0.2" @@ -1751,14 +1712,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -braces@^3.0.3: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -1766,14 +1720,14 @@ braces@^3.0.3: fill-range "^7.1.1" browserslist@^4.23.0: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== + version "4.23.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" + integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" + caniuse-lite "^1.0.30001629" + electron-to-chromium "^1.4.796" node-releases "^2.0.14" - update-browserslist-db "^1.0.13" + update-browserslist-db "^1.0.16" call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7, call-bind@~1.0.2: version "1.0.7" @@ -1801,10 +1755,10 @@ camelcase@^1.0.2: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g== -caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: - version "1.0.30001624" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz#0ec4c8fa7a46e5b785477c70b38a56d0b10058eb" - integrity sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA== +caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001629: + version "1.0.30001636" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz#b15f52d2bdb95fad32c2f53c0b68032b85188a78" + integrity sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg== center-align@^0.1.1: version "0.1.3" @@ -1986,16 +1940,11 @@ csstype@^3.0.2, csstype@^3.0.8, csstype@^3.1.3: dependencies: internmap "1 - 2" -"d3-color@1 - 3": +"d3-color@1 - 3", d3-color@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== -d3-color@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.1.tgz#c52002bf8846ada4424d55d97982fef26eb3bc8a" - integrity sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q== - "d3-dispatch@1 - 3": version "3.0.1" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" @@ -2123,9 +2072,9 @@ debug@^3.2.7: ms "^2.1.1" debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== dependencies: ms "2.1.2" @@ -2134,6 +2083,30 @@ decamelize@^1.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +deep-equal@^2.0.5: + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.5" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.2" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + is-date-object "^1.0.5" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + isarray "^2.0.5" + object-is "^1.1.5" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.13" + deep-equal@~1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" @@ -2179,11 +2152,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" @@ -2257,10 +2225,10 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.668: - version "1.4.783" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz#933887165b8b6025a81663d2d97cf4b85cde27b2" - integrity sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ== +electron-to-chromium@^1.4.796: + version "1.4.807" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.807.tgz#4d6c5ea1516f0164ac5bfd487ccd4ee9507c8f01" + integrity sha512-kSmJl2ZwhNf/bcIuCH/imtNOKlpkLDn2jqT5FJ+/0CXjhnFaOa9cOe9gHKKy71eM49izwuQjZhKk+lWQ1JxB7A== emoji-regex@^8.0.0: version "8.0.0" @@ -2273,9 +2241,9 @@ emoji-regex@^9.2.2: integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== enhanced-resolve@^5.12.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== + version "5.17.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" + integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2285,7 +2253,7 @@ entities@^4.2.0: resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: +es-abstract@^1.17.5, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== @@ -2344,12 +2312,27 @@ es-define-property@^1.0.0: dependencies: get-intrinsic "^1.2.4" -es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-iterator-helpers@^1.0.15, es-iterator-helpers@^1.0.17: +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" + is-arguments "^1.1.1" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.7" + isarray "^2.0.5" + stop-iteration-iterator "^1.0.0" + +es-iterator-helpers@^1.0.17, es-iterator-helpers@^1.0.19: version "1.0.19" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz#117003d0e5fec237b4b5c08aded722e0c6d50ca8" integrity sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw== @@ -2401,34 +2384,34 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -esbuild@^0.20.1: - version "0.20.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== +esbuild@^0.21.3: + version "0.21.5" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" + integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" + "@esbuild/aix-ppc64" "0.21.5" + "@esbuild/android-arm" "0.21.5" + "@esbuild/android-arm64" "0.21.5" + "@esbuild/android-x64" "0.21.5" + "@esbuild/darwin-arm64" "0.21.5" + "@esbuild/darwin-x64" "0.21.5" + "@esbuild/freebsd-arm64" "0.21.5" + "@esbuild/freebsd-x64" "0.21.5" + "@esbuild/linux-arm" "0.21.5" + "@esbuild/linux-arm64" "0.21.5" + "@esbuild/linux-ia32" "0.21.5" + "@esbuild/linux-loong64" "0.21.5" + "@esbuild/linux-mips64el" "0.21.5" + "@esbuild/linux-ppc64" "0.21.5" + "@esbuild/linux-riscv64" "0.21.5" + "@esbuild/linux-s390x" "0.21.5" + "@esbuild/linux-x64" "0.21.5" + "@esbuild/netbsd-x64" "0.21.5" + "@esbuild/openbsd-x64" "0.21.5" + "@esbuild/sunos-x64" "0.21.5" + "@esbuild/win32-arm64" "0.21.5" + "@esbuild/win32-ia32" "0.21.5" + "@esbuild/win32-x64" "0.21.5" escalade@^3.1.2: version "3.1.2" @@ -2529,26 +2512,26 @@ eslint-plugin-import@^2.29.1: tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.8.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" - integrity sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" + integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== dependencies: - "@babel/runtime" "^7.23.2" - aria-query "^5.3.0" - array-includes "^3.1.7" + aria-query "~5.1.3" + array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "=4.7.0" - axobject-query "^3.2.1" + axe-core "^4.9.1" + axobject-query "~3.1.1" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" - es-iterator-helpers "^1.0.15" - hasown "^2.0.0" + es-iterator-helpers "^1.0.19" + hasown "^2.0.2" jsx-ast-utils "^3.3.5" language-tags "^1.0.9" minimatch "^3.1.2" - object.entries "^1.1.7" - object.fromentries "^2.0.7" + object.fromentries "^2.0.8" + safe-regex-test "^1.0.3" + string.prototype.includes "^2.0.0" eslint-plugin-prettier@^5.1.3: version "5.1.3" @@ -2564,9 +2547,9 @@ eslint-plugin-react-hooks@4.6.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react-refresh@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz#e8e8accab681861baed00c5c12da70267db0936f" - integrity sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA== + version "0.4.7" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz#1f597f9093b254f10ee0961c139a749acb19af7d" + integrity sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw== eslint-plugin-react@7.34.1: version "7.34.1" @@ -2799,13 +2782,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -2864,9 +2840,9 @@ for-each@^0.3.3, for-each@~0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + version "3.2.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" + integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -2915,7 +2891,7 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -2936,9 +2912,9 @@ get-symbol-description@^1.0.2: get-intrinsic "^1.2.4" get-tsconfig@^4.5.0: - version "4.7.3" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83" - integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg== + version "4.7.5" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" + integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== dependencies: resolve-pkg-maps "^1.0.0" @@ -2962,14 +2938,15 @@ glob-parent@^6.0.2: is-glob "^4.0.3" glob@^10.3.10: - version "10.4.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.1.tgz#0cfb01ab6a6b438177bfe6a58e2576f6efe909c2" - integrity sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw== + version "10.4.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5" + integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w== dependencies: foreground-child "^3.1.0" jackspeak "^3.1.2" minimatch "^9.0.4" minipass "^7.1.2" + package-json-from-dist "^1.0.0" path-scurry "^1.11.1" glob@^7.1.3, glob@~7.2.3: @@ -2992,11 +2969,12 @@ globals@^13.19.0: type-fest "^0.20.2" globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== dependencies: - define-properties "^1.1.3" + define-properties "^1.2.1" + gopd "^1.0.1" globby@^11.1.0: version "11.1.0" @@ -3112,9 +3090,9 @@ immediate@~3.0.5: integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== immutable@^4.0.0: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + version "4.3.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" + integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== import-fresh@^3.2.1: version "3.3.0" @@ -3147,7 +3125,7 @@ inherits@2, inherits@~2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.7: +internal-slot@^1.0.4, internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -3169,7 +3147,7 @@ is-arguments@^1.1.1: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.4: +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -3273,7 +3251,7 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" -is-map@^2.0.3: +is-map@^2.0.2, is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -3308,7 +3286,7 @@ is-regex@^1.1.4, is-regex@~1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.3: +is-set@^2.0.2, is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -3383,18 +3361,18 @@ iterator.prototype@^1.1.2: set-function-name "^2.0.1" jackspeak@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.1.2.tgz#eada67ea949c6b71de50f1b09c92a961897b90ab" - integrity sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ== + version "3.4.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a" + integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: "@pkgjs/parseargs" "^0.11.0" jiti@^1.21.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== + version "1.21.6" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" + integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== "js-tokens@^3.0.0 || ^4.0.0": version "4.0.0" @@ -3469,9 +3447,9 @@ kind-of@^3.0.2: is-buffer "^1.1.5" language-subtag-registry@^0.3.20: - version "0.3.22" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" - integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== + version "0.3.23" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz#23529e04d9e3b74679d70142df3fd2eb6ec572e7" + integrity sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ== language-tags@^1.0.9: version "1.0.9" @@ -3506,9 +3484,9 @@ lilconfig@^2.1.0: integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== lilconfig@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.1.tgz#9d8a246fa753106cfc205fd2d77042faca56e5e3" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" + integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== lines-and-columns@^1.1.6: version "1.2.4" @@ -3579,13 +3557,6 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.2.tgz#48206bc114c1252940c41b25b41af5b545aca878" integrity sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ== -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -3596,15 +3567,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -micromatch@^4.0.5: +micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.7" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== @@ -3784,7 +3747,7 @@ object.entries@^1.1.5, object.entries@^1.1.7: define-properties "^1.2.1" es-object-atoms "^1.0.0" -object.fromentries@^2.0.7: +object.fromentries@^2.0.7, object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -3859,6 +3822,11 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +package-json-from-dist@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" + integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3909,12 +3877,7 @@ pdfast@^0.2.0: resolved "https://registry.yarnpkg.com/pdfast/-/pdfast-0.2.0.tgz#8cbc556e1bf2522177787c0de2e0d4373ba885c9" integrity sha512-cq6TTu6qKSFUHwEahi68k/kqN2mfepjkGrG9Un70cgdRRKLKY6Rf8P8uvP2NvZktaQZNF3YE7agEkLj0vGK9bA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picocolors@^1.0.1: +picocolors@^1.0.0, picocolors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== @@ -4028,9 +3991,9 @@ prettier@3.1.0: integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== prettier@^3.0.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + version "3.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" + integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== pretty-format@^29.7.0: version "29.7.0" @@ -4092,22 +4055,22 @@ rbush@^3.0.1: dependencies: quickselect "^2.0.0" -rc-cascader@~3.24.1: - version "3.24.1" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.24.1.tgz#603bac4427f8865b6ec056705bae8485c65d7798" - integrity sha512-RgKuYgEGPx+6wCgguYFHjMsDZdCyydZd58YJRCfYQ8FObqLnZW0x/vUcEyPjhWIj1EhjV958IcR+NFPDbbj9kg== +rc-cascader@~3.26.0: + version "3.26.0" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.26.0.tgz#1bcc9c29451047dc99e28fdd125c94828d7ddf76" + integrity sha512-L1dml383TPSJD1I11YwxuVbmqaJY64psZqFp1ETlgl3LEOwDu76Cyl11fw5dmjJhMlUWwM5dECQfqJgfebhUjg== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" classnames "^2.3.1" - rc-select "~14.13.0" + rc-select "~14.14.0" rc-tree "~5.8.1" rc-util "^5.37.0" -rc-checkbox@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-3.2.0.tgz#04f83b7f2bf63eaf0e2da25e947b88a0a6321b5a" - integrity sha512-8inzw4y9dAhZmv/Ydl59Qdy5tdp9CKg4oPVcRigi+ga/yKPZS5m5SyyQPtYSgbcqHRYOdUhiPSeKfktc76du1A== +rc-checkbox@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/rc-checkbox/-/rc-checkbox-3.3.0.tgz#0ffcb65ab78c7d2fcd1a0d6554af36786516bd02" + integrity sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.3.2" @@ -4123,10 +4086,10 @@ rc-collapse@~3.7.3: rc-motion "^2.3.4" rc-util "^5.27.0" -rc-dialog@~9.4.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.4.0.tgz#194c107d34cb36a56f1db4a49dc73f6d59eeae85" - integrity sha512-AScCexaLACvf8KZRqCPz12BJ8olszXOS4lKlkMyzDQHS1m0zj1KZMYgmMCh39ee0Dcv8kyrj8mTqxuLyhH+QuQ== +rc-dialog@~9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.5.2.tgz#4cf7cca23aedb6fd3d9344ea8ffd14daa94ee3a0" + integrity sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/portal" "^1.0.0-8" @@ -4134,10 +4097,10 @@ rc-dialog@~9.4.0: rc-motion "^2.3.0" rc-util "^5.21.0" -rc-drawer@~7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-7.1.0.tgz#2beabb8bab1784aea255d0d850bc206c3dc715da" - integrity sha512-nBE1rF5iZvpavoyqhSSz2mk/yANltA7g3aF0U45xkx381n3we/RKs9cJfNKp9mSWCedOKWt9FLEwZDaAaOGn2w== +rc-drawer@~7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/rc-drawer/-/rc-drawer-7.2.0.tgz#8d7de2f1fd52f3ac5a25f54afbb8ac14c62e5663" + integrity sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg== dependencies: "@babel/runtime" "^7.23.9" "@rc-component/portal" "^1.1.1" @@ -4155,64 +4118,64 @@ rc-dropdown@~4.2.0: classnames "^2.2.6" rc-util "^5.17.0" -rc-field-form@~1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-1.44.0.tgz#a66548790fbcee8c5432e9f2efcd1b46b090984b" - integrity sha512-el7w87fyDUsca63Y/s8qJcq9kNkf/J5h+iTdqG5WsSHLH0e6Usl7QuYSmSVzJMgtp40mOVZIY/W/QP9zwrp1FA== +rc-field-form@~2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-2.2.1.tgz#0a8c76a0103535c229311dac7f91d32ea13cd3bc" + integrity sha512-uoNqDoR7A4tn4QTSqoWPAzrR7ZwOK5I+vuZ/qdcHtbKx+ZjEsTg7QXm2wk/jalDiSksAQmATxL0T5LJkRREdIA== dependencies: "@babel/runtime" "^7.18.0" - async-validator "^4.1.0" + "@rc-component/async-validator" "^5.0.3" rc-util "^5.32.2" -rc-image@~7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-7.6.0.tgz#2867087b77c8595ea9eb37d18ca863e47904b191" - integrity sha512-tL3Rvd1sS+frZQ01i+tkeUPaOeFz2iG9/scAt/Cfs0hyCRVA/w0Pu1J/JxIX8blalvmHE0bZQRYdOmRAzWu4Hg== +rc-image@~7.9.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-7.9.0.tgz#2d700a5cf891bb3d0d800b7c38348927ebb9f49b" + integrity sha512-l4zqO5E0quuLMCtdKfBgj4Suv8tIS011F5k1zBBlK25iMjjiNHxA0VeTzGFtUZERSA45gvpXDg8/P6qNLjR25g== dependencies: "@babel/runtime" "^7.11.2" "@rc-component/portal" "^1.0.2" classnames "^2.2.6" - rc-dialog "~9.4.0" + rc-dialog "~9.5.2" rc-motion "^2.6.2" rc-util "^5.34.1" -rc-input-number@~9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-9.0.0.tgz#47da6eaf95b0cf566fcdf68196c4dc82b8c8f166" - integrity sha512-RfcDBDdWFFetouWFXBA+WPEC8LzBXyngr9b+yTLVIygfFu7HiLRGn/s/v9wwno94X7KFvnb28FNynMGj9XJlDQ== +rc-input-number@~9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-9.1.0.tgz#fd577db284b65548c156500322a2feaa04321565" + integrity sha512-NqJ6i25Xn/AgYfVxynlevIhX3FuKlMwIFpucGG1h98SlK32wQwDK0zhN9VY32McOmuaqzftduNYWWooWz8pXQA== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/mini-decimal" "^1.0.1" classnames "^2.2.5" - rc-input "~1.4.0" - rc-util "^5.28.0" + rc-input "~1.5.0" + rc-util "^5.40.1" -rc-input@~1.4.0, rc-input@~1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-1.4.5.tgz#1f2f13fb1adb15fce5936aebcfab354f41b4f348" - integrity sha512-AjzykhwnwYTRSwwgCu70CGKBIAv6bP2nqnFptnNTprph/TF1BAs0Qxl91mie/BR6n827WIJB6ZjaRf9iiMwAfw== +rc-input@~1.5.0, rc-input@~1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-1.5.1.tgz#36d37eb045f1fa17de7da1a3fab94edfa331ab92" + integrity sha512-+nOzQJDeIfIpNP/SgY45LXSKbuMlp4Yap2y8c+ZpU7XbLmNzUd6+d5/S75sA/52jsVE6S/AkhkkDEAOjIu7i6g== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-util "^5.18.1" -rc-mentions@~2.11.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-2.11.1.tgz#3e742d4b558965701021cff75b84af6cd4744ed3" - integrity sha512-upb4AK1SRFql7qGnbLEvJqLMugVVIyjmwBJW9L0eLoN9po4JmJZaBzmKA4089fNtsU8k6l/tdZiVafyooeKnLw== +rc-mentions@~2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-2.14.0.tgz#7cad133de2e95b7478c0ebb5d2a4315dbe9bda29" + integrity sha512-qKR59FMuF8PK4ZqsbWX3UuA5P1M/snzyqV6Yt3y1DCFbCEdqUGIBgQp6vEfLCO6Z0RoRFlzXtCeSlBTcDDpg1A== dependencies: "@babel/runtime" "^7.22.5" "@rc-component/trigger" "^2.0.0" classnames "^2.2.6" - rc-input "~1.4.0" - rc-menu "~9.13.0" - rc-textarea "~1.6.1" + rc-input "~1.5.0" + rc-menu "~9.14.0" + rc-textarea "~1.7.0" rc-util "^5.34.1" -rc-menu@~9.13.0: - version "9.13.0" - resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.13.0.tgz#55426531af5fd0a2a0e0a50020cbd002b231edf9" - integrity sha512-1l8ooCB3HcYJKCltC/s7OxRKRjgymdl9htrCeGZcXNaMct0RxZRK6OPV3lPhVksIvAGMgzPd54ClpZ5J4b8cZA== +rc-menu@~9.14.0: + version "9.14.1" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.14.1.tgz#5c2aea72bdce421e9d50bf721ad8b76c154ae66f" + integrity sha512-5wlRb3M8S4yGlWhSoEYJ7ZVRElyScdcpUHxgiLxkeig1tEdyKrnED3B2fhpN0Rrpdp9jyhnmZR/Lwq2fH5VvDQ== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/trigger" "^2.0.0" @@ -4221,19 +4184,19 @@ rc-menu@~9.13.0: rc-overflow "^1.3.1" rc-util "^5.27.0" -rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.0.tgz#9e18a1b8d61e528a97369cf9a7601e9b29205710" - integrity sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ== +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0, rc-motion@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.2.tgz#f7c6d480250df8a512d0cfdce07ff3da906958cf" + integrity sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" - rc-util "^5.21.0" + rc-util "^5.43.0" -rc-notification@~5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-5.4.0.tgz#c5ea20bfe4ed2dbacc7ef945777626c050945db8" - integrity sha512-li19y9RoYJciF3WRFvD+DvWS70jdL8Fr+Gfb/OshK+iY6iTkwzoigmSIp76/kWh5tF5i/i9im12X3nsF85GYdA== +rc-notification@~5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-5.6.0.tgz#1639aa30686d79ee4bb8ace05a698a5a104aaa74" + integrity sha512-TGQW5T7waOxLwgJG7fXcw8l7AQiFOjaZ7ISF5PrU526nunHRNcTMuzKihQHaF4E/h/KfOCDk3Mv8eqzbu2e28w== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -4259,10 +4222,10 @@ rc-pagination@~4.0.4: classnames "^2.3.2" rc-util "^5.38.0" -rc-picker@~4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.4.2.tgz#bb2dc8c9be0a967e7bb827e23132ba78788c1e5f" - integrity sha512-MdbAXvwiGyhb+bHe66qPps8xPQivzEgcyCp3/MPK4T+oER0gOmVRCEDxaD4FhYG/7GLH3rDrHpu79BvEn2JFTQ== +rc-picker@~4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.5.0.tgz#ae7a028ed6184e0ef40a2c8aaeb9d5dbef89d4b8" + integrity sha512-suqz9bzuhBQlf7u+bZd1bJLPzhXpk12w6AjQ9BTPTiFwexVZgUKViG1KNLyfFvW6tCUZZK0HmCCX7JAyM+JnCg== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/trigger" "^2.0.0" @@ -4280,10 +4243,10 @@ rc-progress@~4.0.0: classnames "^2.2.6" rc-util "^5.16.1" -rc-rate@~2.12.0: - version "2.12.0" - resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.12.0.tgz#0182deffed3b009cdcc61660da8746c39ed91ed5" - integrity sha512-g092v5iZCdVzbjdn28FzvWebK2IutoVoiTeqoLTj9WM7SjA/gOJIw5/JFZMRyJYYVe1jLAU2UhAfstIpCNRozg== +rc-rate@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/rc-rate/-/rc-rate-2.13.0.tgz#642f591ccf55c3a5d84d8d212caf1f7951d203a8" + integrity sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" @@ -4319,10 +4282,10 @@ rc-segmented@~2.3.0: rc-motion "^2.4.4" rc-util "^5.17.0" -rc-select@~14.13.0, rc-select@~14.13.1: - version "14.13.1" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.13.1.tgz#2d3ca539032bf8184e511597bb93436e5b9cf02c" - integrity sha512-A1VHqjIOemxLnUGRxLGVqXBs8jGcJemI5NXxOJwU5PQc1wigAu1T4PRLgMkTPDOz8gPhlY9dwsPzMgakMc2QjQ== +rc-select@~14.14.0: + version "14.14.0" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.14.0.tgz#110771fad72496843b245236bcb0007553b9fe0d" + integrity sha512-Uo2wulrjoPPRLCPd7zlK4ZFVJxlTN//yp1xWP/U+TUOQCyXrT+Duvq/Si5OzVcmQyWAUSbsplc2OwNNhvbOeKQ== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/trigger" "^2.1.1" @@ -4359,39 +4322,39 @@ rc-switch@~4.1.0: classnames "^2.2.1" rc-util "^5.30.0" -rc-table@~7.45.4: - version "7.45.5" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.45.5.tgz#677e82e311486ba770e5c40673521156f0c1a372" - integrity sha512-R5sOfToOk7CalSkebZpqM8lkKWOJR7uXPGEhjjTSoj5egyHBwMxaACoPj2oI+6qLSll9yZrG5K+8HTN57b2Ahg== +rc-table@~7.45.7: + version "7.45.7" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.45.7.tgz#f7c509e05c677a30ad5b212750122da6f5318004" + integrity sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/context" "^1.4.0" classnames "^2.2.5" rc-resize-observer "^1.1.0" rc-util "^5.37.0" - rc-virtual-list "^3.11.1" + rc-virtual-list "^3.14.2" -rc-tabs@~14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-14.1.1.tgz#f49467feb69af0156c7864d04c21396e4c5c7911" - integrity sha512-5nOr9PVpJy2SWHTLgv1+kESDOb0tFzl0cYU9r9d8LfL0Wg9i/n1B558rmkxdQHgBwMqxmwoyPSAbQROxMQe8nw== +rc-tabs@~15.1.1: + version "15.1.1" + resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-15.1.1.tgz#99f4c7647e01d3e22216d94222d717e928ed98d0" + integrity sha512-Tc7bJvpEdkWIVCUL7yQrMNBJY3j44NcyWS48jF/UKMXuUlzaXK+Z/pEL5LjGcTadtPvVmNqA40yv7hmr+tCOAw== dependencies: "@babel/runtime" "^7.11.2" classnames "2.x" rc-dropdown "~4.2.0" - rc-menu "~9.13.0" + rc-menu "~9.14.0" rc-motion "^2.6.2" rc-resize-observer "^1.0.0" rc-util "^5.34.1" -rc-textarea@~1.6.1, rc-textarea@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-1.6.3.tgz#3f294fdf5dfadbe9d0e7b695cea4da557728a9be" - integrity sha512-8k7+8Y2GJ/cQLiClFMg8kUXOOdvcFQrnGeSchOvI2ZMIVvX5a3zQpLxoODL0HTrvU63fPkRmMuqaEcOF9dQemA== +rc-textarea@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-1.7.0.tgz#115c421359dddee58c601008ec2209b41cb8f8df" + integrity sha512-UxizYJkWkmxP3zofXgc487QiGyDmhhheDLLjIWbFtDmiru1ls30KpO8odDaPyqNUIy9ugj5djxTEuezIn6t3Jg== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" - rc-input "~1.4.0" + rc-input "~1.5.0" rc-resize-observer "^1.0.0" rc-util "^5.27.0" @@ -4404,21 +4367,21 @@ rc-tooltip@~6.2.0: "@rc-component/trigger" "^2.0.0" classnames "^2.3.1" -rc-tree-select@~5.19.0: - version "5.19.0" - resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.19.0.tgz#1da83694ffeeeed7ba5e4bd49a1d7df48501677d" - integrity sha512-f4l5EsmSGF3ggj76YTzKNPY9SnXfFaer7ZccTSGb3urUf54L+cCqyT+UsPr+S5TAr8mZSxJ7g3CgkCe+cVQ6sw== +rc-tree-select@~5.21.0: + version "5.21.0" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.21.0.tgz#4ff94d5c28cba9810c4970d1f12ab7248c3b6e55" + integrity sha512-w+9qEu6zh0G3wt9N/hzWNSnqYH1i9mH1Nqxo0caxLRRFXF5yZWYmpCDoDTMdQM1Y4z3Q5yj08qyrPH/d4AtumA== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" - rc-select "~14.13.0" + rc-select "~14.14.0" rc-tree "~5.8.1" rc-util "^5.16.1" -rc-tree@~5.8.1, rc-tree@~5.8.5: - version "5.8.5" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.8.5.tgz#f714a383be27bd87366cf32f7f85b2af1fbae6b6" - integrity sha512-PRfcZtVDNkR7oh26RuNe1hpw11c1wfgzwmPFL0lnxGnYefe9lDAO6cg5wJKIAwyXFVt5zHgpjYmaz0CPy1ZtKg== +rc-tree@~5.8.1, rc-tree@~5.8.8: + version "5.8.8" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.8.8.tgz#650a13ec825a5a4feec6bbaf6a380465986ee0db" + integrity sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -4446,18 +4409,18 @@ rc-util@^4.19.0: react-lifecycles-compat "^3.0.4" shallowequal "^1.1.0" -rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.28.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.39.1, rc-util@^5.4.0: - version "5.39.1" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.39.1.tgz#7bca4fb55e20add0eef5c23166cd9f9e5f51a8a1" - integrity sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ== +rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.4.0, rc-util@^5.40.1, rc-util@^5.43.0: + version "5.43.0" + resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.43.0.tgz#bba91fbef2c3e30ea2c236893746f3e9b05ecc4c" + integrity sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw== dependencies: "@babel/runtime" "^7.18.3" react-is "^18.2.0" -rc-virtual-list@^3.11.1, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: - version "3.11.5" - resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.11.5.tgz#d4ba3bbd8e7ceae846f575a7d982d061ace1e76e" - integrity sha512-iZRW99m5jAxtwKNPLwUrPryurcnKpXBdTyhuBp6ythf7kg/otKO5cCiIvL55GQwU0QGSlouQS0tnkciRMJUwRQ== +rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: + version "3.14.3" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.14.3.tgz#f437aa9fe753b5a6159de56d8a4cb617a910ee4c" + integrity sha512-6+6wiEhdqakNBnbRJymgMlh+90qpkgqherTRo1l1cX7mK6F9hWsazPczmP0lA+64yhC9/t+M9Dh5pjvDWimn8A== dependencies: "@babel/runtime" "^7.20.0" classnames "^2.2.6" @@ -4486,9 +4449,9 @@ react-i18next@^14.1.2: html-parse-stringify "^3.0.1" react-icons@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.1.0.tgz#9e7533cc256571a610c2a1ec8a7a143fb1222943" - integrity sha512-D3zug1270S4hbSlIRJ0CUS97QE1yNNKDjzQe3HqY0aefp2CBn9VgzgES27sRR2gOvFK+0CNx/BW0ggOESp6fqQ== + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a" + integrity sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw== react-is@^16.12.0, react-is@^16.13.1: version "16.13.1" @@ -4506,27 +4469,27 @@ react-lifecycles-compat@^3.0.4: integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-native-svg@^15.2.0: - version "15.2.0" - resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-15.2.0.tgz#9561a6b3bd6b44689f437ba13182afee33bd5557" - integrity sha512-R0E6IhcJfVLsL0lRmnUSm72QO+mTqcAOM5Jb8FVGxJqX3NfJMlMP0YyvcajZiaRR8CqQUpEoqrY25eyZb006kw== + version "15.3.0" + resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-15.3.0.tgz#e24b833fe330714c99f1dd894bb0da52ad859a4c" + integrity sha512-mBHu/fdlzUbpGX8SZFxgbKvK/sgqLfDLP8uh8G7Us+zJgdjO8OSEeqHQs+kPRdQmdLJQiqPJX2WXgCl7ToTWqw== dependencies: css-select "^5.1.0" css-tree "^1.1.3" react-router-dom@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.23.0.tgz#8b80ad92ad28f4dc38972e92d84b4c208150545a" - integrity sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ== + version "6.23.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.23.1.tgz#30cbf266669693e9492aa4fc0dde2541ab02322f" + integrity sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ== dependencies: - "@remix-run/router" "1.16.0" - react-router "6.23.0" + "@remix-run/router" "1.16.1" + react-router "6.23.1" -react-router@6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.23.0.tgz#2f2d7492c66a6bdf760be4c6bdf9e1d672fa154b" - integrity sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA== +react-router@6.23.1: + version "6.23.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.23.1.tgz#d08cbdbd9d6aedc13eea6e94bc6d9b29cb1c4be9" + integrity sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ== dependencies: - "@remix-run/router" "1.16.0" + "@remix-run/router" "1.16.1" react-to-print@^2.15.1: version "2.15.1" @@ -4666,28 +4629,28 @@ rollup@^0.25.8: source-map-support "^0.3.2" rollup@^4.13.0: - version "4.17.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.17.1.tgz#df576a5b8f4aa4d1569770e9d1b7a52129fe98f9" - integrity sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ== + version "4.18.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.0.tgz#497f60f0c5308e4602cf41136339fbf87d5f5dda" + integrity sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg== dependencies: "@types/estree" "1.0.5" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.17.1" - "@rollup/rollup-android-arm64" "4.17.1" - "@rollup/rollup-darwin-arm64" "4.17.1" - "@rollup/rollup-darwin-x64" "4.17.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.17.1" - "@rollup/rollup-linux-arm-musleabihf" "4.17.1" - "@rollup/rollup-linux-arm64-gnu" "4.17.1" - "@rollup/rollup-linux-arm64-musl" "4.17.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.17.1" - "@rollup/rollup-linux-riscv64-gnu" "4.17.1" - "@rollup/rollup-linux-s390x-gnu" "4.17.1" - "@rollup/rollup-linux-x64-gnu" "4.17.1" - "@rollup/rollup-linux-x64-musl" "4.17.1" - "@rollup/rollup-win32-arm64-msvc" "4.17.1" - "@rollup/rollup-win32-ia32-msvc" "4.17.1" - "@rollup/rollup-win32-x64-msvc" "4.17.1" + "@rollup/rollup-android-arm-eabi" "4.18.0" + "@rollup/rollup-android-arm64" "4.18.0" + "@rollup/rollup-darwin-arm64" "4.18.0" + "@rollup/rollup-darwin-x64" "4.18.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.18.0" + "@rollup/rollup-linux-arm-musleabihf" "4.18.0" + "@rollup/rollup-linux-arm64-gnu" "4.18.0" + "@rollup/rollup-linux-arm64-musl" "4.18.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.18.0" + "@rollup/rollup-linux-riscv64-gnu" "4.18.0" + "@rollup/rollup-linux-s390x-gnu" "4.18.0" + "@rollup/rollup-linux-x64-gnu" "4.18.0" + "@rollup/rollup-linux-x64-musl" "4.18.0" + "@rollup/rollup-win32-arm64-msvc" "4.18.0" + "@rollup/rollup-win32-ia32-msvc" "4.18.0" + "@rollup/rollup-win32-x64-msvc" "4.18.0" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4732,9 +4695,9 @@ safe-stable-stringify@^2.4.3: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass@^1.75.0: - version "1.75.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.75.0.tgz#91bbe87fb02dfcc34e052ddd6ab80f60d392be6c" - integrity sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw== + version "1.77.6" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.6.tgz#898845c1348078c2e6d1b64f9ee06b3f8bd489e4" + integrity sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -4760,11 +4723,9 @@ semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.6, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" + version "7.6.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" + integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== set-cookie-parser@^2.4.8: version "2.6.0" @@ -4866,6 +4827,13 @@ source-map@~0.5.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + string-convert@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/string-convert/-/string-convert-0.2.1.tgz#6982cc3049fbb4cd85f8b24568b9d9bf39eeff97" @@ -4898,6 +4866,14 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.includes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz#8986d57aee66d5460c144620a6d873778ad7289f" + integrity sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.matchall@^4.0.10: version "4.0.11" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz#1092a72c59268d2abaad76582dccc687c0297e0a" @@ -5039,9 +5015,9 @@ synckit@^0.8.6: tslib "^2.6.2" tailwindcss@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.3.tgz#be48f5283df77dfced705451319a5dffb8621519" - integrity sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A== + version "3.4.4" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.4.tgz#351d932273e6abfa75ce7d226b5bf3a6cb257c05" + integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -5135,9 +5111,9 @@ toggle-selection@^1.0.6: integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== tough-cookie@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -5170,9 +5146,9 @@ tsconfig-paths@^3.15.0: strip-bom "^3.0.0" tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.3, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -5270,7 +5246,7 @@ universalify@^0.2.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== -update-browserslist-db@^1.0.13: +update-browserslist-db@^1.0.16: version "1.0.16" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz#f6d489ed90fb2f07d67784eb3f53d7891f736356" integrity sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ== @@ -5309,11 +5285,11 @@ util-deprecate@^1.0.2: integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== vite@^5.2.0: - version "5.2.10" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.2.10.tgz#2ac927c91e99d51b376a5c73c0e4b059705f5bd7" - integrity sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw== + version "5.3.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.1.tgz#bb2ca6b5fd7483249d3e86b25026e27ba8a663e6" + integrity sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ== dependencies: - esbuild "^0.20.1" + esbuild "^0.21.3" postcss "^8.4.38" rollup "^4.13.0" optionalDependencies: @@ -5325,9 +5301,9 @@ void-elements@3.1.0: integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== vue-eslint-parser@^9.1.0: - version "9.4.2" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz#02ffcce82042b082292f2d1672514615f0d95b6d" - integrity sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ== + version "9.4.3" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz#9b04b22c71401f1e8bca9be7c3e3416a4bde76a8" + integrity sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg== dependencies: debug "^4.3.4" eslint-scope "^7.1.1" @@ -5396,7 +5372,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -5453,19 +5429,14 @@ wrappy@1: integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^7.4.5: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== yaml@^2.3.4: - version "2.4.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362" - integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== + version "2.4.5" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" + integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== yargs@~3.10.0: version "3.10.0" From 33edc4c24cb01022bcb1e32f72cf6b4ea11772e1 Mon Sep 17 00:00:00 2001 From: ben_peng Date: Tue, 9 Jul 2024 13:52:10 +0800 Subject: [PATCH 025/118] alan template --- .yarn/install-state.gz | Bin 0 -> 816182 bytes .yarnrc.yml | 1 + package.json | 1 + src/assets/bvac_logo.png | Bin 0 -> 16359 bytes src/assets/cny.png | Bin 0 -> 4287 bytes src/assets/twd.png | Bin 0 -> 4253 bytes src/assets/u28_logo_s.png | Bin 0 -> 1588 bytes src/assets/usdt.png | Bin 0 -> 2759 bytes src/components/AccountChart.tsx | 38 +- src/components/AddAccount.tsx | 148 +- src/components/ChangeBank.tsx | 114 - src/components/DownloadMT4.tsx | 7 +- src/components/GoToTrade.tsx | 209 +- .../InvestmentMarket/InvestmentMarket.tsx | 21 +- src/components/LoopBanner.tsx | 7 +- src/components/ProtectBanner.tsx | 487 +- src/pages/AuthLayout/AuthLayout.tsx | 4 +- src/pages/Home.tsx | 49 +- src/pages/HotInvestMents/HotInvestMents.tsx | 276 +- src/pages/PublicLayout/CsChat.tsx | 96 + src/pages/PublicLayout/PublicLayout.tsx | 451 +- src/pages/PublicLayout/UserChat.tsx | 143 - src/pages/account/index.tsx | 1 + src/pages/property/Deposit.tsx | 21 +- src/pages/property/InProgress.tsx | 2 +- src/pages/property/Withdraw.tsx | 24 +- src/pages/property/components/PayChannel.tsx | 68 + .../components/SafetyVerification.tsx | 2 +- .../property/components/TransferLoading.tsx | 145 +- src/pages/property/components/USDTLoading.tsx | 180 +- src/pages/property/components/UseLoading.tsx | 156 +- src/pages/property/index.tsx | 2 +- src/pages/user/components/ChangeBank.tsx | 18 + src/{ => pages/user}/components/EditBank.tsx | 1 - src/pages/user/components/KYCModal.tsx | 221 - src/pages/user/components/KycBankModal.tsx | 125 + src/pages/user/components/KycBankResult.tsx | 30 + .../user/components/KycIdentityModal.tsx | 259 + .../user/components/KycIdentityResult.tsx | 53 + src/pages/user/index.tsx | 104 +- yarn.lock | 13542 +++++++++------- 41 files changed, 9856 insertions(+), 7150 deletions(-) create mode 100644 .yarn/install-state.gz create mode 100644 .yarnrc.yml create mode 100644 src/assets/bvac_logo.png create mode 100644 src/assets/cny.png create mode 100644 src/assets/twd.png create mode 100644 src/assets/u28_logo_s.png create mode 100644 src/assets/usdt.png delete mode 100644 src/components/ChangeBank.tsx create mode 100644 src/pages/PublicLayout/CsChat.tsx delete mode 100644 src/pages/PublicLayout/UserChat.tsx create mode 100644 src/pages/property/components/PayChannel.tsx create mode 100644 src/pages/user/components/ChangeBank.tsx rename src/{ => pages/user}/components/EditBank.tsx (99%) delete mode 100644 src/pages/user/components/KYCModal.tsx create mode 100644 src/pages/user/components/KycBankModal.tsx create mode 100644 src/pages/user/components/KycBankResult.tsx create mode 100644 src/pages/user/components/KycIdentityModal.tsx create mode 100644 src/pages/user/components/KycIdentityResult.tsx diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz new file mode 100644 index 0000000000000000000000000000000000000000..14ce0e76e1f38f6b54a243cba437ea302b933361 GIT binary patch literal 816182 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 BNA3nhfEz(C=2d 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%0AhZnzUuTVxZJ^1f6X8eaC}%ZI)X$IcWCxkQy%@7q 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%0D77T0f8DU0Y?Q&qyv4g&9Xf7*)vIZok@}bjF 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

    !3N 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%0AuO3Ro9TAu2wjNeXNqMp&zU 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 HCL#X|+gx(j literal 0 HcmV?d00001 diff --git a/src/assets/cny.png b/src/assets/cny.png new file mode 100644 index 0000000000000000000000000000000000000000..3aa6c611c8204da5d338f394128e26ab116d7e68 GIT binary patch literal 4287 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 literal 0 HcmV?d00001 diff --git a/src/assets/twd.png b/src/assets/twd.png new file mode 100644 index 0000000000000000000000000000000000000000..84dbaf79f2f6a8950c5353a5ae759d7c062ccf16 GIT binary patch literal 4253 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 = (props) => { ]; const config = { forceFit: true, - title: { - visible: true, - text: '环图-指标卡', - }, - description: { - visible: true, - text: '环图指标卡能够代替tooltip\uFF0C在环图中心挖空部分显示各分类的详细信息\u3002', - }, - label: { - style: { - color: '#fff', - }, - }, - radius: 1.1, - innerRadius: 0.6, + radius: 1, + innerRadius: 0.9, padding: 'auto', data, angleField: 'value', colorField: 'type', statistic: { visible: true }, + legend: { + color: { + title: false, + position: 'bottom', + rowPadding: 5, + }, + }, + annotations: [ + { + type: 'text', + style: { + text: `價值\n${'549,840.16'}`, + x: '50%', + y: '50%', + textAlign: 'center', + fontSize: 30, + fontStyle: 'bold', + }, + }, + ], }; + const dataText = [ { title: '結餘', diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx index c3b9951..f9cefc8 100644 --- a/src/components/AddAccount.tsx +++ b/src/components/AddAccount.tsx @@ -1,42 +1,28 @@ import React, { useState } from 'react'; -import { Modal, Typography, Button, Dropdown, Menu, Radio, Form, Input } from 'antd'; +import { Modal, Typography, Button, Radio, Form, Input } from 'antd'; import Mt4 from '../assets/mt4.png'; import { useTranslation } from 'react-i18next'; +import { CheckCard } from '@ant-design/pro-components'; +import DownloadMT4 from './DownloadMT4'; const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visible, onClose }) => { - const [selectedPlatform, setSelectedPlatform] = useState(null); const [accountType, setAccountType] = useState('real'); const { t } = useTranslation(); - const platforms = [ - { name: 'metaTrade 4', key: 'mt4' }, - { name: 'metaTrade 5', key: 'mt5' }, - ]; - - const handleSelectPlatform = (key: string) => { - setSelectedPlatform(key); - }; - - const platformMenu = ( -

    - - window - mac - - - iphoen - ios - - - ); - const onFinish = (values: any) => { console.log('Received values:', values); }; return ( {t('account.新增帳戶')}} + title={ + + {t('account.新增帳戶')} + + } open={visible} onCancel={onClose} footer={null} @@ -45,98 +31,62 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib layout='vertical' onFinish={onFinish} > - {t('account.選擇交易平台')} - {platforms.map((platform) => ( - - ))} - {t('account.選擇帳戶類型')} + , + }, + { + title: 'MetaTrader 5', + value: 'MetaTrader 5', + avatar: Mt4, + description: , + }, + ]} + /> + + + setAccountType(e.target.value)} value={accountType} - style={{ marginTop: 20 }} - > - {t('account.真實帳戶')} - {t('account.虛擬帳戶')} - + defaultValue='real' + options={[ + { label: t('account.真實帳戶'), value: 'real' }, + { label: t('account.虛擬帳戶'), value: 'demo' }, + ]} + /> - {t('account.設定帳戶密碼')} - + + - - - - - ); -}; - -export default EditBank; diff --git a/src/components/DownloadMT4.tsx b/src/components/DownloadMT4.tsx index 972eb5c..00cce6e 100644 --- a/src/components/DownloadMT4.tsx +++ b/src/components/DownloadMT4.tsx @@ -66,7 +66,12 @@ const DownloadMT4: React.FunctionComponent = (props) => { menu={{ items }} trigger={['click']} > - + ); }; diff --git a/src/components/GoToTrade.tsx b/src/components/GoToTrade.tsx index b3f2303..9418336 100644 --- a/src/components/GoToTrade.tsx +++ b/src/components/GoToTrade.tsx @@ -1,8 +1,12 @@ import React, { useState } from 'react'; -import { Modal, Typography, Button, Dropdown, Menu } from 'antd'; +import { Modal, Typography, Form, Space, Avatar, Statistic, Tag, Input } from 'antd'; import AddAccount from './AddAccount'; // 請替換成實際的路徑 import Mt4 from '../assets/mt4.png'; import { useTranslation } from 'react-i18next'; +import DownloadMT4 from './DownloadMT4'; +import SelectAccount from './SelectAccount'; +import { CheckCard } from '@ant-design/pro-components'; +import Gold from '../assets/GOLD.png'; interface GoToTradeProps { isModalVisible: boolean; @@ -13,170 +17,93 @@ interface GoToTradeProps { const GoToTrade: React.FC = ({ isModalVisible, handleOk, handleCancel }) => { const { t } = useTranslation(); - const [selectedPlatform, setSelectedPlatform] = useState(null); const [showAddAccount, setShowAddAccount] = useState(false); // 控制顯示新增帳戶彈窗的狀態 - const platforms = [ - { name: 'metaTrade 4', key: 'mt4' }, - { name: 'metaTrade 5', key: 'mt5' }, - ]; - - const handleSelectPlatform = (key: string) => { - setSelectedPlatform(key); + const onFinish = (values: any) => { + console.log('Received values:', values); }; - const platformMenu = ( - - - window - mac - - - iphone - ios - - - ); - - const AccountMenuContent = ( - - - MT4-1505050505 - MT4-1505050505 - - - setShowAddAccount(true)} // 點擊時顯示新增帳戶彈窗 - > - - - - ); - return ( <> +
    前往交易 -
    -
    - - AUDJPY - 市場開放 - -
    - 1231123123 - - 123 - 123 - -
    -
    -
    } open={isModalVisible} onOk={handleOk} onCancel={handleCancel} > - {t('account.選擇交易平台')} - {platforms.map((platform) => ( - - ))} - - 選擇帳戶 - 依上方選擇篩選 - - -
    - xxxxx帳戶 -
    -
    - {t('assets.帳戶可用資金')}:$ 78763 + + + + + 黃金市場開放 + + } + value={2735.71} + precision={2} + valueStyle={{ fontWeight: 'bold' }} + suffix={
    ↑ 0.04 %
    } + /> + +
    + + , + }, + { + title: 'MetaTrader 5', + value: 'MetaTrader 5', + avatar: Mt4, + description: , + }, + ]} + /> + + + + + + + +
    {showAddAccount && ( // 顯示 AddAccount 組件的條件 setShowAddAccount(false)} footer={null} // 不顯示底部按鈕 diff --git a/src/components/InvestmentMarket/InvestmentMarket.tsx b/src/components/InvestmentMarket/InvestmentMarket.tsx index d334fc8..e450a12 100644 --- a/src/components/InvestmentMarket/InvestmentMarket.tsx +++ b/src/components/InvestmentMarket/InvestmentMarket.tsx @@ -1,6 +1,5 @@ import { useState } from 'react'; -import { Input, Tabs } from 'antd'; -import Title from 'antd/lib/typography/Title'; +import { Flex, Input, Tabs } from 'antd'; import HotInvestMents from '../../pages/HotInvestMents/HotInvestMents'; import { useTranslation } from 'react-i18next'; @@ -22,23 +21,19 @@ const YourComponent = () => { ]; return ( -
    - - <div className='text-[25px] whitespace-nowrap mr-3 mb-3 sm:mb-0'>投資市場</div> + <div className='mt-10'> + <Flex justify='space-between'> + <div className='text-2xl font-bold '>投資市場</div> <Input.Search - placeholder='input search text' + placeholder='探索投資商品' allowClear - style={{ width: 200 }} + className='max-2xl:max-w-1/2 w-4/6' /> - + 额外的内容
    } activeKey={activeTab} - items={tabItems.map(item => ({ + items={tabItems.map((item) => ({ key: item.key, label: item.label, children: item.content, diff --git a/src/components/LoopBanner.tsx b/src/components/LoopBanner.tsx index 89d816d..a07a906 100644 --- a/src/components/LoopBanner.tsx +++ b/src/components/LoopBanner.tsx @@ -11,6 +11,7 @@ const LoopBanner: React.FunctionComponent = (props) => { return ( = (props) => { > - + ↑ 0.04 %} /> diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 7154461..c4e4259 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -1,17 +1,16 @@ -import { Avatar, Button, Card, Col, Row, Space, Statistic, Typography } from 'antd'; +import { Avatar, Button, Card, Col, Flex, Modal, Row, Space, Statistic, Typography } from 'antd'; import React, { useState } from 'react'; -import { CheckOutlined } from '@ant-design/icons'; +import { CheckOutlined, CloseOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import { StatisticCard } from '@ant-design/pro-components'; -import KYCModal from '@/pages/user/components/KYCModal'; +import KYCModal from '@/pages/user/components/KycIdentityModal'; import ProtectBannerImg_1 from '../assets/ProtectBanner_img_1.png'; import ProtectBannerImg_2 from '../assets/ProtectBanner_img_2.png'; import ProtectBannerImg_3 from '../assets/ProtectBanner_img_3.png'; import DownloadMT4 from './DownloadMT4'; -import InvestmentMarket from './InvestmentMarket/InvestmentMarket'; import { useTranslation } from 'react-i18next'; - - +import AddAccount from './AddAccount'; +import AccountChart from './AccountChart'; interface IProtectBannerProps {} @@ -20,295 +19,341 @@ const ProtectBanner: React.FunctionComponent = () => { const { Title, Text } = Typography; const [openKYCModal, setOpenKYCModal] = useState(false); const { Divider } = StatisticCard; + const [OpenAccountChart, setOpenAccountChart] = useState(false); const ScrollToTopButton = () => { window.location.href = '#'; // 將頁面滾動到頂部 - } - + }; + const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); + return (
    {/* 尚未實名驗證 */} - -

    + +
    - <div className='text-[#8c8c8c] text-center sm:text-start'>歡迎登入 寶泰!</div>{' '} - <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>{t('assets.通過實名驗證')}</div> + <div className='text-[#8c8c8c] max-sm:text-[12px]'>歡迎登入 寶泰!</div> + <div className=' sm:text-[40px]'>{t('assets.通過實名驗證')}</div> - - -
    - - <div className='text-[16px] sm:text-[20px]'>{t('assets.通過')}</div> - - - - } - /> - {t('assets.入金')} - - - } - /> - {t('assets.出金')} - - - } - /> - 交易 - + + +
    {t('assets.通過')}
    + + } + /> + {t('assets.入金')} + + + } + /> + {t('assets.出金')} + + + } + /> + 交易 + +
    + + +
    {t('assets.未通過')}
    + + + } + /> + 入金(限額 2,000.00美元) -
    - {/* -
    - 未通過 - - - } - /> - 入金(限額 2,000.00美元) - - - } - /> - {t('assets.出金')} - - - } - /> - 交易 - + + } + /> + {t('assets.出金')} + + + } + /> + 交易 -
    */} +
    - - -
    + +
    Protect Banner 1 - - +
    + + {/* 實名驗證審核中 */} - -
    + +
    - <div className='text-[#8c8c8c] text-center sm:text-start'>歡迎登入 寶泰!</div> - <div className='text-[16px] sm:text-[40px] mt-3 sm:mt-8'>{t('assets.驗證碼審核中')}</div> + <div className='text-[#8c8c8c] max-sm:text-[12px]'>歡迎登入 寶泰!</div> + <div className=' sm:text-[40px]'>{t('assets.驗證碼審核中')}</div> - -
    -
    - - <div className='text-[16px] sm:text-[20px]'>{t('assets.通過')}</div> - - - - } - /> - {t('assets.入金')} - - - } - /> - {t('assets.出金')} - - - } - /> - 交易 - + + +
    {t('assets.通過')}
    + + } + /> + {t('assets.入金')} + + + } + /> + {t('assets.出金')} + + + } + /> + 交易 + +
    + + +
    {t('assets.未通過')}
    + + + } + /> + 入金(限額 2,000.00美元) -
    - {/* */} - {/*
    - 未通過 - - - } - /> - 入金(限額 2,000.00美元) - - - } - /> - {t('assets.出金')} - - - } - /> - 交易 - + + } + /> + {t('assets.出金')} -
    */} -
    - - - - - + + } + /> + 交易 + +
    - -
    + +
    Protect Banner 2 - - +
    + + + + + + {/* 已通過實名驗證 */} - + -
    + - 歡迎登入 寶泰! + <div className='text-[#8c8c8c] max-sm:text-[12px]'> 歡迎登入 寶泰!</div> - - {t('report.我的總價值')}} - prefix='$' - value={400000} - precision={2} - valueStyle={{ fontSize: '3em', fontWeight: 'bold', color: '#F39D1B' }} - /> - - + +
    {t('report.我的總價值')}
    + + } + /> + {/* 帳戶類型(帳戶數量) */} + +
    +
    setOpenAccountChart(true)}> 27.5%} /> - - -
    + + + +
    setOpenAccountChart(true)}> 50%} /> - - -
    + + + +
    setOpenAccountChart(true)}> 22.5%} /> - - - - - - - - - - - - +
    + + -
    + Protect Banner 3 +
    + + + + + + + +
    + {/* Modal */} setOpenKYCModal(false)} /> - + setIsAddAccountVisible(false)} + /> + setOpenAccountChart(false)} + footer={null} + title='我的帳戶' + > + + ); }; diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 8ebe96c..97d7b04 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -5,7 +5,7 @@ import { Outlet } from 'react-router-dom'; import AuthImg from '../../assets/authbg.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; import UseFooter from './components/UseFooter'; -import UserChat from '../PublicLayout/UserChat'; +import CsChat from '../PublicLayout/CsChat'; import { useTranslation } from 'react-i18next'; import { useThemeStore, useI18nStore } from '@/store'; import PT_logo_2 from '../../assets/PTFintech_final2-02.png'; @@ -107,7 +107,7 @@ const AuthLayout = () => { checked={isDark} onChange={(newValue) => setIsDark(newValue)} /> - + diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index f5d85f5..a9a89ee 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -1,12 +1,57 @@ +import InvestmentMarket from '@/components/InvestmentMarket/InvestmentMarket'; import LoopBanner from '@/components/LoopBanner'; import ProtectBanner from '@/components/ProtectBanner'; +import { SmileOutlined } from '@ant-design/icons'; +import { ProCard } from '@ant-design/pro-components'; +import { Avatar, Button, Flex, Progress, Space, Typography } from 'antd'; const App: React.FunctionComponent = () => { + const { Title, Text } = Typography; + return ( - <> + - + {/* 客戶等級 */} + + } /> +
    + + 客戶Lv1 + + 升級下一層級:客戶Lv 2 +
    + + } + extra={} + > + console.log(collapse)} + extra={ + + } + > +
    通過實名驗證
    + +
    +
    + +
    ); }; diff --git a/src/pages/HotInvestMents/HotInvestMents.tsx b/src/pages/HotInvestMents/HotInvestMents.tsx index f75b883..5ea5fb2 100644 --- a/src/pages/HotInvestMents/HotInvestMents.tsx +++ b/src/pages/HotInvestMents/HotInvestMents.tsx @@ -7,10 +7,9 @@ import { useTranslation } from 'react-i18next'; const { Title, Text } = Typography; const HotInvestments = () => { - const [isModalVisible, setIsModalVisible] = useState(false); const { t } = useTranslation(); - + const showModal = () => { setIsModalVisible(true); }; @@ -22,66 +21,66 @@ const HotInvestments = () => { const handleOk = () => { setIsModalVisible(false); }; - + const handleCancel = () => { setIsModalVisible(false); }; - + const columns = [ { - id:1, + id: 1, title: '市場', dataIndex: 'market', key: 'market', }, { - id:2, - title: `${t('serve.漲跌幅')}` , + id: 2, + title: `${t('serve.漲跌幅')}`, dataIndex: 'quoteChange', key: 'quoteChange', }, { - id:3, - title: `${t('serve.一天')}`, + id: 3, + title: `${t('serve.一天')}`, dataIndex: 'oneDay', key: 'oneDay', }, { - id:4, - title: `${t('serve.賣出')}`, + id: 4, + title: `${t('serve.賣出')}`, dataIndex: 'sell', key: 'sell', }, { - id:5, - title: `${t('serve.買入')}`, + id: 5, + title: `${t('serve.買入')}`, dataIndex: 'buy', key: 'buy', }, { - id:6, - title: `${t('serve.52周區間')}`, + id: 6, + title: `${t('serve.52周區間')}`, dataIndex: 'weeks52', key: 'weeks52', width: 200, }, { - id:7, - title: `${t('serve.情緒')}`, + id: 7, + title: `${t('serve.情緒')}`, dataIndex: 'mood', key: 'mood', width: 200, }, { - id:8, - title: `${t('serve.交易')}`, + id: 8, + title: `${t('serve.交易')}`, dataIndex: 'trade', key: 'trade', width: 150, }, { - id:9, - title: `${t('serve.關注')}`, + id: 9, + title: `${t('serve.關注')}`, dataIndex: 'focus', key: 'focus', render: () => ( @@ -101,7 +100,7 @@ const HotInvestments = () => { const data = [ { - id:1, + id: 1, market: ( { ), @@ -161,91 +160,93 @@ const HotInvestments = () => { return (
    - {t('nav.熱門投資')} - -
    -
    + {t('nav.熱門投資')} + +
    - col-6 - - - -
    + col-6 +
    + +
    - col-6 - - - -
    + col-6 +
    + +
    - col-6 - - - -
    + col-6 +
    + +
    - col-6 - - - +
    + col-6 +
    + + +
    - {t('serve.每日波動')} + {t('serve.每日波動')} { display: 'flex', flexDirection: 'column', alignItems: 'center', - border: '1px solid blue', }} >
    { display: 'flex', flexDirection: 'column', alignItems: 'center', - border: '1px solid blue', }} >
    {
    - -
    -
    - - - - -
    - {t('layout.新會員尚未實名驗證')} - {t('layout.實名驗證審核中')} - {t('layout.已通過實名驗證')} -
    - -
    -
    - 未驗證,可限額入金 USD 2000 - 不可 交易、出金 -
    - - - - +
    '預設展示MT4 數據,可切換為MT5或其他'} + /> + {/* Modal */} void; +} + +const CsChat: React.FunctionComponent = ({ open, onCancel }) => { + return ( + +
    + {/* ( + + } /> : null + } + title={message.type === 'customerService' ? '客服' : '我'} + description={message.content} + style={{ textAlign: message.type === 'customerService' ? 'left' : 'right' }} + /> + + )} + /> */} + +
    + + + + + + +
    +
    +
    + ); +}; + +export default CsChat; diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 0077f9a..1900b5c 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -1,20 +1,20 @@ import React, { useCallback, useEffect, useState } from 'react'; import { Link, Outlet } from 'react-router-dom'; import { ProLayout, PageContainer } from '@ant-design/pro-components'; -import { HiChat } from 'react-icons/hi'; -import { CiAlignRight } from 'react-icons/ci'; -import { MdOutlineCurrencyExchange } from 'react-icons/md'; -import { Switch, Avatar, Badge, Button, Col, Divider, Dropdown, List, Popover, Row, Space, Modal } from 'antd'; +import { Badge, Col, Divider, Dropdown, List, Popover, Row, Space, Modal, FloatButton, Flex, Tooltip } from 'antd'; import { ApartmentOutlined, + AppstoreAddOutlined, BellFilled, + BgColorsOutlined, + CommentOutlined, DollarOutlined, DownOutlined, FileSearchOutlined, GlobalOutlined, LogoutOutlined, NotificationOutlined, - PlusOutlined, + PieChartOutlined, ProductFilled, SlidersOutlined, TeamOutlined, @@ -22,21 +22,23 @@ import { } from '@ant-design/icons'; import AccountChart from '@/components/AccountChart'; import { useI18nStore, useThemeStore } from '@/store'; -import UserChat from './UserChat'; -import PT_logo from '../../assets/PTFintech_logo.png'; +import CsChat from './CsChat'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; import PT_logo_2 from '../../assets/PTFintech_final2-02.png'; +import PT_logo_sm from '../../assets/PTFintech_logo.png'; import AD_USDTpay from '../../assets/AD_USDTpay.png'; import AddAccount from '../../components/AddAccount'; -import TradingPlatform from '../../components/TradingPlatform'; -import UseFooter from '../AuthLayout/components/UseFooter'; import { useTranslation } from 'react-i18next'; import './styles.module.scss'; +import MediaQuery from 'react-responsive'; interface IPublicLayoutProps {} const FooterRender = () => ( -
    + ( © 2024 Produced
    by Po Tai -
    + ); const PublicLayout: React.FunctionComponent = () => { const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); const [collapsed, setCollapsed] = useState(false); const [menuOpen, setMenuOpen] = useState(false); - const [UseAccountChart, setUseAccountChart] = useState(''); + const [OpenAccountChart, setOpenAccountChart] = useState(false); const { isDark, setIsDark } = useThemeStore(); const { t, i18n } = useTranslation(); const { language, setLanguage } = useI18nStore(); + const [OpenCsChat, setOpenCsChat] = useState(false); + const oldChangeLanguage = useCallback( (language: any) => { i18n.changeLanguage(language); @@ -90,33 +94,45 @@ const PublicLayout: React.FunctionComponent = () => { }, [menuOpen]); const HeaderTitle = () => ( -
    - - {isDark === true && ( - PT_logo_ - )} - {isDark === false && ( +
    + + + + {isDark === true && ( + PT_logo_ + )} + {isDark === false && ( + PT_logo_ + )} + + {/* */} + + + + PT_logo_ - )} - - + +
    ); - + // i18n? const changeLanguage = (lng: any) => { setLanguage(lng); console.log(language); i18n.changeLanguage(lng); }; - const resourcesData = i18n.options.resources; const items: { key: string; value: any; label: JSX.Element }[] = []; for (let key in resourcesData) { @@ -128,13 +144,14 @@ const PublicLayout: React.FunctionComponent = () => { ), }); } + // const route = { routes: [ @@ -247,256 +264,147 @@ const PublicLayout: React.FunctionComponent = () => { dataSource={data} renderItem={(items) => ( - {items.title}} /> + )} /> ); - const watchAccountChart = () => { - setUseAccountChart('UseAccountChart'); - }; - return ( <> - setUseAccountChart('')} - footer={null} - > -
    - setUseAccountChart('')} /> -
    -
    -
    -
    - } - /> -
    -
    - - - - ), - }, - { - key: '2', - label: ( - } - /> - ), - }, - ], - }} - > - - -
    -
    - - - - -
    + + PT_logo_ + } + collapsed={collapsed} + onCollapse={handleCollapse} + menuFooterRender={FooterRender} + route={route} + // 右上 avatarProps={{ render: () => ( -
    -
    - - -
    總價值
    -
    $ 0.00
    - -
    -
    + + + +
    總價值
    +
    -
    總價值
    -
    $ 0.00
    - -
    - ), + key: '入金', + label: 入金, }, { - key: '通知', - label: ( - -
    - - 通知 -
    -
    - ), + key: '出金', + label: 出金, }, { - key: '語言', - label: ( - -
    - - 語言 -
    -
    - ), + key: '轉帳', + label: 轉帳, }, { - key: '顯示', + key: '進行中', label: ( -
    - setIsDark(newValue)} - key='switch' - /> - 顯示 -
    + + 進行中 + ), }, ], }} - placement='topRight' - overlayClassName='bg-transparent' + trigger={['click']} > - +
    $ 400,000.00
    -
    + + + + + + + , - label: 用戶資訊, - }, - { - key: '登出', - icon: , - label: '登出', - }, - ], - }} + menu={{ items }} + trigger={['click']} > - -
    歡迎登入!用戶名稱
    - -
    +
    - + + + , + label: 用戶資訊, + }, + { + key: '登出', + icon: , + label: '登出', + }, + ], + }} + > + +
    歡迎登入!用戶名稱
    + +
    +
    +
    + + , + label: 用戶資訊, + }, + { + key: '登出', + icon: , + label: '登出', + }, + ], + }} + > + + + + + + ), }} - collapsed={collapsed} - onCollapse={handleCollapse} - menuFooterRender={FooterRender} - route={route} > = () => {
    -
    - -
    - -
    - + +
    + +
    +
    + {/* 右下 */} + } + > + setIsDark()} + icon={} + tooltip='切換主題色' + /> + setOpenCsChat(true)} + icon={} + tooltip='線上客服' + /> + setOpenAccountChart(true)} + icon={} + tooltip='我的帳戶' + /> + + {/* Modal */} setIsAddAccountVisible(false)} /> + setOpenAccountChart(false)} + footer={null} + title='我的帳戶' + > + + + setOpenCsChat(false)} + /> ); }; diff --git a/src/pages/PublicLayout/UserChat.tsx b/src/pages/PublicLayout/UserChat.tsx deleted file mode 100644 index e75dd63..0000000 --- a/src/pages/PublicLayout/UserChat.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import React, { useState, useEffect } from 'react'; -import { Modal, Button, Input, List, Avatar, Upload } from 'antd'; -import { UploadOutlined, SendOutlined } from '@ant-design/icons'; -import { useTranslation } from 'react-i18next'; // 导入 useTranslation 钩子 - -interface UserChatProps { - buttonStyle?: object; - buttonText?: any; // 新增 buttonText 属性 -} - -const UserChat: React.FC = ({ buttonStyle, buttonText }) => { - - const [visible, setVisible] = useState(false); - const [messages, setMessages] = useState([{ type: 'customerService', content: '您好,有什么可以帮到您的吗?' }]); - const [inputMessage, setInputMessage] = useState(''); - const { t, i18n } = useTranslation(); - - useEffect(() => { - const newButtonText = t('layout.聯絡客服'); - setButtonText(newButtonText); - }, [i18n.language]); - - - const [defaultButtonText, setButtonText] = useState(buttonText || t('layout.聯絡客服')); - - const showModal = () => { - setVisible(true); - }; - - const handleOk = () => { - if (inputMessage.trim() === '') return; - const newMessage = { type: 'user', content: inputMessage.trim() }; - setMessages([...messages, newMessage]); - setInputMessage(''); - }; - - const handleCancel = () => { - setVisible(false); - }; - - const handleChange = (e: React.ChangeEvent) => { - setInputMessage(e.target.value); - }; - - return ( -
    - - -
    - ( - - } /> : null - } - title={message.type === 'customerService' ? '客服' : '我'} - description={message.content} - style={{ textAlign: message.type === 'customerService' ? 'left' : 'right' }} - /> - - )} - /> - -
    - - - - - - -
    -
    -
    -
    - ); -}; - -export default UserChat; diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index 1046d95..031bb86 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -58,6 +58,7 @@ const Account = () => {
    diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index 68cba3e..bdc6027 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -1,17 +1,18 @@ -import { Button, Form, Input, Radio, Space } from 'antd'; +import { Button, Form, Input, Space } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import DepositUsdtTrc20 from './components/DepositUsdtTrc20'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; +import PayChannel from './components/PayChannel'; interface IDepositProps {} const Deposit: React.FunctionComponent = (props) => { const { t } = useTranslation(); - + const {} = props || {}; - const [OpenDepostUsdtTrc20, setOpenDepostUsdtTrc20] = useState(false); + const [OpenDepositUsdtTrc20, setOpenDepositUsdtTrc20] = useState(false); const [form] = Form.useForm(); const onReset = () => { @@ -22,15 +23,15 @@ const Deposit: React.FunctionComponent = (props) => {
    - - USDT-TRC20 - + + = (props) => { = (props) => { ), }, ]} - extra='≒1.00 USDT' > = (props) => { block type='primary' htmlType='submit' - onClick={() => setOpenDepostUsdtTrc20(true)} + onClick={() => setOpenDepositUsdtTrc20(true)} > {t('assets.提交')} @@ -85,8 +86,8 @@ const Deposit: React.FunctionComponent = (props) => { setOpenDepostUsdtTrc20(false)} + open={OpenDepositUsdtTrc20} + onCancel={() => setOpenDepositUsdtTrc20(false)} />
    ); diff --git a/src/pages/property/InProgress.tsx b/src/pages/property/InProgress.tsx index 06185c5..2878aa8 100644 --- a/src/pages/property/InProgress.tsx +++ b/src/pages/property/InProgress.tsx @@ -90,7 +90,7 @@ const InProgress: React.FunctionComponent = () => { return false; })} renderItem={(item) => ( - + diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 5bc5dd5..fc12c55 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -1,8 +1,9 @@ -import { Button, Form, Input, Select, Space, Tooltip, Typography } from 'antd'; +import { Button, Form, Input, Space, Tooltip, Typography } from 'antd'; import * as React from 'react'; import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; import SafetyVerification from './components/SafetyVerification'; import { useTranslation } from 'react-i18next'; +import PayChannel from './components/PayChannel'; interface IWithdrawProps {} @@ -15,7 +16,6 @@ const Withdraw: React.FunctionComponent = (props) => { const [openSafetyVerification, setOpenSafetyVerification] = React.useState(false); const [currentStep, setCurrentStep] = React.useState('login'); const [withdrawal, setWithdrawal] = React.useState('USDT-TRC20'); - const { Option } = Select; const onReset = () => { form.resetFields(); @@ -25,16 +25,7 @@ const Withdraw: React.FunctionComponent = (props) => { setOpenSafetyVerification(true); }; - const selectAfter = ( - - ); + const selectAfter = ; return (
    @@ -51,7 +42,8 @@ const Withdraw: React.FunctionComponent = (props) => { - 使用{t('assets.轉帳')}功能,將其他帳戶的可用資金轉移至寶泰帳戶後進行出金 + 使用{t('assets.轉帳')} + 功能,將其他帳戶的可用資金轉移至寶泰帳戶後進行出金
    } > @@ -72,7 +64,7 @@ const Withdraw: React.FunctionComponent = (props) => { label={t('assets.提取為')} name='提取為' > - + = (props) => { label={t('assets.提取至')} name='提取至' > + {/* 判斷法幣通道 */} = (props) => { } /> + {/* 判斷USDT通道 */} = () => { + // 支付通道 + const payChannel = [ + { + label: 'USDT-TRC20', + currencyIcon: usdt, + value: 'USDT-TRC20_bvac', + channelName: 'BVAC', + }, + { + label: 'CNY', + currencyIcon: cny, + value: 'CNY_k100u', + channelName: 'K100U', + }, + { + label: 'CNY', + currencyIcon: cny, + value: 'CNY_u28', + channelName: 'U28 Exchange', + }, + { + label: 'TWD', + currencyIcon: twd, + value: 'TWD_u28', + channelName: 'U28 Exchange', + }, + ]; + return ( + - - {t('auth.登入')} + - - -
    - { - setRemember(e.target.checked); - }} - > - {t('auth.記住我')} - + {({ handleSubmit }) => ( +
    +
    +
    + +
    + + + +
    + +
    +
    + +
    + + +
    + +
    + { + setRemember(e.target.checked); + }} + > + {t('auth.記住我')} + +
    + +
    + +
    + + )} + +
    + + {t('auth.還沒有帳戶前往')} + {t('auth.註冊')} + + + 忘記密碼 +
    - - - - - - {t('auth.還沒有帳戶前往')} - {t('auth.註冊')} - - + + ); }; diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 0d0cfdf..1e19963 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -1,164 +1,82 @@ import { useState } from 'react'; -import { Button, Card, Checkbox, Form, Input, Select, Typography, notification } from 'antd'; -import { Link, useNavigate } from 'react-router-dom'; -import axios from 'axios'; -import { useTranslation } from 'react-i18next'; -import { useI18nStore } from '@/store'; +import { Button, Card, Form, Input, Select, Typography, message } from 'antd'; +import { Link } from 'react-router-dom'; +import { Formik, Field, Form as FormikForm, ErrorMessage } from 'formik'; +import * as Yup from 'yup'; +import { authServ } from '@/services/authServ'; -const { Title, Text } = Typography; +interface FormValues { + userName: string; + countryCode: string; + userPhone: string; + email: string; + agree: boolean; + password?: string; + confirmPassword?: string; + invitationCode?: string; +} + +const { Title } = Typography; +const { Option } = Select; const RegisterPage = () => { - const [userData, setUserData] = useState({ - userName: '', - userCountryCode: '', - userPhone: '', - userEmail: '', - }); - const [checked, setChecked] = useState(false); - const [verificationCode, setVerificationCode] = useState(''); - const [currentStep, setCurrentStep] = useState('register'); - const [underRegister, setUnderRegister] = useState(false); - const [sendCodeError, setSendCodeError] = useState(''); - const [disabled, setDisabled] = useState(false); - const [countdown, setCountdown] = useState('3:00'); - const [setPasswordError, setSetPasswordError] = useState(''); - const [underSetPassword, setUnderSetPassword] = useState(false); - const { setLanguage } = useI18nStore(); + const [currentStep, setCurrentStep] = useState<'register' | 'setPassword'>('register'); + const [userData, setUserData] = useState(null); - const navigate = useNavigate(); + const countryCodes = [ + { value: 'TW', label: '台灣(+886)', callingCode: '886' }, + { value: 'US', label: '美國 (+1)', callingCode: '1' }, + ]; - // 填寫註冊資料 - const onRegisterFinish = async (values: any) => { - try { - setUnderRegister(true); - const response = await axios.post('/api/register', values); - if (response.status === 200) { - notification.success({ - message: '註冊成功', - description: '請登錄您的帳戶', - }); - sendVerificationCode; - setCurrentStep('verify'); - } - } catch (error: any) { - notification.error({ - message: '註冊失敗', - description: error.response.data.message || '註冊失敗,請稍後再試。', - }); - sendVerificationCode; - setCurrentStep('verify'); - } finally { - setUnderRegister(false); - } - }; + const validationSchemaRegister = Yup.object().shape({ + userName: Yup.string().required('請輸入姓名'), + countryCode: Yup.string().required('請選擇國碼'), + userPhone: Yup.string().required('請輸入號碼'), + email: Yup.string().email('無效的Email').required('請輸入Email'), + agree: Yup.bool().oneOf([true], '您必須同意條款'), + invitationCode: Yup.string(), + }); - // 產生一個 6 位數的隨機數字 - const generateVerificationCode = () => { - const code = Math.floor(100000 + Math.random() * 900000); - return code.toString(); // 將數字轉換為字串格式 - }; + const validationSchemaSetPassword = Yup.object().shape({ + password: Yup.string() + .required('請輸入密碼') + .min(8, '密碼必須至少 8 個字符') + .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") + .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), + confirmPassword: Yup.string() + .nullable() + .oneOf([Yup.ref('password'), null], '兩次輸入的密碼不一致') + .required('請確認密碼'), + }); - // 發送驗證碼 - const sendVerificationCode = async (email: any) => { - try { - const verificationCode = generateVerificationCode(); // 產生驗證碼 - const response = await axios.post('/api/sendVerificationCode', { email, verificationCode }); - notification.success({ - message: '驗證碼已發送', - description: '請檢查您的郵箱,並填寫驗證碼。', - }); - setVerificationCode(verificationCode); // 將產生的驗證碼保存在狀態中,以便後續驗證 - } catch (error: any) { - setSendCodeError(error.response.data.message || '發送驗證碼失敗,請稍後再試。'); - } + const handleNextStep = (values: FormValues) => { + setUserData(values); + setCurrentStep('setPassword'); }; - // 重新發送驗證碼 - const resendVerificationCode = async () => { - setUnderRegister(true); - try { - const newVerificationCode = generateVerificationCode(); // 產生新的驗證碼 - await sendVerificationCode(newVerificationCode); // 寄送包含新驗證碼的郵件 - notification.success({ - message: '新的驗證碼已發送', - description: '請檢查您的郵箱,並填寫新的驗證碼。', - }); - setVerificationCode(newVerificationCode); // 更新狀態中的驗證碼 - } catch (error: any) { - setSendCodeError(error.response.data.message || '重新寄送驗證碼失敗,請稍後再試。'); - } finally { - setUnderRegister(false); - } - }; + const handleSetPassword = async (values: { password: string; confirmPassword: string }) => { + if (!userData) return; - // 輸入驗證碼是否正確 - const onVerifyFinish = async (values: any) => { - setUnderRegister(true); - try { - const response = await axios.post('/api/verifyCode', values); - notification.success({ - message: '驗證成功', - description: '您可以繼續設置密碼。', - }); - setCurrentStep('setPassword'); - } catch (error: any) { - notification.error({ - message: '驗證失敗', - description: error.response.data.message || '驗證失敗,請確認驗證碼是否正確。', - }); - setCurrentStep('setPassword'); - } finally { - setUnderRegister(false); - } - }; + const countryCodeObj = countryCodes.find((code) => code.value === userData.countryCode); - // 設定密碼 - const onSetPasswordFormFinish = async (values: any) => { try { - setUnderSetPassword(true); - const response = await axios.post('/api/setPassword', values); - if (response.status === 200) { - notification.success({ - message: '設定密碼成功', - description: '您已成功註冊帳戶,請登入。', - }); - navigate('/auth/loginPage'); - } - } catch (error: any) { - setSetPasswordError(error.response.data.message || '設定密碼失敗,請稍後再試。'); - } finally { - setUnderSetPassword(false); - } - }; - - const { t, i18n } = useTranslation(); + const data = { + email: userData.email, + password: values.password, + userName: userData.userName, + countryCode: userData.countryCode, + countryCallingCode: countryCodeObj?.callingCode, + phoneNumber: userData.userPhone, + ...(userData.invitationCode && { invitationCode: userData.invitationCode }), + }; - const changeLanguage = (lng: any) => { - setLanguage(lng); - i18n.changeLanguage(lng); - }; - const countryCodes = [ - { value: '+886', label:
    changeLanguage('ch')}>{'台灣(+886)'}
    }, - { value: '+1', label:
    changeLanguage('en')}>{'美國 (+1)'}
    }, - ]; - - const handleClick = () => { - setDisabled(true); - - let secondsLeft = 180; - const timer = setInterval(() => { - const minutes = Math.floor(secondsLeft / 60); - const seconds = secondsLeft % 60; - setCountdown(`${minutes}:${seconds < 10 ? '0' : ''}${seconds}`); - - if (secondsLeft === 0) { - clearInterval(timer); - setDisabled(false); - setCountdown('3:00'); - } else { - secondsLeft -= 1; - } - }, 1000); + const response = await authServ.registerServ(data); + console.log('Email has been sent', response.data); + message.success('Email has been sent. Please confirm email'); + } catch (error) { + message.error(error.response.data.title); + console.error('registration error', error); + } }; return ( @@ -167,208 +85,192 @@ const RegisterPage = () => { {currentStep === 'register' && ( <> 註冊 -
    + initialValues={{ + userName: '', + countryCode: '', + userPhone: '', + email: '', + agree: false, + invitationCode: '', + }} + validationSchema={validationSchemaRegister} + onSubmit={handleNextStep} > - - setUserData({ ...userData, userName: e.target.value })} - /> - -
    - - - - - setUserData({ ...userData, userPhone: e.target.value })} - /> - -
    - - setUserData({ ...userData, userEmail: e.target.value })} - /> - - setChecked(e.target.checked)} - > - 我已閱讀並同意 - 客戶協議書 - 風險披露聲明 - 免責聲明 - 保密協議 - - - - - - - 已有帳戶前往登入 - - - )} - {currentStep === 'verify' && ( - <> - 驗證電子信箱 - - 已發送驗證碼{userData.userEmail} - - {sendCodeError && ( - - {sendCodeError} - - )} -
    - - setVerificationCode(e.target.value)} - /> - - {verificationCode ? ( // 如果驗證碼不為空,顯示送出按鈕 - + {({ values }) => ( + + + + + {({ field }: any) => ( + + )} + + + +
    + +
    + + + {({ field, form }: any) => ( + + )} + + + + + {({ field }: any) => } + + +
    +
    + + + + {({ field }: any) => ( + + )} + + + + + + + {({ field }: any) => ( + + )} + + + + + + + + -
    - ) : ( - // 如果驗證碼為空,顯示寄送驗證碼按鈕 - - - + )} - - - - 嘗試多次仍無法收到驗證碼聯繫客服 - + )} + {currentStep === 'setPassword' && ( <> - 設定密碼 - {setPasswordError && ( - - {setPasswordError} - - )} -
    設定密碼 + + initialValues={{ password: '', confirmPassword: '' }} + validationSchema={validationSchemaSetPassword} + onSubmit={handleSetPassword} > - - - - ({ - validator(_, value) { - if (!value || getFieldValue('password') === value) { - return Promise.resolve(); - } - return Promise.reject(new Error('兩次輸入的密碼不一致')); - }, - }), - ]} - > - - - - - - + {() => ( + + + + + {({ field }: any) => ( + + )} + + + + + + + {({ field }: any) => ( + + )} + + + + + + )} + )}
    diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx new file mode 100644 index 0000000..f38d1ab --- /dev/null +++ b/src/pages/login/components/GetPassword.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { Formik, Form, Field, ErrorMessage } from 'formik'; +import * as Yup from 'yup'; +import LoGo from '@/assets/logo.png'; +import { useLocation } from 'react-router-dom'; + +interface GetPassFormValues { + email: string; +} + +const GetPassword: React.FC = () => { + const initialValues: GetPassFormValues = { + email: '', + }; + + const validationSchema = Yup.object({ + email: Yup.string().email('Email không hợp lệ').required('Email là bắt buộc'), + }); + + const handleSubmit = (values: GetPassFormValues) => { + console.log('Email:', values.email); + }; + + return ( + <> +
    + {/* page logo */} +
    + Logo +
    + {/* Login */} +
    + +
    +
    +
    +

    Đặt lại mật khẩu

    + + {() => ( +
    +
    + + + +
    + + + )} +
    +
    + + ); +}; + +export default GetPassword; diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx new file mode 100644 index 0000000..1b1745c --- /dev/null +++ b/src/pages/login/components/SetPassword.tsx @@ -0,0 +1,124 @@ +import React from 'react'; +import { Formik, Form, Field, ErrorMessage } from 'formik'; +import * as Yup from 'yup'; +import LoGo from '@/assets/logo.png'; +import { useLocation } from 'react-router-dom'; + +interface ResetPasswordValues { + email: string; + newPassword: string; +} + +const ResetPasswordForm: React.FC = () => { + const location = useLocation(); + + // Hàm để lấy token từ query params + const getQueryParams = (queryString: string) => { + const params = new URLSearchParams(queryString); + return { + token: params.get('token') || undefined, + }; + }; + + const queryParams = getQueryParams(location.search); + const { token } = queryParams; + + const initialValues: ResetPasswordValues = { + email: '', + newPassword: '', + }; + + const validationSchema = Yup.object({ + email: Yup.string().email('Email không hợp lệ').required('Email là bắt buộc'), + newPassword: Yup.string() + .required('請輸入密碼') // Thông báo yêu cầu nhập mật khẩu + .min(8, '密碼必須至少 8 個字符') // Thông báo mật khẩu phải ít nhất 8 ký tự + .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") // Thông báo phải có ít nhất 1 ký tự chữ thường + .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), // Thông báo phải có ít nhất 1 ký tự chữ hoa + }); + + const handleSubmit = (values: ResetPasswordValues) => { + console.log('Email:', values.email); + console.log('Mật khẩu mới:', values.newPassword); + console.log('Token:', token); // In ra token + // Xử lý gửi email và mật khẩu mới đến server ở đây + }; + + return ( + <> +
    + {/* page logo */} +
    + Logo +
    + {/* Login */} +
    + +
    +
    +
    +

    Đặt lại mật khẩu

    + + {() => ( +
    +
    + + + +
    +
    + + + +
    + + + )} +
    +
    + + ); +}; + +export default ResetPasswordForm; diff --git a/src/pages/login/components/VeritifyMail.tsx b/src/pages/login/components/VeritifyMail.tsx new file mode 100644 index 0000000..e07f30c --- /dev/null +++ b/src/pages/login/components/VeritifyMail.tsx @@ -0,0 +1,108 @@ +// import { useDispatch } from 'react-redux'; +import React from 'react'; +import { useLocation } from 'react-router-dom'; +import { message, Card } from 'antd'; +import { authServ } from '@/services/authServ'; +import LoGo from '../../../assets/logo.png'; +import { useNavigate } from 'react-router-dom'; + +interface QueryParams { + userId?: string; + token?: string; +} + +const VerifyMail: React.FC = () => { + const nextSteps = useNavigate(); + const location = useLocation(); + // const dispatch = useDispatch(); + + const getQueryParams = (queryString: string): QueryParams => { + const params = new URLSearchParams(queryString); + return { + userId: params.get('userId') || undefined, + token: params.get('token') || undefined, + }; + }; + + const queryParams = getQueryParams(location.search); + const { userId, token } = queryParams; + + const handleConfirmEmail = async () => { + try { + const response = await authServ.confirmEmailServ({ userId, token }); + + // Giả sử API trả về thông tin người dùng + // const userData = response.data.user; + // dispatch(saveUserAfterConfirm(userData)); + + message.success('Email verification successful. Please log in to continue.'); + console.log(response.data); + nextSteps('/auth/loginPage'); + } catch (error) { + message.error(error.response.data.title); + console.error(error); + } + }; + + return ( + //
    + //
    + // + //
    + //
    + //

    check email veritify

    + //
    + //
    + // code check verritify mail + + /*
    +

    Xác nhận Email

    +

    User ID: {userId}

    +

    Token: {token}

    + +
    */ +
    +
    + {/* page logo */} +
    + +
    + {/* Login */} +
    + +
    +
    +
    + +
    +

    + 歡迎您來到我們的電子郵件驗證系統,請點擊下面的按鈕以 + 驗證您的電子郵件. +

    + + {/* check */} +
    +
    +
    +
    + ); +}; + +export default VerifyMail; diff --git a/src/redux/configStore.ts b/src/redux/configStore.ts new file mode 100644 index 0000000..a47f4b8 --- /dev/null +++ b/src/redux/configStore.ts @@ -0,0 +1,12 @@ +import { configureStore } from '@reduxjs/toolkit'; +import adminReducer from './slice/adminSlice'; + +export const store = configureStore({ + reducer: { + admin: adminReducer, // đặt tên rõ ràng cho slice + }, +}); + +// TypeScript types +export type RootState = ReturnType; +export type AppDispatch = typeof store.dispatch; diff --git a/src/redux/slice/adminSlice.ts b/src/redux/slice/adminSlice.ts new file mode 100644 index 0000000..8994ac0 --- /dev/null +++ b/src/redux/slice/adminSlice.ts @@ -0,0 +1,38 @@ +// adminSlice.ts +import { getLocalStore, removeLocalStore, saveLocalStore } from '@/utils/local'; +import { createSlice } from '@reduxjs/toolkit'; + +interface UserState { + user: string | null; +} + +const initialState: UserState = { + user: getLocalStore('user_infor'), +}; + +const adminSlice = createSlice({ + name: 'user', + initialState, + reducers: { + saveInforUser: (state, action) => { + state.user = action.payload; + saveLocalStore(action.payload, 'user_infor'); + }, + logoutUser: (state) => { + state.user = null; + removeLocalStore('user_infor'); + }, + saveUserAfterRegister: (state, action) => { + state.user = action.payload; + saveLocalStore(action.payload, 'user_infor'); + }, + saveUserAfterConfirm: (state, action) => { + state.user = action.payload; + saveLocalStore(action.payload, 'user_infor'); + }, + }, +}); + +export const { saveInforUser, logoutUser, saveUserAfterRegister, saveUserAfterConfirm } = adminSlice.actions; + +export default adminSlice.reducer; diff --git a/src/services/adminServ.ts b/src/services/adminServ.ts new file mode 100644 index 0000000..2f1c5ea --- /dev/null +++ b/src/services/adminServ.ts @@ -0,0 +1,7 @@ +import { https } from './configServ'; + +export const adminServ = { + loginAdServ: (data) => { + return https.post('/v1.0/auth/common/login', data); + }, +}; diff --git a/src/services/authServ.ts b/src/services/authServ.ts new file mode 100644 index 0000000..2cf904f --- /dev/null +++ b/src/services/authServ.ts @@ -0,0 +1,25 @@ +// authServ.ts +import { https } from './configServ'; +// define registration data type +interface RegisterData { + email: string; + password: string; + userName: string; + countryCode: string; + countryCallingCode: number; + phoneNumber: string; +} +// Email authentication data type definition +interface ConfirmEmailData { + userId?: string; + token?: string; +} + +export const authServ = { + registerServ: (data: RegisterData) => { + return https.post('/v1.0/auth/register', data); + }, + confirmEmailServ: (data: ConfirmEmailData) => { + return https.post('/v1.0/auth/confirmEmail', data); + }, +}; diff --git a/src/services/clientServ.ts b/src/services/clientServ.ts new file mode 100644 index 0000000..0160e5c --- /dev/null +++ b/src/services/clientServ.ts @@ -0,0 +1,7 @@ +import { https } from './configServ'; + +export const clientServ = { + loginClntServ: (values: { email: string; password: string }) => { + return https.post('/v1.0/auth/login', values); + }, +}; diff --git a/src/services/configServ.ts b/src/services/configServ.ts new file mode 100644 index 0000000..ba94906 --- /dev/null +++ b/src/services/configServ.ts @@ -0,0 +1,11 @@ +import axios from 'axios'; + +export const https = axios.create({ + // baseURL là đoạn đầu URL sử dụng chung của tất cả các request + baseURL: 'https://demoApi.rushprofit.uk', + // timeout for stop if out time + timeout: 15000, + headers: { + 'Content-Type': 'application/json', + }, +}); diff --git a/src/utils/local.ts b/src/utils/local.ts new file mode 100644 index 0000000..995cbc6 --- /dev/null +++ b/src/utils/local.ts @@ -0,0 +1,13 @@ +export const saveLocalStore = (data, key) => { + const dataJson = JSON.stringify(data); + localStorage.setItem(key, dataJson); +}; + +export const getLocalStore = (key) => { + const data = localStorage.getItem(key); + return data ? JSON.parse(data) : null; +}; + +export const removeLocalStore = (key) => { + localStorage.removeItem(key); +}; diff --git a/yarn.lock b/yarn.lock index 06163ba..1be679c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -927,6 +927,16 @@ rc-resize-observer "^1.3.1" rc-util "^5.38.0" +"@reduxjs/toolkit@^2.2.7": + version "2.2.7" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.7.tgz#199e3d10ccb39267cb5aee92c0262fd9da7fdfb2" + integrity sha512-faI3cZbSdFb8yv9dhDTmGwclW0vk0z5o1cia+kf7gCbaCwHI5e+7tP57mJUv22pNcNbeA62GSrPpfrUfdXcQ6g== + dependencies: + immer "^10.0.3" + redux "^5.0.1" + redux-thunk "^3.1.0" + reselect "^5.1.0" + "@remix-run/router@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.17.1.tgz#bf93997beb81863fde042ebd05013a2618471362" @@ -1127,6 +1137,14 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/hoist-non-react-statics@^3.3.1": + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + "@types/json-schema@^7.0.12": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -1169,6 +1187,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + "@typescript-eslint/eslint-plugin@7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.0.tgz#62cda0d35bbf601683c6e58cf5d04f0275caca4e" @@ -2138,6 +2161,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +deepmerge@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + define-data-property@^1.0.1, define-data-property@^1.1.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -2870,6 +2898,20 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formik@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.6.tgz#4da75ca80f1a827ab35b08fd98d5a76e928c9686" + integrity sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g== + dependencies: + "@types/hoist-non-react-statics" "^3.3.1" + deepmerge "^2.1.1" + hoist-non-react-statics "^3.3.0" + lodash "^4.17.21" + lodash-es "^4.17.21" + react-fast-compare "^2.0.1" + tiny-warning "^1.0.2" + tslib "^2.0.0" + fraction.js@^4.3.7: version "4.3.7" resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" @@ -3072,6 +3114,13 @@ hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: dependencies: function-bind "^1.1.2" +hoist-non-react-statics@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + html-parse-stringify@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" @@ -3108,6 +3157,11 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== +immer@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== + immutable@^4.0.0: version "4.3.6" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" @@ -4039,6 +4093,11 @@ prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +property-expr@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -4456,6 +4515,11 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.2" +react-fast-compare@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + react-fast-marquee@^1.6.4: version "1.6.5" resolved "https://registry.yarnpkg.com/react-fast-marquee/-/react-fast-marquee-1.6.5.tgz#98929ae93eef087a607a71e9d45ab76bba97dc16" @@ -4474,7 +4538,7 @@ react-icons@^5.1.0: resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a" integrity sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw== -react-is@^16.12.0, react-is@^16.13.1: +react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -4498,6 +4562,14 @@ react-native-svg@^15.2.0: css-tree "^1.1.3" warn-once "0.1.1" +react-redux@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-9.1.2.tgz#deba38c64c3403e9abd0c3fbeab69ffd9d8a7e4b" + integrity sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w== + dependencies: + "@types/use-sync-external-store" "^0.0.3" + use-sync-external-store "^1.0.0" + react-responsive@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/react-responsive/-/react-responsive-10.0.0.tgz#657c7a90823cd565f43aa5918bd8eb0cd2c91c91" @@ -4556,6 +4628,16 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +redux-thunk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" + integrity sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw== + +redux@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-5.0.1.tgz#97fa26881ce5746500125585d5642c77b6e9447b" + integrity sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w== + reflect.getprototypeof@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz#3ab04c32a8390b770712b7a8633972702d278859" @@ -4599,6 +4681,11 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +reselect@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -5130,6 +5217,16 @@ throttle-debounce@^5.0.0: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== +tiny-case@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" + integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== + +tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tinycolor2@^1.4.2: version "1.6.0" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" @@ -5147,6 +5244,11 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +toposort@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" + integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== + tough-cookie@^4.0.0: version "4.1.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" @@ -5199,6 +5301,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + typed-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" @@ -5311,7 +5418,7 @@ use-sync-external-store@1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -use-sync-external-store@^1.2.0: +use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== @@ -5495,6 +5602,16 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yup@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.4.0.tgz#898dcd660f9fb97c41f181839d3d65c3ee15a43e" + integrity sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg== + dependencies: + property-expr "^2.0.5" + tiny-case "^1.0.3" + toposort "^2.0.2" + type-fest "^2.19.0" + zustand@^4.5.2: version "4.5.4" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.4.tgz#63abdd81edfb190bc61e0bbae045cc4d52158a05" From 3665492e3397b7940c0a5959359b2f31c54171fa Mon Sep 17 00:00:00 2001 From: benPeng Date: Tue, 24 Sep 2024 17:25:22 +0800 Subject: [PATCH 028/118] show invitation code --- .env.development | 5 + .../StraightSheet/StraightSheet.tsx | 55 ++++ src/components/StraightSheet/index.ts | 4 + src/components/TypographyMaster/Title.tsx | 13 + src/components/TypographyMaster/Txt.tsx | 12 + src/components/TypographyMaster/index.ts | 8 + src/pages/AppRouter.tsx | 14 +- src/pages/PublicLayout/PublicLayout.tsx | 3 - src/pages/user/data.tsx | 143 ++++++++++ src/pages/user/index.tsx | 245 +++++------------- src/redux/slice/adminSlice.ts | 31 ++- src/services/authServ.ts | 3 + src/services/configServ.ts | 16 +- src/utils/local.ts | 8 +- src/vite-env.d.ts | 51 +++- vite.config.ts | 11 +- 16 files changed, 427 insertions(+), 195 deletions(-) create mode 100644 src/components/StraightSheet/StraightSheet.tsx create mode 100644 src/components/StraightSheet/index.ts create mode 100644 src/components/TypographyMaster/Title.tsx create mode 100644 src/components/TypographyMaster/Txt.tsx create mode 100644 src/components/TypographyMaster/index.ts create mode 100644 src/pages/user/data.tsx diff --git a/.env.development b/.env.development index df09d75..2cc0934 100644 --- a/.env.development +++ b/.env.development @@ -1 +1,6 @@ PORT=3001 +VITE_HOST_ROOT=https://demoApi.rushprofit.uk +VITE_HTTP_ROOT=/api # https://demoApi.rushprofit.uk +VITE_AXIOS_ROOT= +VITE_HUBS_URL=/hubs/ +VITE_VERSION=V0.1 \ No newline at end of file diff --git a/src/components/StraightSheet/StraightSheet.tsx b/src/components/StraightSheet/StraightSheet.tsx new file mode 100644 index 0000000..75af706 --- /dev/null +++ b/src/components/StraightSheet/StraightSheet.tsx @@ -0,0 +1,55 @@ +import { HtmlHTMLAttributes } from 'react'; +import { Txt } from '../TypographyMaster'; + +interface IStraightSheetProps extends HtmlHTMLAttributes { + sheet: Record; + rows: Array<{ + dataIndex: keyof IStraightSheetProps['sheet']; + titleRender: (sheet: IStraightSheetProps['sheet']) => React.ReactNode; + contentRender: (sheet: IStraightSheetProps['sheet']) => React.ReactNode; + }>; +} + +const StraightSheet: React.FunctionComponent = (props) => { + const { sheet, rows, ...tableProps } = props || {}; + + return ( +
    + + {Object.entries(sheet).map(([key, value]) => { + const row = rows.find((findRow) => findRow.dataIndex === key); + const { titleRender, contentRender } = row || {}; + const title = (() => { + if (titleRender) return titleRender(sheet); + return ( + + ); + })(); + + const content = (() => { + console.log('On content', { contentRender }); + if (contentRender) contentRender(sheet); + if (typeof value === 'string' || typeof value === 'number') + return ( + + ); + return ; + })(); + + return ( + + {title} + {content} + + ); + })} + +
    + {key}: + + {value} + {value}
    + ); +}; + +export default StraightSheet; diff --git a/src/components/StraightSheet/index.ts b/src/components/StraightSheet/index.ts new file mode 100644 index 0000000..f8fff9c --- /dev/null +++ b/src/components/StraightSheet/index.ts @@ -0,0 +1,4 @@ +import StraightSheet from './StraightSheet'; + +export default StraightSheet; +export * from './StraightSheet'; diff --git a/src/components/TypographyMaster/Title.tsx b/src/components/TypographyMaster/Title.tsx new file mode 100644 index 0000000..71058f6 --- /dev/null +++ b/src/components/TypographyMaster/Title.tsx @@ -0,0 +1,13 @@ +import { Typography } from 'antd'; +import { TitleProps } from 'antd/es/typography/Title'; + +interface ITitleProps extends TitleProps { + tight?: boolean; +} +const Title: React.FunctionComponent = (props) => { + const { tight, style, ...titleProps } = props || {}; + + return ; +}; + +export default Title; diff --git a/src/components/TypographyMaster/Txt.tsx b/src/components/TypographyMaster/Txt.tsx new file mode 100644 index 0000000..faa0f6f --- /dev/null +++ b/src/components/TypographyMaster/Txt.tsx @@ -0,0 +1,12 @@ +import { Typography } from 'antd'; +import { TextProps } from 'antd/es/typography/Text'; + +interface ITxtProps extends TextProps { + wrap?: boolean; +} +const Txt: React.FunctionComponent = (props) => { + const { className, ...textProps } = props || {}; + return ; +}; + +export default Txt; diff --git a/src/components/TypographyMaster/index.ts b/src/components/TypographyMaster/index.ts new file mode 100644 index 0000000..e5a5e15 --- /dev/null +++ b/src/components/TypographyMaster/index.ts @@ -0,0 +1,8 @@ +import Txt from './Txt'; +import Title from './Title'; + +export { Txt, Title }; +export default { + Txt, + Title, +}; diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 5f4f90b..be62911 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -22,10 +22,7 @@ const AppRouter = () => { <> - } - /> + {/* home less */} } @@ -38,6 +35,7 @@ const AppRouter = () => { path='get-password' element={} /> + {/* public */} } @@ -75,6 +73,8 @@ const AppRouter = () => { element={} /> + + {/* auth */} } @@ -88,6 +88,12 @@ const AppRouter = () => { element={} /> + + {/* capture */} + } + /> diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index f24e71c..7ab3688 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -60,12 +60,10 @@ const PublicLayout: React.FunctionComponent = () => { const handleLogout = () => { dispatch(logoutUser()); - console.log('log ok'); // navigate('/auth/loginPage'); // Điều hướng đến trang đăng nhập }; const user = useSelector((state: RootState) => state.admin.user); - console.log(user); const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); const [collapsed, setCollapsed] = useState(false); @@ -146,7 +144,6 @@ const PublicLayout: React.FunctionComponent = () => { // i18n? const changeLanguage = (lng: any) => { setLanguage(lng); - console.log(language); i18n.changeLanguage(lng); }; const resourcesData = i18n.options.resources || {}; diff --git a/src/pages/user/data.tsx b/src/pages/user/data.tsx new file mode 100644 index 0000000..3a9578f --- /dev/null +++ b/src/pages/user/data.tsx @@ -0,0 +1,143 @@ +import { CheckOutlined } from '@ant-design/icons'; +import { Button, CollapseProps, Descriptions, DescriptionsProps, Divider, Flex, Space, Tag } from 'antd'; +import { t } from 'i18next'; + +const genExtra = (setOpenKYCIdentityModal: ReactSet) => ( +
    { + event.stopPropagation(); + }} + > + +
    +); + +const userInfo: DescriptionsProps['items'] = [ + { + key: '手機號碼', + label: '手機號碼', + children: '+86 15375060201', + }, + { + key: '電子信箱', + label: '電子信箱', + children: 'email@qq.com', + }, + { + key: '幣種', + label: '幣種', + children: '美元', + }, + { + key: '地區', + label: '地區', + children: '中國', + }, + { + key: '註冊日期', + label: '註冊日期', + children: '2024-04-23', + }, +]; +const personalInfo_China: DescriptionsProps['items'] = [ + { + key: '姓名', + label: '姓名', + children: '姓名', + }, + { + key: '出生日期', + label: '出生日期', + children: '出生日期', + }, + { + key: '第一證件號碼', + label: '第一證件號碼', + children: '第一證件號碼', + }, + { + key: '第二證件號碼', + label: '第二證件號碼', + children: '第二證件號碼', + }, + { + key: '證件地址', + label: '證件地址', + children: '證件地址', + }, + { + key: '居住地址', + label: '居住地址', + children: '居住地址', + }, +]; +const bankInfo_China: DescriptionsProps['items'] = [ + { + key: '銀行戶名', + label: '銀行戶名', + children: '銀行戶名', + }, + { + key: '銀行帳號', + label: '銀行帳號', + children: '銀行帳號', + }, + { + key: '銀行名稱', + label: '銀行名稱', + children: '銀行名稱', + }, +]; + +const useKycCollapes = (setOpenKYCIdentityModal: ReactSet, setOpenBank: ReactSet) => { + const KYCCollapse: CollapseProps['items'] = [ + { + key: '實名驗證', + label: ( + +
    實名驗證
    + } + > + {t('assets.通過')} + +
    + ), + children: ( + + + + setOpenBank(true)} + danger + size='small' + > + 變更 + + } + items={bankInfo_China} + size='small' + /> + + ), + extra: genExtra(setOpenKYCIdentityModal), + }, + ]; + + return KYCCollapse; +}; + +export { genExtra, userInfo, personalInfo_China, bankInfo_China, useKycCollapes }; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index c6c377c..8903d1d 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,195 +1,92 @@ -import { CheckOutlined, UserOutlined } from '@ant-design/icons'; +import { UserOutlined } from '@ant-design/icons'; import { ProCard } from '@ant-design/pro-components'; -import { DescriptionsProps, Descriptions, Button, Collapse, CollapseProps, Space, Tag, Flex, Divider } from 'antd'; -import * as React from 'react'; +import { Descriptions, Collapse, Space } from 'antd'; import logo from '../../assets/PTFintech_logo.png'; import KYCIdentityModal from './components/KycIdentityModal'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import EditBank from '@/pages/user/components/EditBank'; -import { useTranslation } from 'react-i18next'; +import { useDispatch, useSelector } from 'react-redux'; +import { RootState } from '@/redux/configStore'; +import { useKycCollapes, userInfo } from './data'; +import { authServ } from '@/services/authServ'; +import { saveInfo } from '@/redux/slice/adminSlice'; +import StraightSheet from '@/components/StraightSheet'; +import { Txt } from '@/components/TypographyMaster'; interface IUserProps {} const User: React.FunctionComponent = (props) => { + const dispatch = useDispatch(); + // DOM const {} = props || {}; const [OpenKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); const [OpenBank, setOpenBank] = useState(false); - const { t } = useTranslation(); - // if state=未通過 - const genExtra = () => ( -
    { - event.stopPropagation(); - }} - > - -
    - ); - const userInfo: DescriptionsProps['items'] = [ - { - key: '手機號碼', - label: '手機號碼', - children: '+86 15375060201', - }, - { - key: '電子信箱', - label: '電子信箱', - children: 'email@qq.com', - }, - { - key: '幣種', - label: '幣種', - children: '美元', - }, - { - key: '地區', - label: '地區', - children: '中國', - }, - { - key: '註冊日期', - label: '註冊日期', - children: '2024-04-23', - }, - ]; - const personalInfo_China: DescriptionsProps['items'] = [ - { - key: '姓名', - label: '姓名', - children: '姓名', - }, - { - key: '出生日期', - label: '出生日期', - children: '出生日期', - }, - { - key: '第一證件號碼', - label: '第一證件號碼', - children: '第一證件號碼', - }, - { - key: '第二證件號碼', - label: '第二證件號碼', - children: '第二證件號碼', - }, - { - key: '證件地址', - label: '證件地址', - children: '證件地址', - }, - { - key: '居住地址', - label: '居住地址', - children: '居住地址', - }, - ]; - const bankInfo_China: DescriptionsProps['items'] = [ - { - key: '銀行戶名', - label: '銀行戶名', - children: '銀行戶名', - }, - { - key: '銀行帳號', - label: '銀行帳號', - children: '銀行帳號', - }, - { - key: '銀行名稱', - label: '銀行名稱', - children: '銀行名稱', - }, - ]; - const KYCCollapse: CollapseProps['items'] = [ - { - key: '實名驗證', - label: ( - -
    實名驗證
    - } - > - {t('assets.通過')} - -
    - ), - children: ( - - - - setOpenBank(true)} - danger - size='small' - > - 變更 - - } - items={bankInfo_China} - size='small' - /> - - ), - extra: genExtra(), - }, - ]; + const auth = useSelector((state: RootState) => state.admin.user); + const info = useSelector((state: RootState) => state.admin.info); + // compute + const KYCCollapse = useKycCollapes(setOpenKYCIdentityModal, setOpenBank); + + useEffect(() => { + if (!auth) return; + try { + authServ.userInfo().then((res) => { + const { data: userInfo } = res; + dispatch(saveInfo(userInfo)); + }); + } catch (e) { + console.log('On get user info error'); + } + }, [auth, authServ, dispatch, saveInfo]); + return ( -
    -
    - - -
    用戶名稱
    - - } - headerBordered - bodyStyle={{ position: 'relative' }} - > - - -
    - + + +
    用戶名稱
    + + } + headerBordered + bodyStyle={{ position: 'relative' }} + > + {info?.myInvitationCode}, + }} + rows={[]} /> -
    - setOpenKYCIdentityModal(false)} + + + + + + {/* Dialogue */} + setOpenBank(false)} /> -
    + setOpenKYCIdentityModal(false)} + /> + ); }; diff --git a/src/redux/slice/adminSlice.ts b/src/redux/slice/adminSlice.ts index 8994ac0..1a46d87 100644 --- a/src/redux/slice/adminSlice.ts +++ b/src/redux/slice/adminSlice.ts @@ -3,11 +3,34 @@ import { getLocalStore, removeLocalStore, saveLocalStore } from '@/utils/local'; import { createSlice } from '@reduxjs/toolkit'; interface UserState { - user: string | null; + user: { + token: string; + email: string; + id: string; + roldes: Array; + userName: string; + } | null; + info: { + countryCallingCode: 886; + countryCode: 'TW'; + email: 'user10@example.com'; + id: 'b58f0ac1-a658-42a8-a70b-81333092d023'; + level: 1; + myInvitationCode: 'hwhpdzfn'; + myInviter: 'user9'; + mySales: null; + number: 109; + phoneNumber: '0985708052'; + platformName: 'PT-FinTech'; + platformNumber: 1; + roles: ['client']; + userName: 'user10'; + } | null; } const initialState: UserState = { user: getLocalStore('user_infor'), + info: null, // no init }; const adminSlice = createSlice({ @@ -30,9 +53,13 @@ const adminSlice = createSlice({ state.user = action.payload; saveLocalStore(action.payload, 'user_infor'); }, + saveInfo: (state, action) => { + state.info = action.payload; + saveLocalStore(action.payload, 'infoDetail'); + }, }, }); -export const { saveInforUser, logoutUser, saveUserAfterRegister, saveUserAfterConfirm } = adminSlice.actions; +export const { saveInforUser, logoutUser, saveUserAfterRegister, saveUserAfterConfirm, saveInfo } = adminSlice.actions; export default adminSlice.reducer; diff --git a/src/services/authServ.ts b/src/services/authServ.ts index 2cf904f..9f48ffa 100644 --- a/src/services/authServ.ts +++ b/src/services/authServ.ts @@ -22,4 +22,7 @@ export const authServ = { confirmEmailServ: (data: ConfirmEmailData) => { return https.post('/v1.0/auth/confirmEmail', data); }, + userInfo: () => { + return https.get('/v1.0/client/me'); + }, }; diff --git a/src/services/configServ.ts b/src/services/configServ.ts index ba94906..b852602 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -1,11 +1,23 @@ +import { getLocalStore } from '@/utils/local'; import axios from 'axios'; -export const https = axios.create({ +const https = axios.create({ // baseURL là đoạn đầu URL sử dụng chung của tất cả các request - baseURL: 'https://demoApi.rushprofit.uk', + baseURL: import.meta.env.VITE_HTTP_ROOT, // timeout for stop if out time timeout: 15000, headers: { 'Content-Type': 'application/json', }, }); + +https.interceptors.request.use((config) => { + const auth = getLocalStore<{ token: string }>('user_infor'); + console.log('get Auth'); + if (!auth) return config; + const pureConfig = { ...config }; + pureConfig.headers.Authorization = `Bearer ${auth.token}`; + return pureConfig; +}); + +export { https }; diff --git a/src/utils/local.ts b/src/utils/local.ts index 995cbc6..60ae712 100644 --- a/src/utils/local.ts +++ b/src/utils/local.ts @@ -1,13 +1,15 @@ -export const saveLocalStore = (data, key) => { +type LocalKeys = 'user_infor' | 'infoDetail'; + +export const saveLocalStore = (data: V, key: LocalKeys) => { const dataJson = JSON.stringify(data); localStorage.setItem(key, dataJson); }; -export const getLocalStore = (key) => { +export const getLocalStore = (key: LocalKeys): V | null => { const data = localStorage.getItem(key); return data ? JSON.parse(data) : null; }; -export const removeLocalStore = (key) => { +export const removeLocalStore = (key: LocalKeys) => { localStorage.removeItem(key); }; diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 7c0bff6..9f4277b 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1,13 +1,12 @@ /// - - type UpdateRateSteps = 0.01 | 0.05 | 0.1; interface ImportMetaEnv { - readonly VITE_AXIOS_ROOT: string; - readonly VITE_HUBS_ROOT: string; readonly VITE_HOST_ROOT: string; + readonly VITE_HTTP_ROOT: string; + readonly VITE_AXIOS_ROOT: string; + readonly VITE_HUBS_URL: string; readonly VITE_VERSION: string; } @@ -33,3 +32,47 @@ interface IMikeError { } type RequestError = IMikeError; + +type ValueOf = T[keyof T]; +type NOU = null | undefined; +type DevProps = { + isTest?: boolean; +}; +type ReactSet = React.Dispatch>; +type TabObjOptions = { + [Key in T]: { + closeIcon?: React.ReactNode; + destroyInactiveTabPane?: boolean; + disabled?: boolean; + forceRender?: boolean; + key: Key; + label: React.ReactNode; + icon?: React.ReactNode; + children?: React.ReactNode; + closable?: boolean; + panel?: React.ReactNode; + }; +}; +type PeriodKeys = '24h' | '7d' | '30d' | 'manual'; +type KycFieldTypes = + | 'FullName' + | 'IDNumber' + | 'SecondaryFullName' + | 'SecondaryIDNumber' + | 'DateOfBirth' + | 'IDAddress' + | 'ResidentialAddress' + | 'PhoneNumber' + | 'IDFront' + | 'IDBack' + | 'SecondaryIDFront' + | 'SecondaryIDBack' + | 'SelfieWithID' + | 'AddressProof'; +type KycFeildDetail = { + id: number; + fieldName: FN; + fieldValue: null | string; + isVeried: boolean; + type: 1 | 2; +}; diff --git a/vite.config.ts b/vite.config.ts index 12878c6..97b72ad 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -9,11 +9,16 @@ export default defineConfig({ port: 3061, proxy: { '/api': { - target: 'http://192.168.10.120:5555', + target: 'https://demoApi.rushprofit.uk', changeOrigin: true, rewrite: (path) => path.replace(/^\/api/, ''), - } - } + }, + '/hubs': { + target: 'https://demoApi.rushprofit.uk', + changeOrigin: true, + ws: true, + }, + }, }, resolve: { alias: { From 6b7f46fd4be97d1286cf6a0dee4364853f2ef2cd Mon Sep 17 00:00:00 2001 From: benPeng Date: Tue, 24 Sep 2024 17:34:33 +0800 Subject: [PATCH 029/118] eco set --- ecosystem.config.cjs | 55 ++++++++++++++++---------------------------- vite.config.ts | 2 +- 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/ecosystem.config.cjs b/ecosystem.config.cjs index 9dda22a..d589987 100644 --- a/ecosystem.config.cjs +++ b/ecosystem.config.cjs @@ -1,44 +1,29 @@ -// pm2 start ecosystem.config.cjs +/** Paste the run script + * pm2 start ecosystem.config.cjs --only PtClientDev-3001 --attach + * pm2 start ecosystem.config.cjs --only PtClientProd-3002 --attach + */ + +const path = require('path'); +const vitePath = path.normalize('./node_modules/vite/bin/vite.js'); +// const interpreterPath = path.normalize('/home/dls/.nvm/versions/node/v18.20.2/bin/node'); // -- ubuntu +const interpreterPath = path.normalize('C:\\Program Files\\nodejs\\node.exe'); // -- windows module.exports = { apps: [ { - name: 'Potai-client-DEV', - script: 'node_modules/vite/bin/vite.js', - watch: true, - wait_ready: true, - listen_timeout: 10000, - shutdown_with_message: true, + name: 'PtClientDev-3001', + script: vitePath, + interpreter: interpreterPath, + args: '--host', + }, + { + name: 'PtClientProd-3002', + script: 'serve', env: { - NODE_ENV: 'development', + PM2_SERVE_PATH: './dist/', + PM2_SERVE_PORT: 3002, + PM2_SERVE_SPA: 'true', }, - ignore_watch: [ - 'node_modules', - 'dist', - '.git', - 'public', - 'ecosystem.config.cjs', - '.env.development', - '.env.production', - '.eslintrc.cjs', - '.gitignore', - 'index.html', - 'package.json', - 'postcss.config.js', - 'tailwind.config.js', - 'todos.js', - 'yarn.lock', - ], - max_memory_restart: '300M', - time: true, - log_date_format: 'YYYY-MM-DD HH:MM Z', - error_file: '../pm2_error_log/client.json', - out_file: '../pm2_log/client.json', - merge_logs: true, - log_type: 'json', - min_uptime: 5000, - max_restarts: 3, - restart_delay: 500, }, ], }; diff --git a/vite.config.ts b/vite.config.ts index 97b72ad..d49ad08 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,7 +6,7 @@ import { resolve } from 'node:path'; export default defineConfig({ plugins: [react()], server: { - port: 3061, + port: 3001, proxy: { '/api': { target: 'https://demoApi.rushprofit.uk', From ef28260b896f59f096b0d7fce9fc28c3bc87e868 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 24 Sep 2024 22:51:20 +0700 Subject: [PATCH 030/118] update function 2 --- src/pages/AuthLayout/AuthLayout.tsx | 3 ++ src/pages/login/RegisterPage.tsx | 2 + src/pages/login/components/GetPassword.tsx | 19 +++++--- src/pages/login/components/SetPassword.tsx | 50 +++++++++++++--------- src/pages/user/index.tsx | 34 +++++++++++++++ src/redux/slice/adminSlice.ts | 4 +- src/services/clientServ.ts | 7 +++ src/services/getPassServ.ts | 10 +++++ 8 files changed, 101 insertions(+), 28 deletions(-) create mode 100644 src/services/getPassServ.ts diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 97d7b04..93b1ac0 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -9,6 +9,7 @@ import CsChat from '../PublicLayout/CsChat'; import { useTranslation } from 'react-i18next'; import { useThemeStore, useI18nStore } from '@/store'; import PT_logo_2 from '../../assets/PTFintech_final2-02.png'; +import { SunOutlined, MoonOutlined } from '@ant-design/icons'; const { Header, Footer, Content } = Layout; @@ -106,6 +107,8 @@ const AuthLayout = () => { setIsDark(newValue)} + checkedChildren={} // Hiện biểu tượng mặt trời khi ở chế độ sáng + unCheckedChildren={} // Hiện biểu tượng mặt trăng khi ở chế độ tối /> diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 1e19963..91f419d 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -26,6 +26,8 @@ const RegisterPage = () => { const countryCodes = [ { value: 'TW', label: '台灣(+886)', callingCode: '886' }, { value: 'US', label: '美國 (+1)', callingCode: '1' }, + { value: 'GB', label: '英國 (+44)', callingCode: '44' }, // England + { value: 'CN', label: '中國 (+86)', callingCode: '86' }, // China ]; const validationSchemaRegister = Yup.object().shape({ diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index f38d1ab..c09e0e4 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -2,7 +2,8 @@ import React from 'react'; import { Formik, Form, Field, ErrorMessage } from 'formik'; import * as Yup from 'yup'; import LoGo from '@/assets/logo.png'; -import { useLocation } from 'react-router-dom'; +import { message } from 'antd'; +import { getPassServ } from '@/services/getPassServ'; // Import service interface GetPassFormValues { email: string; @@ -17,14 +18,21 @@ const GetPassword: React.FC = () => { email: Yup.string().email('Email không hợp lệ').required('Email là bắt buộc'), }); - const handleSubmit = (values: GetPassFormValues) => { - console.log('Email:', values.email); + const handleSubmit = async (values: GetPassFormValues) => { + try { + const response = await getPassServ.sendMailCheckPass(values.email); // Sử dụng service + message.success(`${response.data.message}Please check your email`); + console.log('Response:', response.data); + // Hiển thị thông báo thành công hoặc xử lý phản hồi tại đây + } catch (error) { + console.error('Error sending email:', error); + // Xử lý lỗi tại đây, có thể hiển thị thông báo cho người dùng + } }; return ( <>
    - {/* page logo */}
    { className='w-[60%] h-25' />
    - {/* Login */}
    -

    Đặt lại mật khẩu

    +

    Find your email

    { const location = useLocation(); - - // Hàm để lấy token từ query params + const setPassToLogin = useNavigate(); const getQueryParams = (queryString: string) => { const params = new URLSearchParams(queryString); return { - token: params.get('token') || undefined, + token: params.get('token')?.replace(' ', '+') || undefined, }; }; @@ -25,29 +27,36 @@ const ResetPasswordForm: React.FC = () => { const initialValues: ResetPasswordValues = { email: '', - newPassword: '', + password: '', }; const validationSchema = Yup.object({ email: Yup.string().email('Email không hợp lệ').required('Email là bắt buộc'), - newPassword: Yup.string() - .required('請輸入密碼') // Thông báo yêu cầu nhập mật khẩu - .min(8, '密碼必須至少 8 個字符') // Thông báo mật khẩu phải ít nhất 8 ký tự - .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") // Thông báo phải có ít nhất 1 ký tự chữ thường - .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), // Thông báo phải có ít nhất 1 ký tự chữ hoa + password: Yup.string() + .required('請輸入密碼') + .min(8, '密碼必須至少 8 個字符') + .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") + .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), }); - const handleSubmit = (values: ResetPasswordValues) => { - console.log('Email:', values.email); - console.log('Mật khẩu mới:', values.newPassword); - console.log('Token:', token); // In ra token - // Xử lý gửi email và mật khẩu mới đến server ở đây + const handleSubmit = async (values: ResetPasswordValues) => { + try { + const response = await getPassServ.resetPassword(values.email, values.password, token); + message.success('Successful change password'); + console.log('Đặt lại mật khẩu thành công:', response.data); + setPassToLogin('/auth/loginPage'); + // Bạn có thể xử lý thông báo thành công hoặc chuyển hướng đến trang khác + } catch (error) { + message.error('Password change failed'); + console.error('Lỗi khi đặt lại mật khẩu:', error); + console.log(token); + // Xử lý lỗi và hiển thị thông báo cho người dùng + } }; return ( <>
    - {/* page logo */}
    { className='w-[60%] h-25' />
    - {/* Login */}
    @@ -90,19 +98,19 @@ const ResetPasswordForm: React.FC = () => {
    diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index c6c377c..b66bab4 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -7,6 +7,9 @@ import KYCIdentityModal from './components/KycIdentityModal'; import { useState } from 'react'; import EditBank from '@/pages/user/components/EditBank'; import { useTranslation } from 'react-i18next'; +import { useDispatch, useSelector } from 'react-redux'; +import { clientServ } from '@/services/clientServ'; // Đảm bảo đường dẫn đúng +import { RootState } from '@/redux/configStore'; interface IUserProps {} @@ -15,6 +18,22 @@ const User: React.FunctionComponent = (props) => { const [OpenKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); const [OpenBank, setOpenBank] = useState(false); const { t } = useTranslation(); + const [invitationCode, setInvitationCode] = useState(null); + + // Lấy token từ Redux store + const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần + + const fetchInvitationCode = async () => { + try { + const response = await clientServ.getClientInfo(token); // Gọi API + setInvitationCode(response.data.myInvitationCode); // Lưu mã mời vào state + console.log(response.data); + } catch (error) { + console.error('Failed to fetch invitation code:', error); + // Xử lý lỗi nếu cần + } + }; + // if state=未通過 const genExtra = () => (
    = (props) => { label: '居住地址', children: '居住地址', }, + { + key: 'invitationCode', + label: '邀請碼', + children: ( +
    +
    +

    {invitationCode || '未取碼'}

    +
    +
    + +
    +
    + ), + }, ]; + const bankInfo_China: DescriptionsProps['items'] = [ { key: '銀行戶名', diff --git a/src/redux/slice/adminSlice.ts b/src/redux/slice/adminSlice.ts index 8994ac0..cb7c597 100644 --- a/src/redux/slice/adminSlice.ts +++ b/src/redux/slice/adminSlice.ts @@ -3,7 +3,9 @@ import { getLocalStore, removeLocalStore, saveLocalStore } from '@/utils/local'; import { createSlice } from '@reduxjs/toolkit'; interface UserState { - user: string | null; + user: { + token:string; + } | null; } const initialState: UserState = { diff --git a/src/services/clientServ.ts b/src/services/clientServ.ts index 0160e5c..8a0555e 100644 --- a/src/services/clientServ.ts +++ b/src/services/clientServ.ts @@ -4,4 +4,11 @@ export const clientServ = { loginClntServ: (values: { email: string; password: string }) => { return https.post('/v1.0/auth/login', values); }, + getClientInfo: (token: string) => { + return https.get('/v1.0/client/me', { + headers: { + Authorization: `Bearer ${token}`, // Gửi token trong header + }, + }); + }, }; diff --git a/src/services/getPassServ.ts b/src/services/getPassServ.ts new file mode 100644 index 0000000..0c6760a --- /dev/null +++ b/src/services/getPassServ.ts @@ -0,0 +1,10 @@ +import { https } from './configServ'; + +export const getPassServ = { + sendMailCheckPass: (email: string) => { + return https.post('/v1.0/client/send-email/reset-password', { email }); + }, + resetPassword: (email: string, password: string, token: string | undefined) => { + return https.post('/v1.0/client/reset-password', { email, password, token }); + }, +}; From c07712c05bb75f2e4724b9c93fc18a7bc48f5c01 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Wed, 25 Sep 2024 01:01:23 +0700 Subject: [PATCH 031/118] kyc --- .env.development | 1 + .env.production | 1 + src/I18n/ch/components/assets.ts | 9 +- src/I18n/en/en.ts | 4 +- src/I18n/vi/components/assets.ts | 21 +- src/components/ProtectBanner.tsx | 2 +- src/main.tsx | 3 +- src/pages/PublicLayout/PublicLayout.tsx | 5 +- src/pages/login/LoginPage.tsx | 11 +- .../user/components/KycIdentityModal.tsx | 451 +++++++++++------- src/pages/user/index.tsx | 188 ++++---- src/redux/slice/adminSlice.ts | 10 +- src/services/clientServ.ts | 4 +- src/services/configServ.ts | 35 ++ 14 files changed, 467 insertions(+), 278 deletions(-) diff --git a/.env.development b/.env.development index df09d75..9919094 100644 --- a/.env.development +++ b/.env.development @@ -1 +1,2 @@ PORT=3001 +VITE_PUBLIC_API_URL=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/.env.production b/.env.production index e69de29..4ab7591 100644 --- a/.env.production +++ b/.env.production @@ -0,0 +1 @@ +VITE_PUBLIC_API_URL=https://api.rushprofit.uk \ No newline at end of file diff --git a/src/I18n/ch/components/assets.ts b/src/I18n/ch/components/assets.ts index 5f40070..f5f82a3 100644 --- a/src/I18n/ch/components/assets.ts +++ b/src/I18n/ch/components/assets.ts @@ -54,7 +54,12 @@ const assets = { 總覽: '總覽', 優惠活動: '優惠活動', 交易社區: '交易社區', - 熱門投資: '熱門投資' + 熱門投資: '熱門投資', + 未驗證: '未驗證', // KYC status 1 + 驗證中: '驗證中', // KYC status 2 + 通過驗證: '通過驗證', // KYC status 3 + 驳回: '驳回', // KYC status 4 + 需重新上傳: '需重新上傳' // KYC status 5 }; -export default assets; \ No newline at end of file +export default assets; diff --git a/src/I18n/en/en.ts b/src/I18n/en/en.ts index 874bfed..c94d322 100644 --- a/src/I18n/en/en.ts +++ b/src/I18n/en/en.ts @@ -12,9 +12,9 @@ const en: Translation = { welcome: 'Welcome to my app', auth: auth, layout: layout, - nav:nav, + nav: nav, account: account, - assets:assets, + assets: assets, report: report, serve: serve }; diff --git a/src/I18n/vi/components/assets.ts b/src/I18n/vi/components/assets.ts index ea408b8..443762b 100644 --- a/src/I18n/vi/components/assets.ts +++ b/src/I18n/vi/components/assets.ts @@ -48,13 +48,20 @@ const assets = { 選擇下列平台: 'Chọn mục bên dưới bắt đầu thanh toán', CNY轉帳支付: 'Thanh toán chuyển khoản CNY, nhanh chóng nhận được', 立即下載: 'Tải xuống ngay', - 填寫銀行資料: '填寫銀行資料', - 交易平台: '交易平台', - 其他平台: '其他平台', - 總覽: '總覽', - 優惠活動: '優惠活動', - 交易社區: '交易社區', - 熱門投資: '熱門投資', + 填寫銀行資料: 'Điền thông tin ngân hàng', + 交易平台: 'Nền tảng giao dịch', + 其他平台: 'Nền tảng khác', + 總覽: 'Tổng quan', + 優惠活動: 'Chương trình khuyến mãi', + 交易社區: 'Cộng đồng giao dịch', + 熱門投資: 'Đầu tư phổ biến', + + // KYC Statuses + 未驗證: 'Chưa xác minh', // KYC status 1 + 驗證中: 'Đang xác minh', // KYC status 2 + 通過驗證: 'Đã xác minh', // KYC status 3 + 驳回: 'Bị từ chối', // KYC status 4 + 需重新上傳: 'Cần tải lại' // KYC status 5 }; export default assets; diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index c4e4259..549e0e2 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -12,7 +12,7 @@ import { useTranslation } from 'react-i18next'; import AddAccount from './AddAccount'; import AccountChart from './AccountChart'; -interface IProtectBannerProps {} +interface IProtectBannerProps { } const ProtectBanner: React.FunctionComponent = () => { const { t } = useTranslation(); diff --git a/src/main.tsx b/src/main.tsx index 92999cb..fb8da7a 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -11,7 +11,8 @@ import { useThemeStore } from './store'; import '@/I18n'; import { Provider } from 'react-redux'; import { store } from '@/redux/configStore'; - +import { setupInterceptor } from './services/configServ'; +setupInterceptor(store) const App: React.FunctionComponent = () => { const queryClient = new QueryClient(); const { isDark } = useThemeStore(); diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index f24e71c..2f8bd65 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -36,7 +36,7 @@ import { useDispatch } from 'react-redux'; import { logoutUser } from '@/redux/slice/adminSlice'; import { useNavigate } from 'react-router-dom'; -interface IPublicLayoutProps {} +interface IPublicLayoutProps { } const FooterRender = () => ( = () => { // Điều hướng đến trang đăng nhập }; const user = useSelector((state: RootState) => state.admin.user); - console.log(user); const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); const [collapsed, setCollapsed] = useState(false); @@ -188,7 +187,7 @@ const PublicLayout: React.FunctionComponent = () => { name: (
    setIsAddAccountVisible(true)} - onKeyDown={() => {}} + onKeyDown={() => { }} role='button' tabIndex={0} > diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index a1897ea..4c7b921 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -8,13 +8,13 @@ import { adminServ } from '@/services/adminServ'; import { saveLocalStore } from '@/utils/local'; import { useDispatch } from 'react-redux'; import { saveInforUser } from '@/redux/slice/adminSlice'; -import { clientServ } from '@/services/clientServ'; +import { authAPI } from '@/services/clientServ'; // Import adminServ thay vì axios const { Title, Text } = Typography; -interface ILoginPageProps {} +interface ILoginPageProps { } const LoginPage: React.FunctionComponent = () => { const dispatch = useDispatch(); @@ -46,7 +46,7 @@ const LoginPage: React.FunctionComponent = () => { if (isEmail) { // Gọi API cho client nếu là email - response = await clientServ.loginClntServ({ + response = await authAPI.login({ email: values.userName, password: values.password, }); @@ -60,7 +60,10 @@ const LoginPage: React.FunctionComponent = () => { type: 'success', content: 'Login successfully', }); - saveLocalStore(response.data, 'user_infor'); + saveLocalStore(response.data, 'user'); + if (response.data.token) { + localStorage.setItem('token', response.data.token) + } dispatch(saveInforUser(response.data)); setTimeout(() => { diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index feb9539..9c87533 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -7,7 +7,7 @@ import { ProFormUploadButton, StepsForm, } from '@ant-design/pro-components'; -import { Button, Checkbox, Modal, Typography, message } from 'antd'; +import { Button, Checkbox, Col, Modal, Row, Typography, message } from 'antd'; import { useTranslation } from 'react-i18next'; import * as React from 'react'; import { FaPassport } from 'react-icons/fa'; @@ -15,6 +15,8 @@ import { GiKeyCard } from 'react-icons/gi'; import { RiUserLocationFill } from 'react-icons/ri'; import { useState } from 'react'; import KycIdentityResult from './KycIdentityResult'; +import axios from 'axios'; +import { api } from '@/services/configServ'; interface IKycIdentityModalProps { open: boolean; @@ -23,7 +25,8 @@ interface IKycIdentityModalProps { const KycIdentityModal: React.FunctionComponent = ({ open, onCancel }) => { const { t } = useTranslation(); - const [OpenKycIdentityResult, setOpenKycIdentityResult] = useState(false); + const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); + const waitTime = (time: number = 100) => { return new Promise((resolve) => { setTimeout(() => { @@ -31,227 +34,351 @@ const KycIdentityModal: React.FunctionComponent = ({ ope }, time); }); }; + + const handleApiCall = async (kycData: any) => { + try { + const response = await api.post('/v1.0/kyc/upload-data', { kycData }); + console.log('API Response:', response.data); + message.success('KYC data submitted successfully!'); + return true; // Indicate success + } catch (error) { + console.error('Error submitting KYC data:', error); + message.error('Failed to submit KYC data.'); + return false; // Indicate failure + } + }; + return (
    { console.log(values); - await waitTime(1000); - message.success('完成提交'); + + try { + + const response = await api.post('/v1.0/kyc/review'); + if (response.status === 200) + message.success('完成提交'); + } catch (error) { + message.error(`上传失败,请重试`); + } + + onCancel(); }} formProps={{ validateMessages: { required: '必填', }, }} - stepsFormRender={(dom, submitter) => { - return ( - - - 實名驗證 - - {t('assets.通過實名驗證')} -
    - } - open={open} - footer={submitter} - destroyOnClose - > - {dom} - - ); - }} + stepsFormRender={(dom, submitter) => ( + + + 实名验证 + + + {t('assets.通过实名认证')} + +
    + } + open={open} + footer={submitter} + destroyOnClose + > + {dom} + + )} > { await waitTime(1000); return true; }} > - + } /> - + , }, { - title: '駕照', - value: '駕照', + title: '驾照', + value: 'driverLicense', avatar: , }, { - title: '居留證', - value: '居留證', + title: '居留证', + value: 'residencePermit', avatar: , }, ]} /> + { + // Collect data for the API call + const kycData = { + FullName: values.fullName, + IDNumber: values.primaryIdNumber, + SecondaryFullName: values.secondaryFullName, + SecondaryIDNumber: values.secondaryIdNumber, + DateOfBirth: values.dateOfBirth, + IDAddress: values.idAddress, + ResidentialAddress: values.residentialAddress, + PhoneNumber: values.phoneNumber, + }; + + // Call the API + const apiSuccess = await handleApiCall(kycData); + + // Block user from proceeding if API call fails + if (!apiSuccess) { + return false; // Block from proceeding to Step 3 + } + return true; // Allow to proceed if successful + }} > - 務必確保輸入的資料,與身分證件資訊一致} - > - - - - - + 务必确保输入的资料,与身份证件信息一致}> + + + + + +
    居住地址
    - 同證件地址 + 同证件地址
    } - width='xl' + width="xl" /> + + + + { + // message.success('所有图片已成功上传并保存'); + // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) + // return true; + // }} > - 避免模糊 / 顯示完整文字資訊 /
    - 勿使用經過編輯的圖片 + + 避免模糊 / 显示完整文字信息 /
    + 勿使用经过编辑的图片
    } > - - - + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'IDFront'); + + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width="xl" /> - } - action='/upload.do' - width='xl' - /> - - 有註明居住地址的文件,如: -
    - - 水、電、瓦斯、網路帳單 - -
    - (文件日期需在最近3個月內) -
    - } - action='/upload.do' - width='xl' - /> + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'IDBack'); + + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width="xl" + /> + +
    + + {/* Row for Secondary Document Front and Back Uploaders */} + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'SecondaryIDFront'); + + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width="xl" + /> + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'SecondaryIDBack'); + + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width="xl" + /> + + + + {/* Row for Selfie with Document Uploader */} + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'SelfieWithID'); + + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width="xl" + /> + + + + {/* Row for Proof of Residence Uploader */} + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'AddressProof'); + + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width="xl" + /> + + + - + + - {/* 模擬提交後 */} - - - + + setOpenKycIdentityResult(false)} /> ); }; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index c6c377c..8483dda 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -4,108 +4,117 @@ import { DescriptionsProps, Descriptions, Button, Collapse, CollapseProps, Space import * as React from 'react'; import logo from '../../assets/PTFintech_logo.png'; import KYCIdentityModal from './components/KycIdentityModal'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; import EditBank from '@/pages/user/components/EditBank'; import { useTranslation } from 'react-i18next'; +import axios from 'axios'; +import { api } from '@/services/configServ'; -interface IUserProps {} +interface IUserProps { } const User: React.FunctionComponent = (props) => { - const {} = props || {}; + const { } = props || {}; const [OpenKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); const [OpenBank, setOpenBank] = useState(false); + const [userInfo, setUserInfo] = useState([]); + const [personalInfo_China, setPersonalInfo_China] = useState([]); + const [bankInfo_China, setBankInfo_China] = useState([]); + const [kycStatus, setKycStatus] = useState(1); // Holds KYC status (as a number) const { t } = useTranslation(); - // if state=未通過 + + // Effect to fetch user data + useEffect(() => { + const fetchUserData = async () => { + try { + const response = await api.get('/v1.0/client/me'); + const data = response.data; + console.log(data); + + // Mapping response fields to userInfo state + setUserInfo([ + { key: '用戶名稱', label: '用戶名稱', children: data.userName || '未提供' }, + { key: '電子信箱', label: '電子信箱', children: data.email || '未提供' }, + { key: '手機號碼', label: '手機號碼', children: data.phoneNumber || '未提供' }, + { key: '國家代碼', label: '國家代碼', children: data.countryCode || '未提供' }, + { key: '國家撥號代碼', label: '國家撥號代碼', children: data.countryCallingCode || '未提供' }, + { key: '我的邀請碼', label: '我的邀請碼', children: data.myInvitationCode || '未提供' }, + { key: '平台名稱', label: '平台名稱', children: data.platformName || '未提供' }, + ]); + + // Update KYC status based on the response + } catch (error) { + console.error("Error fetching user data:", error); + } + }; + + fetchUserData(); + }, []); + + // Effect to fetch KYC data + useEffect(() => { + const fetchKYCData = async () => { + try { + const response = await api.get('/v1.0/kyc/my'); + const data = response.data; + console.log(data); + setKycStatus(data.status || 1); + + setPersonalInfo_China([ + { key: '姓名', label: '姓名', children: data.details.find(detail => detail.fieldName === 'FullName')?.fieldValue || '未提供' }, + { key: '出生日期', label: '出生日期', children: data.details.find(detail => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供' }, + { key: '第一證件號碼', label: '第一證件號碼', children: data.details.find(detail => detail.fieldName === 'IDNumber')?.fieldValue || '未提供' }, + { key: '第二證件號碼', label: '第二證件號碼', children: data.details.find(detail => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供' }, + { key: '證件地址', label: '證件地址', children: data.details.find(detail => detail.fieldName === 'IDAddress')?.fieldValue || '未提供' }, + { key: '居住地址', label: '居住地址', children: data.details.find(detail => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供' }, + ]); + + setBankInfo_China([ + { key: '銀行戶名', label: '銀行戶名', children: data.bankName || '未提供' }, + { key: '銀行帳號', label: '銀行帳號', children: data.bankAccount || '未提供' }, + { key: '銀行名稱', label: '銀行名稱', children: data.bank || '未提供' }, + ]); + } catch (error) { + console.error("Error fetching KYC data:", error); + } + }; + + fetchKYCData(); + }, []); + const genExtra = () => (
    { event.stopPropagation(); }} > - + {/* Show the button only for statuses 1 and 5 */} + {(kycStatus === 1 || kycStatus === 5) && ( + + )}
    ); - const userInfo: DescriptionsProps['items'] = [ - { - key: '手機號碼', - label: '手機號碼', - children: '+86 15375060201', - }, - { - key: '電子信箱', - label: '電子信箱', - children: 'email@qq.com', - }, - { - key: '幣種', - label: '幣種', - children: '美元', - }, - { - key: '地區', - label: '地區', - children: '中國', - }, - { - key: '註冊日期', - label: '註冊日期', - children: '2024-04-23', - }, - ]; - const personalInfo_China: DescriptionsProps['items'] = [ - { - key: '姓名', - label: '姓名', - children: '姓名', - }, - { - key: '出生日期', - label: '出生日期', - children: '出生日期', - }, - { - key: '第一證件號碼', - label: '第一證件號碼', - children: '第一證件號碼', - }, - { - key: '第二證件號碼', - label: '第二證件號碼', - children: '第二證件號碼', - }, - { - key: '證件地址', - label: '證件地址', - children: '證件地址', - }, - { - key: '居住地址', - label: '居住地址', - children: '居住地址', - }, - ]; - const bankInfo_China: DescriptionsProps['items'] = [ - { - key: '銀行戶名', - label: '銀行戶名', - children: '銀行戶名', - }, - { - key: '銀行帳號', - label: '銀行帳號', - children: '銀行帳號', - }, - { - key: '銀行名稱', - label: '銀行名稱', - children: '銀行名稱', - }, - ]; + + const getKycStatusColor = (status: number) => { + switch (status) { + case 1: + case 5: + return 'warning'; // Not verified or needs re-upload + case 2: + return 'processing'; // Verifying + case 3: + return 'success'; // Verified + case 4: + return 'error'; // Rejected + default: + return 'default'; + } + }; + const KYCCollapse: CollapseProps['items'] = [ { key: '實名驗證', @@ -113,10 +122,10 @@ const User: React.FunctionComponent = (props) => {
    實名驗證
    } > - {t('assets.通過')} + {t(`assets.${kycStatus === 1 ? '未驗證' : kycStatus === 2 ? '驗證中' : kycStatus === 3 ? '已通過' : kycStatus === 4 ? '已拒絕' : '需要重新上傳'}`)}
    ), @@ -147,6 +156,7 @@ const User: React.FunctionComponent = (props) => { extra: genExtra(), }, ]; + return (
    @@ -161,7 +171,7 @@ const User: React.FunctionComponent = (props) => { bodyStyle={{ position: 'relative' }} > diff --git a/src/redux/slice/adminSlice.ts b/src/redux/slice/adminSlice.ts index 8994ac0..822cfb7 100644 --- a/src/redux/slice/adminSlice.ts +++ b/src/redux/slice/adminSlice.ts @@ -7,7 +7,7 @@ interface UserState { } const initialState: UserState = { - user: getLocalStore('user_infor'), + user: getLocalStore('user'), }; const adminSlice = createSlice({ @@ -16,19 +16,19 @@ const adminSlice = createSlice({ reducers: { saveInforUser: (state, action) => { state.user = action.payload; - saveLocalStore(action.payload, 'user_infor'); + saveLocalStore(action.payload, 'user'); }, logoutUser: (state) => { state.user = null; - removeLocalStore('user_infor'); + removeLocalStore('user'); }, saveUserAfterRegister: (state, action) => { state.user = action.payload; - saveLocalStore(action.payload, 'user_infor'); + saveLocalStore(action.payload, 'user'); }, saveUserAfterConfirm: (state, action) => { state.user = action.payload; - saveLocalStore(action.payload, 'user_infor'); + saveLocalStore(action.payload, 'user'); }, }, }); diff --git a/src/services/clientServ.ts b/src/services/clientServ.ts index 0160e5c..72e8388 100644 --- a/src/services/clientServ.ts +++ b/src/services/clientServ.ts @@ -1,7 +1,7 @@ import { https } from './configServ'; -export const clientServ = { - loginClntServ: (values: { email: string; password: string }) => { +export const authAPI = { + login: (values: { email: string; password: string }) => { return https.post('/v1.0/auth/login', values); }, }; diff --git a/src/services/configServ.ts b/src/services/configServ.ts index ba94906..24e7085 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -1,3 +1,4 @@ +import { Store } from '@reduxjs/toolkit'; import axios from 'axios'; export const https = axios.create({ @@ -9,3 +10,37 @@ export const https = axios.create({ 'Content-Type': 'application/json', }, }); + + +let host = (import.meta.env.VITE_PUBLIC_API_URL); +export const api = axios.create({ + withCredentials: true, + baseURL: host +}); +export const setupInterceptor = (store: Store) => { + api.interceptors.request.use( + (config) => { + + const token = localStorage.getItem('token'); + if (token) { + config.headers['Authorization'] = `Bearer ${token}`; + } + return config; + }, + (error) => { + return Promise.reject(error); + } + ); + api.interceptors.response.use( + (response) => { + return response; + }, + async (error) => { + if (error.response && error.response.status === 401) { + // Example: Logout user if token is invalid or expired + // store.dispatch(logout()); + } + return Promise.reject(error); + } + ); +}; From 5da77031c4358910e7a3592abf498ca988f8f7c9 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Wed, 25 Sep 2024 01:26:57 +0700 Subject: [PATCH 032/118] fix bug --- src/pages/PublicLayout/PublicLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 0ded407..9954f85 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -60,7 +60,7 @@ const PublicLayout: React.FunctionComponent = () => { const handleLogout = () => { dispatch(logoutUser()); - // navigate('/auth/loginPage'); + navigate('/auth/loginPage'); // Điều hướng đến trang đăng nhập }; const user = useSelector((state: RootState) => state.admin.user); @@ -401,7 +401,7 @@ const PublicLayout: React.FunctionComponent = () => { { key: '用戶資訊', icon: , - label: 用戶資訊, + label: 用戶資訊, }, { key: '登出', From 4947a0b1a5f9a1d6509f9f9e6edcb0fd5d3dd635 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Wed, 25 Sep 2024 07:57:27 +0700 Subject: [PATCH 033/118] kyc fix --- src/pages/user/components/KycIdentityModal.tsx | 16 ++++++++-------- src/pages/user/index.tsx | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 9c87533..ba4a445 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -21,9 +21,10 @@ import { api } from '@/services/configServ'; interface IKycIdentityModalProps { open: boolean; onCancel: () => void; + onFinish: () => void; } -const KycIdentityModal: React.FunctionComponent = ({ open, onCancel }) => { +const KycIdentityModal: React.FunctionComponent = ({ open, onCancel, onFinish }) => { const { t } = useTranslation(); const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); @@ -53,17 +54,16 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { console.log(values); - try { - const response = await api.post('/v1.0/kyc/review'); - if (response.status === 200) + if (response.status === 200) { + onFinish(); message.success('完成提交'); - } catch (error) { - message.error(`上传失败,请重试`); + } + } catch (error: any) { + message.error(`上传失败,请重试: ` + error.response.data.title); + return false; } - - onCancel(); }} formProps={{ validateMessages: { diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 4feb296..6390b9e 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -220,6 +220,7 @@ const User: React.FunctionComponent = (props) => { setOpenKYCIdentityModal(false)} + onFinish={() => { setKycStatus(2); setOpenKYCIdentityModal(false) }} /> Date: Wed, 25 Sep 2024 10:41:35 +0700 Subject: [PATCH 034/118] up to date to build --- src/pages/login/RegisterPage.tsx | 2 +- src/pages/login/components/GetPassword.tsx | 11 +++++----- src/pages/login/components/SetPassword.tsx | 23 +++++++++++++-------- src/pages/login/components/VeritifyMail.tsx | 9 ++++++-- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 91f419d..9ef42cb 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -34,7 +34,7 @@ const RegisterPage = () => { userName: Yup.string().required('請輸入姓名'), countryCode: Yup.string().required('請選擇國碼'), userPhone: Yup.string().required('請輸入號碼'), - email: Yup.string().email('無效的Email').required('請輸入Email'), + email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), agree: Yup.bool().oneOf([true], '您必須同意條款'), invitationCode: Yup.string(), }); diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index c09e0e4..2dab5be 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -4,6 +4,7 @@ import * as Yup from 'yup'; import LoGo from '@/assets/logo.png'; import { message } from 'antd'; import { getPassServ } from '@/services/getPassServ'; // Import service +import { Link } from 'react-router-dom'; interface GetPassFormValues { email: string; @@ -15,7 +16,7 @@ const GetPassword: React.FC = () => { }; const validationSchema = Yup.object({ - email: Yup.string().email('Email không hợp lệ').required('Email là bắt buộc'), + email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), }); const handleSubmit = async (values: GetPassFormValues) => { @@ -41,11 +42,11 @@ const GetPassword: React.FC = () => { />
    - + 登入
    -

    Find your email

    +

    查收郵件

    { htmlFor='email' className='block text-sm font-medium text-white' > - Email + 電子郵件 { type='submit' className='bg-gray-800 text-white text-lg font-semibold mt-2 px-6 py-3 rounded shadow-lg hover:bg-gray-700 hover:shadow-xl transform hover:scale-105 transition-transform duration-300 w-full' > - Send Email + 寄送郵件 )} diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx index 870bac7..52095ac 100644 --- a/src/pages/login/components/SetPassword.tsx +++ b/src/pages/login/components/SetPassword.tsx @@ -3,7 +3,7 @@ import { Formik, Form, Field, ErrorMessage } from 'formik'; import { message } from 'antd'; import * as Yup from 'yup'; import LoGo from '@/assets/logo.png'; -import { useLocation } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; import { getPassServ } from '@/services/getPassServ'; import { useNavigate } from 'react-router-dom'; @@ -18,7 +18,7 @@ const ResetPasswordForm: React.FC = () => { const getQueryParams = (queryString: string) => { const params = new URLSearchParams(queryString); return { - token: params.get('token')?.replace(' ', '+') || undefined, + token: params.get('token')?.replace(/ /g, '+') || undefined, }; }; @@ -31,10 +31,10 @@ const ResetPasswordForm: React.FC = () => { }; const validationSchema = Yup.object({ - email: Yup.string().email('Email không hợp lệ').required('Email là bắt buộc'), + email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), password: Yup.string() .required('請輸入密碼') - .min(8, '密碼必須至少 8 個字符') + .min(8, '密碼必須至少八個字符') .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), }); @@ -65,11 +65,16 @@ const ResetPasswordForm: React.FC = () => { />
    - + + 登入 +
    -

    Đặt lại mật khẩu

    +

    更新密碼

    { htmlFor='email' className='block text-sm font-medium text-white' > - Email + 電子郵件 { htmlFor='password' className='block text-sm font-medium text-white' > - Mật khẩu mới + 新密碼 { type='submit' className='bg-gray-800 text-white text-lg font-semibold mt-2 px-6 py-3 rounded shadow-lg hover:bg-gray-700 hover:shadow-xl transform hover:scale-105 transition-transform duration-300 w-full' > - Đặt lại mật khẩu + 重設密碼 )} diff --git a/src/pages/login/components/VeritifyMail.tsx b/src/pages/login/components/VeritifyMail.tsx index e07f30c..6638c46 100644 --- a/src/pages/login/components/VeritifyMail.tsx +++ b/src/pages/login/components/VeritifyMail.tsx @@ -1,6 +1,6 @@ // import { useDispatch } from 'react-redux'; import React from 'react'; -import { useLocation } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; import { message, Card } from 'antd'; import { authServ } from '@/services/authServ'; import LoGo from '../../../assets/logo.png'; @@ -81,7 +81,12 @@ const VerifyMail: React.FC = () => {
    {/* Login */}
    - + + 登入 +
    From f13efca832ef920bff6350cffc58697506d81f10 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 26 Sep 2024 14:15:55 +0700 Subject: [PATCH 035/118] fix da test problem --- package.json | 1 + src/pages/AuthLayout/AuthLayout.tsx | 35 ++-- src/pages/login/RegisterPage.tsx | 6 +- src/pages/login/components/GetPassword.tsx | 5 +- src/pages/login/components/SetPassword.tsx | 12 +- src/pages/login/components/VeritifyMail.tsx | 12 +- .../user/components/KycIdentityModal.tsx | 184 +++++++++++------- yarn.lock | 62 ++++++ 8 files changed, 216 insertions(+), 101 deletions(-) diff --git a/package.json b/package.json index bc8bc69..961d9cb 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@ant-design/charts": "^2.1.0", "@ant-design/icons": "^5.3.6", "@ant-design/pro-components": "^2.7.1", + "@ant-design/pro-form": "^2.30.2", "@ant-design/pro-layout": "^7.19.0", "@faker-js/faker": "^8.4.1", "@microsoft/signalr": "^8.0.0", diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 93b1ac0..24e920c 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -1,17 +1,17 @@ import React, { useEffect } from 'react'; import { Layout, Dropdown, Switch } from 'antd'; import { GlobalOutlined } from '@ant-design/icons'; -import { Outlet } from 'react-router-dom'; +import { Link, Outlet } from 'react-router-dom'; import AuthImg from '../../assets/authbg.png'; import PT_logo_ from '../../assets/PTFintech_final2-02-02.png'; -import UseFooter from './components/UseFooter'; +// import UseFooter from './components/UseFooter'; import CsChat from '../PublicLayout/CsChat'; import { useTranslation } from 'react-i18next'; import { useThemeStore, useI18nStore } from '@/store'; import PT_logo_2 from '../../assets/PTFintech_final2-02.png'; import { SunOutlined, MoonOutlined } from '@ant-design/icons'; -const { Header, Footer, Content } = Layout; +const { Header, Content } = Layout; const headerStyle: React.CSSProperties = { width: '100%', @@ -32,7 +32,7 @@ const footerStyle: React.CSSProperties = { const layoutStyle: React.CSSProperties = { overflow: 'hidden', width: '100%', - height: '1677px', + height: '100vh', maxWidth: '1920px', margin: '0 auto', backgroundImage: `url(${AuthImg})`, @@ -89,18 +89,22 @@ const AuthLayout = () => { >
    {isDark === true && ( - PT_logo_ + + PT_logo_ + )} {isDark === false && ( - PT_logo_ + + PT_logo_ + )}
    @@ -123,9 +127,6 @@ const AuthLayout = () => { -
    - -
    ); }; diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 9ef42cb..2d6e0a7 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -31,7 +31,9 @@ const RegisterPage = () => { ]; const validationSchemaRegister = Yup.object().shape({ - userName: Yup.string().required('請輸入姓名'), + userName: Yup.string() + .required('請輸入姓名') + .matches(/^[A-Za-z0-9]+$/, '名稱只能包含字母和數字'), countryCode: Yup.string().required('請選擇國碼'), userPhone: Yup.string().required('請輸入號碼'), email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), @@ -42,7 +44,7 @@ const RegisterPage = () => { const validationSchemaSetPassword = Yup.object().shape({ password: Yup.string() .required('請輸入密碼') - .min(8, '密碼必須至少 8 個字符') + .min(8, '密碼必須至少八個字符') .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), confirmPassword: Yup.string() diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index 2dab5be..4b6dbd7 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -35,11 +35,12 @@ const GetPassword: React.FC = () => { <>
    - + Logo + />
    登入 diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx index 52095ac..226b0b9 100644 --- a/src/pages/login/components/SetPassword.tsx +++ b/src/pages/login/components/SetPassword.tsx @@ -58,11 +58,13 @@ const ResetPasswordForm: React.FC = () => { <>
    - Logo + + +
    {
    {/* page logo */}
    - + + +
    {/* Login */}
    diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index ba4a445..fab4ac1 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -17,6 +17,8 @@ import { useState } from 'react'; import KycIdentityResult from './KycIdentityResult'; import axios from 'axios'; import { api } from '@/services/configServ'; +import { useDispatch, useSelector } from 'react-redux'; +import { RootState } from '@/redux/configStore'; interface IKycIdentityModalProps { open: boolean; @@ -25,6 +27,8 @@ interface IKycIdentityModalProps { } const KycIdentityModal: React.FunctionComponent = ({ open, onCancel, onFinish }) => { + const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần + const userName = useSelector((state: RootState) => state.admin.user?.userName); const { t } = useTranslation(); const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); @@ -76,12 +80,13 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onCancel={onCancel} title={
    - + 实名验证 - - {t('assets.通过实名认证')} - + {t('assets.通过实名认证')}
    } open={open} @@ -93,26 +98,31 @@ const KycIdentityModal: React.FunctionComponent = ({ ope )} > { await waitTime(1000); + console.log(token); return true; }} > - + } /> - + = ({ ope { // Collect data for the API call const kycData = { FullName: values.fullName, IDNumber: values.primaryIdNumber, SecondaryFullName: values.secondaryFullName, + // use later SecondaryIDNumber: values.secondaryIdNumber, DateOfBirth: values.dateOfBirth, IDAddress: values.idAddress, @@ -160,41 +171,74 @@ const KycIdentityModal: React.FunctionComponent = ({ ope return true; // Allow to proceed if successful }} > - 务必确保输入的资料,与身份证件信息一致}> - - - - - - + 务必确保输入的资料,与身份证件信息一致} + > + + + + {/* use later */} + + + + -
    居住地址
    - 同证件地址 -
    - } - width="xl" + name='phoneNumber' + label='電話號碼' + width='xl' + rules={[{ required: true, message: '此项为必填项,请勿留空' }]} /> - - - { - // message.success('所有图片已成功上传并保存'); - // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) - // return true; - // }} + name='uploadImages' + title='上传图片' + // onFinish={async () => { + // message.success('所有图片已成功上传并保存'); + // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) + // return true; + // }} > + 避免模糊 / 显示完整文字信息 /
    勿使用经过编辑的图片
    @@ -205,9 +249,9 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { @@ -225,15 +269,15 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }, }} - width="xl" + width='xl' /> { @@ -251,7 +295,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }, }} - width="xl" + width='xl' /> @@ -261,9 +305,9 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { @@ -281,15 +325,15 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }, }} - width="xl" + width='xl' /> { @@ -307,7 +351,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }, }} - width="xl" + width='xl' /> @@ -317,9 +361,9 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { @@ -337,7 +381,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }, }} - width="xl" + width='xl' /> @@ -347,9 +391,9 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { @@ -367,18 +411,18 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }, }} - width="xl" + width='xl' /> -
    - - - setOpenKycIdentityResult(false)} /> + setOpenKycIdentityResult(false)} + />
    ); }; diff --git a/yarn.lock b/yarn.lock index 1be679c..b6b3655 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,6 +128,23 @@ rc-util "^5.4.0" swr "^2.0.0" +"@ant-design/pro-field@2.16.2": + version "2.16.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.16.2.tgz#a7420d7db92e0f5a12df71fab4355b2f239f386c" + integrity sha512-Qn31+7kCV2Cj0FBwFjKIiCiqoO7xpZUaER0J4SZS3KsH3EpX1iVCyleAKZ4kaluLPokj7dRX/+YsbefeVZKrtw== + dependencies: + "@ant-design/icons" "^5.0.0" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" + "@babel/runtime" "^7.18.0" + "@chenshuai2144/sketch-color" "^1.0.8" + classnames "^2.3.2" + dayjs "^1.11.10" + lodash-es "^4.17.21" + omit.js "^2.0.2" + rc-util "^5.4.0" + swr "^2.0.0" + "@ant-design/pro-form@2.28.0": version "2.28.0" resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.28.0.tgz#855971e96160b0c2a6a155d76f5914496cad6d35" @@ -147,6 +164,25 @@ rc-resize-observer "^1.1.0" rc-util "^5.0.6" +"@ant-design/pro-form@^2.30.2": + version "2.30.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.30.2.tgz#1ad072b8a02f220dd2342f5bef186e491c768fbb" + integrity sha512-Tn5pT8Pi5kkjr9aotezJdiRkJPgv53nyZK5qx6mwQMnI8zqTXarK22plrVEZXuFoLC1qwuAchmy4ofqAsBLx7w== + dependencies: + "@ant-design/icons" "^5.0.0" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" + "@babel/runtime" "^7.18.0" + "@chenshuai2144/sketch-color" "^1.0.7" + "@umijs/use-params" "^1.0.9" + classnames "^2.3.2" + dayjs "^1.11.10" + lodash-es "^4.17.21" + omit.js "^2.0.2" + rc-resize-observer "^1.1.0" + rc-util "^5.0.6" + "@ant-design/pro-layout@7.19.8", "@ant-design/pro-layout@^7.19.0": version "7.19.8" resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.19.8.tgz#5d070ae2d74a232a657dca6fb207d097b9e8a621" @@ -194,6 +230,17 @@ rc-util "^5.0.1" swr "^2.0.0" +"@ant-design/pro-provider@2.14.9": + version "2.14.9" + resolved "https://registry.yarnpkg.com/@ant-design/pro-provider/-/pro-provider-2.14.9.tgz#ca9c764a4eeda5ceacdd9cca817ce2764644db3a" + integrity sha512-4UJr6AHyWKsrhx2KfdkpRQCgjc75oDUDhMHGA2OWqQVI16sMQfeZf6KYfmeiG3Dal1QKFOtSibCdH5G2CDvWlg== + dependencies: + "@ant-design/cssinjs" "^1.11.1" + "@babel/runtime" "^7.18.0" + "@ctrl/tinycolor" "^3.4.0" + rc-util "^5.0.1" + swr "^2.0.0" + "@ant-design/pro-skeleton@2.1.13": version "2.1.13" resolved "https://registry.yarnpkg.com/@ant-design/pro-skeleton/-/pro-skeleton-2.1.13.tgz#a0411d9f2b773367778ed84edfa6431ac2971cd7" @@ -239,6 +286,21 @@ safe-stable-stringify "^2.4.3" swr "^2.0.0" +"@ant-design/pro-utils@2.15.18": + version "2.15.18" + resolved "https://registry.yarnpkg.com/@ant-design/pro-utils/-/pro-utils-2.15.18.tgz#9bb67927900ddc47dcd354a032483bac243e6c0c" + integrity sha512-t/7i57tIYrQPlo2uIchWsXcvtQfBi72uQF9mLFS4C8f3nEKJFiEMWg2m+7JDgencTkpQmP7qmmfT1/6qXJcOvA== + dependencies: + "@ant-design/icons" "^5.0.0" + "@ant-design/pro-provider" "2.14.9" + "@babel/runtime" "^7.18.0" + classnames "^2.3.2" + dayjs "^1.11.10" + lodash-es "^4.17.21" + rc-util "^5.0.6" + safe-stable-stringify "^2.4.3" + swr "^2.0.0" + "@ant-design/react-slick@~1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ant-design/react-slick/-/react-slick-1.1.2.tgz#f84ce3e4d0dc941f02b16f1d1d6d7a371ffbb4f1" From 1d4288e245c1908c4d4e2a423f8dfdb5bf2d708f Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 26 Sep 2024 18:09:50 +0700 Subject: [PATCH 036/118] update fix da potai test bug --- src/pages/AppRouter.tsx | 9 ++-- src/pages/login/LoginPage.tsx | 2 +- src/pages/login/RegisterPage.tsx | 7 +++ src/pages/login/components/GetPassword.tsx | 48 ++++++++----------- src/pages/login/components/SetPassword.tsx | 12 ++--- .../user/components/KycIdentityModal.tsx | 23 ++++++++- 6 files changed, 60 insertions(+), 41 deletions(-) diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index be62911..7cb7d07 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -31,10 +31,7 @@ const AppRouter = () => { path='reset-password' element={} /> - } - /> + {/* public */} { path='registerPage' element={} /> + } + /> {/* capture */} diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index 4c7b921..8f0e687 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -164,7 +164,7 @@ const LoginPage: React.FunctionComponent = () => { {t('auth.註冊')} - 忘記密碼 + 忘記密碼
    diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index 2d6e0a7..ce43c82 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -266,6 +266,13 @@ const RegisterPage = () => { className='text-start text-xs text-red-500 mt-1' /> + +
    - )} diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx index 226b0b9..52095ac 100644 --- a/src/pages/login/components/SetPassword.tsx +++ b/src/pages/login/components/SetPassword.tsx @@ -58,13 +58,11 @@ const ResetPasswordForm: React.FC = () => { <>
    - - - + Logo
    = ({ ope const { t } = useTranslation(); const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); + // State to hold the form data + // const [formData, setFormData] = useState({ + // fullName: userName || '', + // primaryIdNumber: '', + // secondaryFullName: '', + // secondaryIdNumber: '', + // dateOfBirth: null, + // idAddress: '', + // residentialAddress: '', + // phoneNumber: '', + // }); + + // const handleInputChange = (changedValues: any) => { + // setFormData((prevData) => ({ + // ...prevData, + // ...changedValues, + // })); + // }; + const waitTime = (time: number = 100) => { return new Promise((resolve) => { setTimeout(() => { @@ -48,7 +67,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope return true; // Indicate success } catch (error) { console.error('Error submitting KYC data:', error); - message.error('Failed to submit KYC data.'); + message.error(error.response.data.errors.KycData); return false; // Indicate failure } }; @@ -195,7 +214,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope /> {/* use later */} Date: Fri, 27 Sep 2024 17:07:05 +0700 Subject: [PATCH 037/118] fix to check2 --- src/components/ProtectBanner.tsx | 532 +++++++++++++++------------- src/pages/AppRouter.tsx | 5 +- src/pages/AuthLayout/AuthLayout.tsx | 22 ++ src/pages/login/LoginPage.tsx | 8 +- src/pages/property/Deposit.tsx | 68 +++- src/redux/slice/adminSlice.ts | 41 +-- 6 files changed, 391 insertions(+), 285 deletions(-) diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 549e0e2..327f220 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -1,5 +1,5 @@ import { Avatar, Button, Card, Col, Flex, Modal, Row, Space, Statistic, Typography } from 'antd'; -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { CheckOutlined, CloseOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import { StatisticCard } from '@ant-design/pro-components'; @@ -11,8 +11,9 @@ import DownloadMT4 from './DownloadMT4'; import { useTranslation } from 'react-i18next'; import AddAccount from './AddAccount'; import AccountChart from './AccountChart'; +import { api } from '@/services/configServ'; -interface IProtectBannerProps { } +interface IProtectBannerProps {} const ProtectBanner: React.FunctionComponent = () => { const { t } = useTranslation(); @@ -25,296 +26,222 @@ const ProtectBanner: React.FunctionComponent = () => { window.location.href = '#'; // 將頁面滾動到頂部 }; const [isAddAccountVisible, setIsAddAccountVisible] = useState(false); + const [kycStatus, setKycStatus] = useState(null); + useEffect(() => { + const fetchKYCData = async () => { + try { + const response = await api.get('/v1.0/kyc/my'); + if (response.status === 200) { + // const { status } = response.data; + setKycStatus(response.data.status); + } + // console.log(kycStatus); + } catch (error) { + console.log(error); + } + }; + fetchKYCData(); + }, []); + useEffect(() => { + console.log(kycStatus); + }); return (
    {/* 尚未實名驗證 */} - - -
    - - <div className='text-[#8c8c8c] max-sm:text-[12px]'>歡迎登入 寶泰!</div> - <div className=' sm:text-[40px]'>{t('assets.通過實名驗證')}</div> - - - -
    {t('assets.通過')}
    - - } - /> - {t('assets.入金')} - - - } - /> - {t('assets.出金')} - - - } - /> - 交易 - -
    - - -
    {t('assets.未通過')}
    + {kycStatus === 1 && ( + + +
    + + <div className='text-[#8c8c8c] max-sm:text-[12px]'>歡迎登入 寶泰!</div> + <div className=' sm:text-[40px]'>{t('assets.通過實名驗證')}</div> + + - +
    {t('assets.通過')}
    + } /> - 入金(限額 2,000.00美元) + {t('assets.入金')} - + } + style={{ background: '#7cb305' }} + icon={} /> {t('assets.出金')} - + } + style={{ background: '#7cb305' }} + icon={} /> 交易 - -
    -
    -
    - Protect Banner 1 -
    -
    - -
    - {/* 實名驗證審核中 */} - - -
    - - <div className='text-[#8c8c8c] max-sm:text-[12px]'>歡迎登入 寶泰!</div> - <div className=' sm:text-[40px]'>{t('assets.驗證碼審核中')}</div> - - - -
    {t('assets.通過')}
    - - } - /> - {t('assets.入金')} - - - } - /> - {t('assets.出金')} - - - } - /> - 交易 + + +
    {t('assets.未通過')}
    + + + } + /> + 入金(限額 2,000.00美元) + + + } + /> + {t('assets.出金')} + + + } + /> + 交易 + +
    - +
    + Protect Banner 1 - -
    {t('assets.未通過')}
    +
    + + + + )} + {/* 實名驗證審核中 */} + {kycStatus === 2 && ( + + +
    + + <div className='text-[#8c8c8c] max-sm:text-[12px]'>歡迎登入 寶泰!</div> + <div className=' sm:text-[40px]'>{t('assets.驗證碼審核中')}</div> + + - +
    {t('assets.通過')}
    + } /> - 入金(限額 2,000.00美元) + {t('assets.入金')} - + } + style={{ background: '#7cb305' }} + icon={} /> {t('assets.出金')} - + } + style={{ background: '#7cb305' }} + icon={} /> 交易 + + +
    {t('assets.未通過')}
    + + + } + /> + 入金(限額 2,000.00美元) + + + } + /> + {t('assets.出金')} + + + } + /> + 交易 + + +
    -
    -
    -
    - Protect Banner 2 -
    -
    - - - - - -
    - {/* 已通過實名驗證 */} - - - - - <div className='text-[#8c8c8c] max-sm:text-[12px]'> 歡迎登入 寶泰!</div> - - -
    {t('report.我的總價值')}
    - - } - /> - {/* 帳戶類型(帳戶數量) */} - - -
    setOpenAccountChart(true)}> - 27.5%} - /> -
    - - -
    setOpenAccountChart(true)}> - 50%} - /> -
    - - -
    setOpenAccountChart(true)}> - 22.5%} - /> -
    - -
    - - - Protect Banner 3 - -
    -
    +
    +
    + Protect Banner 2 +
    + - - - + -
    -
    + + )} + {/* 已通過實名驗證 */} + {kycStatus === 3 && ( + + + + + <div className='text-[#8c8c8c] max-sm:text-[12px]'> 歡迎登入 寶泰!</div> + + +
    {t('report.我的總價值')}
    + + } + /> + {/* 帳戶類型(帳戶數量) */} + + +
    setOpenAccountChart(true)}> + 27.5%} + /> +
    + + +
    setOpenAccountChart(true)}> + 50%} + /> +
    + + +
    setOpenAccountChart(true)}> + 22.5%} + /> +
    + +
    + + + Protect Banner 3 + +
    +
    + + + + + + + +
    +
    + )} {/* Modal */} import('./PublicLayout')); const AuthLayout = lazy(() => import('./AuthLayout')); @@ -18,6 +20,7 @@ const MyFocus = lazy(() => import('./HotInvestMents/MyFocus')); const CurrencyDetails = lazy(() => import('./currencydetails/CurrencyDetails')); const AppRouter = () => { + const signedUrChek = useSelector(signedUr); return ( <> @@ -39,7 +42,7 @@ const AppRouter = () => { > } + element={signedUrChek ? : } /> { }; export default AuthLayout; + +{ + /*
    +
    + + + +
    +
    + + 登入 + +
    +
    */ +} diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index 8f0e687..ea2dbeb 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -7,14 +7,14 @@ import * as Yup from 'yup'; import { adminServ } from '@/services/adminServ'; import { saveLocalStore } from '@/utils/local'; import { useDispatch } from 'react-redux'; -import { saveInforUser } from '@/redux/slice/adminSlice'; +import { saveUser } from '@/redux/slice/adminSlice'; import { authAPI } from '@/services/clientServ'; // Import adminServ thay vì axios const { Title, Text } = Typography; -interface ILoginPageProps { } +interface ILoginPageProps {} const LoginPage: React.FunctionComponent = () => { const dispatch = useDispatch(); @@ -62,9 +62,9 @@ const LoginPage: React.FunctionComponent = () => { }); saveLocalStore(response.data, 'user'); if (response.data.token) { - localStorage.setItem('token', response.data.token) + localStorage.setItem('token', response.data.token); } - dispatch(saveInforUser(response.data)); + dispatch(saveUser(response.data)); setTimeout(() => { navigate('/'); diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index bdc6027..16888e6 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -1,10 +1,11 @@ -import { Button, Form, Input, Space } from 'antd'; +import { Button, Form, Input, InputNumber, Space, message } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import DepositUsdtTrc20 from './components/DepositUsdtTrc20'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import PayChannel from './components/PayChannel'; +import { api } from '@/services/configServ'; interface IDepositProps {} @@ -18,6 +19,59 @@ const Deposit: React.FunctionComponent = (props) => { const onReset = () => { form.resetFields(); }; + const checkVerify = async () => { + try { + const response = await api.get('/v1.0/kyc/my'); + + if (response.status === 200) { + console.log(response.data); + const { status } = response.data; + console.log(status); + const checkMoney = form.getFieldValue('我要存入'); // Lấy giá trị số từ InputNumber + + // Kiểm tra điều kiện với status và giá trị deposit + if ([1, 2, 4, 5].includes(status)) { + if (checkMoney > 2000) { + // Ngăn chặn DepositUsdtTrc20 và hiển thị thông báo + setOpenDepositUsdtTrc20(false); + + if (status === 1) { + message.warning('Danh tính của bạn chưa được xác minh. Chỉ có thể 存入 dưới 2.000 USD'); + } else if (status === 2) { + message.warning('Danh tính của bạn đang được xác minh. Chỉ có thể 存入 dưới 2.000 USD'); + } else if (status === 4) { + message.warning('Danh tính của bạn đã xác thực thất bại. Chỉ có thể 存入 dưới 2.000 USD'); + } else if (status === 5) { + message.warning('Danh tính của bạn cần được xác thực lại. Chỉ có thể 存入 dưới 2.000 USD'); + } + + return; // Dừng lại và không thực hiện DepositUsdtTrc20 + } + } + + // Nếu status = 3 thì cho phép DepositUsdtTrc20 hoạt động bình thường + if (status === 3) { + setOpenDepositUsdtTrc20(true); + } + + console.log(response.data); + } else { + console.log(`Unexpected response status: ${response.status}`); + } + } catch (error) { + if (error.response) { + // Server responded with a status other than 2xx + console.log(`Error: ${error.response.status} - ${error.response.data.message}`); + } else if (error.request) { + // Request was made but no response received + console.log('Error: No response received from the server'); + } else { + // Something else caused the error + console.log('Error:', error.message); + } + } + }; + return (
    = (props) => { }, ]} > - @@ -78,7 +135,10 @@ const Deposit: React.FunctionComponent = (props) => { block type='primary' htmlType='submit' - onClick={() => setOpenDepositUsdtTrc20(true)} + // onClick={() => setOpenDepositUsdtTrc20(true)} + onClick={async () => { + await checkVerify(); + }} > {t('assets.提交')} diff --git a/src/redux/slice/adminSlice.ts b/src/redux/slice/adminSlice.ts index d969ded..706e7ed 100644 --- a/src/redux/slice/adminSlice.ts +++ b/src/redux/slice/adminSlice.ts @@ -1,40 +1,35 @@ // adminSlice.ts import { getLocalStore, removeLocalStore, saveLocalStore } from '@/utils/local'; -import { createSlice } from '@reduxjs/toolkit'; +import { createSlice, PayloadAction } from '@reduxjs/toolkit'; interface UserState { user: { - token:string; + token: string; } | null; } +// Khởi tạo state từ localStorage const initialState: UserState = { - user: getLocalStore('user'), + user: getLocalStore('user') || null, // Nếu không có thì trả về null }; const adminSlice = createSlice({ - name: 'user', - initialState, - reducers: { - saveInforUser: (state, action) => { - state.user = action.payload; - saveLocalStore(action.payload, 'user'); + name: 'user', + initialState, + reducers: { + saveUser: (state, action: PayloadAction) => { + state.user = action.payload; + saveLocalStore(action.payload, 'user'); + }, + logoutUser: (state) => { + state.user = null; + removeLocalStore('user'); + }, }, - logoutUser: (state) => { - state.user = null; - removeLocalStore('user'); - }, - saveUserAfterRegister: (state, action) => { - state.user = action.payload; - saveLocalStore(action.payload, 'user'); - }, - saveUserAfterConfirm: (state, action) => { - state.user = action.payload; - saveLocalStore(action.payload, 'user'); - }, - }, }); -export const { saveInforUser, logoutUser, saveUserAfterRegister, saveUserAfterConfirm } = adminSlice.actions; +// Selector để lấy trạng thái đăng nhập +export const signedUr = (state: { user: UserState }) => Boolean(state.admin.user); +export const { saveUser, logoutUser } = adminSlice.actions; export default adminSlice.reducer; From 47eaa8158d69d3cbba868ce6e565fc28eaee3538 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Mon, 30 Sep 2024 18:00:27 +0700 Subject: [PATCH 038/118] update KYC and register form --- .env.development | 5 +- src/pages/login/RegisterPage.tsx | 144 +++++++++------- src/pages/property/Deposit.tsx | 32 ++-- .../user/components/KycIdentityModal.tsx | 159 ++++++++++-------- src/services/authServ.ts | 5 +- 5 files changed, 197 insertions(+), 148 deletions(-) diff --git a/.env.development b/.env.development index 2cc0934..574215f 100644 --- a/.env.development +++ b/.env.development @@ -3,4 +3,7 @@ VITE_HOST_ROOT=https://demoApi.rushprofit.uk VITE_HTTP_ROOT=/api # https://demoApi.rushprofit.uk VITE_AXIOS_ROOT= VITE_HUBS_URL=/hubs/ -VITE_VERSION=V0.1 \ No newline at end of file +VITE_VERSION=V0.1 + + +# VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index ce43c82..de4ab81 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -4,6 +4,7 @@ import { Link } from 'react-router-dom'; import { Formik, Field, Form as FormikForm, ErrorMessage } from 'formik'; import * as Yup from 'yup'; import { authServ } from '@/services/authServ'; +import { useNavigate } from 'react-router-dom'; interface FormValues { userName: string; @@ -22,12 +23,13 @@ const { Option } = Select; const RegisterPage = () => { const [currentStep, setCurrentStep] = useState<'register' | 'setPassword'>('register'); const [userData, setUserData] = useState(null); + const okDaRegis = useNavigate(); const countryCodes = [ { value: 'TW', label: '台灣(+886)', callingCode: '886' }, { value: 'US', label: '美國 (+1)', callingCode: '1' }, - { value: 'GB', label: '英國 (+44)', callingCode: '44' }, // England - { value: 'CN', label: '中國 (+86)', callingCode: '86' }, // China + { value: 'GB', label: '英國 (+44)', callingCode: '44' }, + { value: 'CN', label: '中國 (+86)', callingCode: '86' }, ]; const validationSchemaRegister = Yup.object().shape({ @@ -43,10 +45,12 @@ const RegisterPage = () => { const validationSchemaSetPassword = Yup.object().shape({ password: Yup.string() - .required('請輸入密碼') + .required( + "請輸入密碼。密碼必須至少八個字符。密碼必須包含至少一大寫字母('A'-'Z')。密碼必須包含至少一大寫字母('A'-'Z')", + ) .min(8, '密碼必須至少八個字符') - .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") - .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), + .matches(/[a-z]/, "密碼必須包含至少一大寫字母('A'-'Z')") + .matches(/[A-Z]/, "密碼必須包含至少一大寫字母('A'-'Z')"), confirmPassword: Yup.string() .nullable() .oneOf([Yup.ref('password'), null], '兩次輸入的密碼不一致') @@ -77,9 +81,25 @@ const RegisterPage = () => { const response = await authServ.registerServ(data); console.log('Email has been sent', response.data); message.success('Email has been sent. Please confirm email'); + setTimeout(() => { + okDaRegis('/auth/loginPage'); + }, 1500); } catch (error) { - message.error(error.response.data.title); + if (error.response && error.response.data && error.response.data.errors) { + const errorMessages = error.response.data.errors; + let messageToDisplay = ''; + + for (const [field, messages] of Object.entries(errorMessages)) { + const formattedMessages = messages.join(', '); + messageToDisplay += `${field}: ${formattedMessages}\n`; + } + + message.error(messageToDisplay); + } else { + message.error('Đã xảy ra lỗi. Vui lòng thử lại.'); + } console.error('registration error', error); + setCurrentStep('register'); } }; @@ -91,12 +111,12 @@ const RegisterPage = () => { 註冊 initialValues={{ - userName: '', - countryCode: '', - userPhone: '', - email: '', - agree: false, - invitationCode: '', + userName: userData?.userName || '', + countryCode: userData?.countryCode || '', + userPhone: userData?.userPhone || '', + email: userData?.email || '', + agree: userData?.agree || false, + invitationCode: userData?.invitationCode || '', }} validationSchema={validationSchemaRegister} onSubmit={handleNextStep} @@ -226,61 +246,57 @@ const RegisterPage = () => { {currentStep === 'setPassword' && ( <> - 設定密碼 - - initialValues={{ password: '', confirmPassword: '' }} + 設置密碼 + - {() => ( - - - - - {({ field }: any) => ( - - )} - - - - - - - {({ field }: any) => ( - - )} - - - - - - - )} + + + + + {({ field }: any) => ( + + )} + + + + + + + {({ field }: any) => ( + + )} + + + + + )} diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index 16888e6..fa1e3b0 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -29,24 +29,28 @@ const Deposit: React.FunctionComponent = (props) => { console.log(status); const checkMoney = form.getFieldValue('我要存入'); // Lấy giá trị số từ InputNumber + // Nếu checkMoney <= 2000, thì setOpenDepositUsdtTrc20 là true + if (checkMoney <= 2000) { + setOpenDepositUsdtTrc20(true); + return; // Dừng lại vì đã thực hiện điều kiện này + } + // Kiểm tra điều kiện với status và giá trị deposit if ([1, 2, 4, 5].includes(status)) { - if (checkMoney > 2000) { - // Ngăn chặn DepositUsdtTrc20 và hiển thị thông báo - setOpenDepositUsdtTrc20(false); + // Ngăn chặn DepositUsdtTrc20 và hiển thị thông báo + setOpenDepositUsdtTrc20(false); - if (status === 1) { - message.warning('Danh tính của bạn chưa được xác minh. Chỉ có thể 存入 dưới 2.000 USD'); - } else if (status === 2) { - message.warning('Danh tính của bạn đang được xác minh. Chỉ có thể 存入 dưới 2.000 USD'); - } else if (status === 4) { - message.warning('Danh tính của bạn đã xác thực thất bại. Chỉ có thể 存入 dưới 2.000 USD'); - } else if (status === 5) { - message.warning('Danh tính của bạn cần được xác thực lại. Chỉ có thể 存入 dưới 2.000 USD'); - } - - return; // Dừng lại và không thực hiện DepositUsdtTrc20 + if (status === 1) { + message.warning('您的身份尚未驗證。只能存入少於2,000美元'); + } else if (status === 2) { + message.warning('您的身份正在驗證中。只能存入少於2,000美元'); + } else if (status === 4) { + message.warning('您的身份正在驗證中。只能存入少於2,000美元'); + } else if (status === 5) { + message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); } + + return; // Dừng lại và không thực hiện DepositUsdtTrc20 } // Nếu status = 3 thì cho phép DepositUsdtTrc20 hoạt động bình thường diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index f4bd198..adb3369 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -31,7 +31,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const userName = useSelector((state: RootState) => state.admin.user?.userName); const { t } = useTranslation(); const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); - + const [countryCode, setCountryCode] = useState(null); // State to hold the form data // const [formData, setFormData] = useState({ // fullName: userName || '', @@ -72,6 +72,26 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }; + const handleUrField = async () => { + await waitTime(1000); // Giữ nguyên phần đợi 1 giây + + console.log(token); // Giữ nguyên phần log token + + try { + const response = await api.get('/v1.0/kyc/my'); + + console.log('API response:', response.data); + console.log(response.data.countryCode); + const countryCode = response.data.countryCode; + setCountryCode(countryCode); + + return true; + } catch (error) { + console.error('Error calling API:', error); + return false; // Trả về false nếu có lỗi để không cho phép tiếp tục + } + }; + return (
    = ({ ope { - await waitTime(1000); - console.log(token); - return true; - }} + onFinish={handleUrField} > = ({ ope title='身份信息' onFinish={async (values) => { // Collect data for the API call - const kycData = { + let kycData: any = { FullName: values.fullName, IDNumber: values.primaryIdNumber, - SecondaryFullName: values.secondaryFullName, - // use later - SecondaryIDNumber: values.secondaryIdNumber, DateOfBirth: values.dateOfBirth, IDAddress: values.idAddress, ResidentialAddress: values.residentialAddress, PhoneNumber: values.phoneNumber, + SecondaryFullName: values.secondaryFullName, }; + if (countryCode != 'US') { + kycData['SecondaryIDNumber'] = values.secondaryIdNumber; + } // Call the API const apiSuccess = await handleApiCall(kycData); @@ -213,12 +230,16 @@ const KycIdentityModal: React.FunctionComponent = ({ ope rules={[{ required: true, message: '此项为必填项,请勿留空' }]} /> {/* use later */} - + {countryCode !== 'US' && ( + <> + + + )} = ({ ope {/* Row for Secondary Document Front and Back Uploaders */} - - - { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'SecondaryIDFront'); + {countryCode !== 'US' && ( + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'SecondaryIDFront'); - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); - } - }, - }} - width='xl' - /> - - - { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'SecondaryIDBack'); + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width='xl' + /> + + + { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', 'SecondaryIDBack'); - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); - } - }, - }} - width='xl' - /> - - + try { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name} 上传成功`); + onSuccess(response.data); + } catch (error) { + message.error(`${file.name} 上传失败,请重试`); + onError(error); + } + }, + }} + width='xl' + /> + + + )} {/* Row for Selfie with Document Uploader */} diff --git a/src/services/authServ.ts b/src/services/authServ.ts index 9f48ffa..b3d74c4 100644 --- a/src/services/authServ.ts +++ b/src/services/authServ.ts @@ -1,4 +1,5 @@ // authServ.ts +import { AxiosHeaders } from 'axios'; import { https } from './configServ'; // define registration data type interface RegisterData { @@ -17,7 +18,9 @@ interface ConfirmEmailData { export const authServ = { registerServ: (data: RegisterData) => { - return https.post('/v1.0/auth/register', data); + return https.post('/v1.0/auth/register', data, {headers: { + "X-Client-Domain":"http://localhost:3001" + }}); }, confirmEmailServ: (data: ConfirmEmailData) => { return https.post('/v1.0/auth/confirmEmail', data); From a669e3ce3ddbaa98be378184463da3c393695cd5 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 1 Oct 2024 17:28:30 +0700 Subject: [PATCH 039/118] update countryCode extra update Country function --- .../user/components/KycIdentityModal.tsx | 207 ++++++++++-------- src/pages/user/components/UpdateCountry.tsx | 128 +++++++++++ src/pages/user/index.tsx | 114 +++++++--- 3 files changed, 326 insertions(+), 123 deletions(-) create mode 100644 src/pages/user/components/UpdateCountry.tsx diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index adb3369..5383f04 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -7,11 +7,11 @@ import { ProFormUploadButton, StepsForm, } from '@ant-design/pro-components'; -import { Button, Checkbox, Col, Modal, Row, Typography, message } from 'antd'; +import { Button, Checkbox, Col, Modal, Row, Select, Typography, message } from 'antd'; import { useTranslation } from 'react-i18next'; import * as React from 'react'; import { FaPassport } from 'react-icons/fa'; -import { GiKeyCard } from 'react-icons/gi'; +import { GiKeyCard, GiVikingLonghouse } from 'react-icons/gi'; import { RiUserLocationFill } from 'react-icons/ri'; import { useState } from 'react'; import KycIdentityResult from './KycIdentityResult'; @@ -32,6 +32,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const { t } = useTranslation(); const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); const [countryCode, setCountryCode] = useState(null); + const [countryCalling, setCountryCalling] = useState(null); // State to hold the form data // const [formData, setFormData] = useState({ // fullName: userName || '', @@ -50,7 +51,10 @@ const KycIdentityModal: React.FunctionComponent = ({ ope // ...changedValues, // })); // }; - + React.useEffect(() => { + console.log(countryCalling); + console.log(countryCode); + }, [countryCalling, countryCode]); const waitTime = (time: number = 100) => { return new Promise((resolve) => { setTimeout(() => { @@ -81,9 +85,11 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const response = await api.get('/v1.0/kyc/my'); console.log('API response:', response.data); - console.log(response.data.countryCode); + const countryCode = response.data.countryCode; setCountryCode(countryCode); + const countryCalling = response.data.countryCallingCode; + setCountryCalling(countryCalling); return true; } catch (error) { @@ -139,7 +145,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope = ({ ope - { - // Collect data for the API call - let kycData: any = { - FullName: values.fullName, - IDNumber: values.primaryIdNumber, - DateOfBirth: values.dateOfBirth, - IDAddress: values.idAddress, - ResidentialAddress: values.residentialAddress, - PhoneNumber: values.phoneNumber, - SecondaryFullName: values.secondaryFullName, - }; - if (countryCode != 'US') { - kycData['SecondaryIDNumber'] = values.secondaryIdNumber; - } - - // Call the API - const apiSuccess = await handleApiCall(kycData); - - // Block user from proceeding if API call fails - if (!apiSuccess) { - return false; // Block from proceeding to Step 3 - } - return true; // Allow to proceed if successful - }} - > - 务必确保输入的资料,与身份证件信息一致} - > - - - - {/* use later */} - {countryCode !== 'US' && ( - <> - - - )} - - - - - - - { // message.success('所有图片已成功上传并保存'); // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) @@ -459,6 +377,109 @@ const KycIdentityModal: React.FunctionComponent = ({ ope + + { + // Collect data for the API call + let kycData: any = { + FullName: values.fullName, + IDNumber: values.primaryIdNumber, + DateOfBirth: values.dateOfBirth, + IDAddress: values.idAddress, + ResidentialAddress: values.residentialAddress, + PhoneNumber: values.phoneNumber, + SecondaryFullName: values.secondaryFullName, + }; + if (countryCode != 'US') { + kycData['SecondaryIDNumber'] = values.secondaryIdNumber; + } + + // Call the API + const apiSuccess = await handleApiCall(kycData); + + // Block user from proceeding if API call fails + if (!apiSuccess) { + return false; // Block from proceeding to Step 3 + } + return true; // Allow to proceed if successful + }} + > + 务必确保输入的资料,与身份证件信息一致} + > + + + + {/* use later */} + {countryCode !== 'US' && ( + <> + + + )} + + + + {countryCalling !== null && countryCode !== null && ( + +
    + + {/* Ô nhập số điện thoại */} + +
    +
    + )} +
    +
    void }> = ({ open, onCancel }) => { + const initialValues: UpdateCountryFormValues = { + countryCode: '', + phoneNumber: '', + }; + + return ( + + { + console.log('Submitted values:', values); + try { + const response = await api.post('/v1.0/client/update-country', { + countryCode: values.countryCode, + phoneNumber: values.phoneNumber, + }); + if (response.status === 200) { + console.log(response.data); + message.success('國家代碼更改成功'); + } + + onCancel(); // Close modal after successful submission + } catch (error) { + console.error(error); + } + }} + > + {() => ( + +
    + + + + +
    +
    + + + +
    + + + )} +
    +
    + ); +}; + +export default UpdateCountryForm; + + diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 6390b9e..6f6584e 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -7,16 +7,17 @@ import KYCIdentityModal from './components/KycIdentityModal'; import { useState, useEffect } from 'react'; import EditBank from '@/pages/user/components/EditBank'; import { useTranslation } from 'react-i18next'; -import { useDispatch, useSelector } from 'react-redux'; -import { authAPI } from '@/services/clientServ'; // Đảm bảo đường dẫn đúng +import { useSelector } from 'react-redux'; +// import { authAPI } from '@/services/clientServ'; // Đảm bảo đường dẫn đúng import { RootState } from '@/redux/configStore'; -import axios from 'axios'; import { api } from '@/services/configServ'; +import UpdateCountryForm from './components/UpdateCountry'; -interface IUserProps { } +interface IUserProps {} const User: React.FunctionComponent = (props) => { - const { } = props || {}; + const {} = props || {}; + const [OpenUpdateCountryForm, setOpenUpdateCountryForm] = useState(false); const [OpenKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); const [OpenBank, setOpenBank] = useState(false); const [userInfo, setUserInfo] = useState([]); @@ -24,22 +25,25 @@ const User: React.FunctionComponent = (props) => { const [bankInfo_China, setBankInfo_China] = useState([]); const [kycStatus, setKycStatus] = useState(1); // Holds KYC status (as a number) const { t } = useTranslation(); - const [invitationCode, setInvitationCode] = useState(null); + // const [invitationCode, setInvitationCode] = useState(null); // Lấy token từ Redux store const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần - - const fetchInvitationCode = async () => { - try { - const response = await authAPI.getClientInfo(token!); // Gọi API - setInvitationCode(response.data.myInvitationCode); // Lưu mã mời vào state - console.log(response.data); - } catch (error) { - console.error('Failed to fetch invitation code:', error); - // Xử lý lỗi nếu cần - } + const handleChangeCountry = () => { + console.log('Button clicked: changing country'); + setOpenUpdateCountryForm(true); }; + // const fetchInvitationCode = async () => { + // try { + // const response = await authAPI.getClientInfo(token!); // Gọi API + // setInvitationCode(response.data.myInvitationCode); // Lưu mã mời vào state + // console.log(response.data); + // } catch (error) { + // console.error('Failed to fetch invitation code:', error); + // // Xử lý lỗi nếu cần + // } + // }; // Effect to fetch user data useEffect(() => { @@ -58,18 +62,23 @@ const User: React.FunctionComponent = (props) => { { key: '國家撥號代碼', label: '國家撥號代碼', children: data.countryCallingCode || '未提供' }, { key: '平台名稱', label: '平台名稱', children: data.platformName || '未提供' }, { key: '我的邀請碼', label: '我的邀請碼', children: data.myInvitationCode || '未提供' }, + // { + // key: 'invitationCode', + // label: '', + // children: ( + // + // ), + // } { key: 'invitationCode', label: '', - children: ( - - ), - } + children: , + }, ]); // Update KYC status based on the response } catch (error) { - console.error("Error fetching user data:", error); + console.error('Error fetching user data:', error); } }; @@ -86,12 +95,38 @@ const User: React.FunctionComponent = (props) => { setKycStatus(data.status || 1); setPersonalInfo_China([ - { key: '姓名', label: '姓名', children: data.details.find((detail: any) => detail.fieldName === 'FullName')?.fieldValue || '未提供' }, - { key: '出生日期', label: '出生日期', children: data.details.find((detail: any) => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供' }, - { key: '第一證件號碼', label: '第一證件號碼', children: data.details.find((detail: any) => detail.fieldName === 'IDNumber')?.fieldValue || '未提供' }, - { key: '第二證件號碼', label: '第二證件號碼', children: data.details.find((detail: any) => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供' }, - { key: '證件地址', label: '證件地址', children: data.details.find((detail: any) => detail.fieldName === 'IDAddress')?.fieldValue || '未提供' }, - { key: '居住地址', label: '居住地址', children: data.details.find((detail: any) => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供' }, + { + key: '姓名', + label: '姓名', + children: data.details.find((detail: any) => detail.fieldName === 'FullName')?.fieldValue || '未提供', + }, + { + key: '出生日期', + label: '出生日期', + children: data.details.find((detail: any) => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供', + }, + { + key: '第一證件號碼', + label: '第一證件號碼', + children: data.details.find((detail: any) => detail.fieldName === 'IDNumber')?.fieldValue || '未提供', + }, + { + key: '第二證件號碼', + label: '第二證件號碼', + children: + data.details.find((detail: any) => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供', + }, + { + key: '證件地址', + label: '證件地址', + children: data.details.find((detail: any) => detail.fieldName === 'IDAddress')?.fieldValue || '未提供', + }, + { + key: '居住地址', + label: '居住地址', + children: + data.details.find((detail: any) => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供', + }, ]); setBankInfo_China([ @@ -100,7 +135,7 @@ const User: React.FunctionComponent = (props) => { { key: '銀行名稱', label: '銀行名稱', children: data.bank || '未提供' }, ]); } catch (error) { - console.error("Error fetching KYC data:", error); + console.error('Error fetching KYC data:', error); } }; @@ -151,7 +186,19 @@ const User: React.FunctionComponent = (props) => { color={getKycStatusColor(kycStatus)} icon={} > - {t(`assets.${kycStatus === 1 ? '未驗證' : kycStatus === 2 ? '驗證中' : kycStatus === 3 ? '已通過' : kycStatus === 4 ? '已拒絕' : '需要重新上傳'}`)} + {t( + `assets.${ + kycStatus === 1 + ? '未驗證' + : kycStatus === 2 + ? '驗證中' + : kycStatus === 3 + ? '已通過' + : kycStatus === 4 + ? '已拒絕' + : '需要重新上傳' + }`, + )} ), @@ -220,12 +267,19 @@ const User: React.FunctionComponent = (props) => { setOpenKYCIdentityModal(false)} - onFinish={() => { setKycStatus(2); setOpenKYCIdentityModal(false) }} + onFinish={() => { + setKycStatus(2); + setOpenKYCIdentityModal(false); + }} /> setOpenBank(false)} /> + setOpenUpdateCountryForm(false)} + />
    ); }; From 4adcf693ad5047418bd8c4433dca3ab97048d73f Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Wed, 2 Oct 2024 05:05:29 +0700 Subject: [PATCH 040/118] Fix navigating useSWR.get() is undefined bug --- src/pages/AppRouter.tsx | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 96e9b89..61bfcfc 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -6,18 +6,30 @@ import GetPassword from './login/components/GetPassword'; import { useSelector } from 'react-redux'; import { signedUr } from '@/redux/slice/adminSlice'; -const PublicLayout = lazy(() => import('./PublicLayout')); -const AuthLayout = lazy(() => import('./AuthLayout')); -const Home = lazy(() => import('./Home')); -const Account = lazy(() => import('./account/index')); -const Property = lazy(() => import('./property/index')); -const User = lazy(() => import('./user/index')); -const History = lazy(() => import('./history/index')); -const LoginPage = lazy(() => import('./login/LoginPage')); -const RegisterPage = lazy(() => import('./login/RegisterPage')); -const InvestmentMarket = lazy(() => import('../components/InvestmentMarket/InvestmentMarket')); -const MyFocus = lazy(() => import('./HotInvestMents/MyFocus')); -const CurrencyDetails = lazy(() => import('./currencydetails/CurrencyDetails')); +import Account from './account/index' +import PublicLayout from './PublicLayout'; +import AuthLayout from './AuthLayout'; +import Home from './Home'; +import Property from './property/index'; +import User from './user/index'; +import History from './history/index'; +import LoginPage from './login/LoginPage'; +import RegisterPage from './login/RegisterPage'; +import InvestmentMarket from '../components/InvestmentMarket/InvestmentMarket'; +import MyFocus from './HotInvestMents/MyFocus'; +import CurrencyDetails from './currencydetails/CurrencyDetails'; +// const Account = lazy(() => import('./account/index')); +// const PublicLayout = lazy(() => import('./PublicLayout')); +// const AuthLayout = lazy(() => import('./AuthLayout')); +// const Home = lazy(() => import('./Home')); +// const Property = lazy(() => import('./property/index')); +// const User = lazy(() => import('./user/index')); +// const History = lazy(() => import('./history/index')); +// const LoginPage = lazy(() => import('./login/LoginPage')); +// const RegisterPage = lazy(() => import('./login/RegisterPage')); +// const InvestmentMarket = lazy(() => import('../components/InvestmentMarket/InvestmentMarket')); +// const MyFocus = lazy(() => import('./HotInvestMents/MyFocus')); +// const CurrencyDetails = lazy(() => import('./currencydetails/CurrencyDetails')); const AppRouter = () => { const signedUrChek = useSelector(signedUr); From 168d96b97a858308674d1137460b01a367be7f97 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Mon, 7 Oct 2024 15:52:29 +0700 Subject: [PATCH 041/118] MT4 account creation --- .env.development | 6 +- package.json | 2 +- .../TranslationTypes/components/account.ts | 3 +- src/I18n/ch/components/account.ts | 27 +- src/I18n/en/components/account.ts | 27 +- src/I18n/vi/components/account.ts | 28 +- src/components/AddAccount.tsx | 94 ++++++- src/main.tsx | 10 +- src/pages/AppRouter.tsx | 20 +- src/pages/Realtime/BackOfficeHub.tsx | 86 ++++++ src/pages/Realtime/ClientHub.tsx | 60 +++++ src/pages/Realtime/MT4.Pumping.tsx | 55 ++++ src/pages/Realtime/MarketDataHub.tsx | 57 ++++ src/pages/Realtime/types.ts | 102 +++++++ src/pages/account/index.tsx | 40 ++- src/pages/login/LoginPage.tsx | 8 +- src/pages/login/RegisterPage.tsx | 4 +- src/pages/login/components/GetPassword.tsx | 13 +- src/pages/login/components/SetPassword.tsx | 3 +- src/pages/login/components/VeritifyMail.tsx | 4 +- src/pages/property/Withdraw.tsx | 4 +- src/pages/property/type.ts | 0 src/services/{adminServ.ts => adminAPI.ts} | 4 +- src/services/authAPI.ts | 40 +++ src/services/authServ.ts | 31 --- src/services/clientServ.ts | 14 - src/services/configServ.ts | 31 ++- src/services/getPassServ.ts | 10 - src/store/useAccountStore.ts | 103 ++++++++ src/utils/apiCall.ts | 69 +++++ src/utils/formatDate.ts | 14 + yarn.lock | 250 ++++++++---------- 32 files changed, 923 insertions(+), 296 deletions(-) create mode 100644 src/pages/Realtime/BackOfficeHub.tsx create mode 100644 src/pages/Realtime/ClientHub.tsx create mode 100644 src/pages/Realtime/MT4.Pumping.tsx create mode 100644 src/pages/Realtime/MarketDataHub.tsx create mode 100644 src/pages/Realtime/types.ts create mode 100644 src/pages/property/type.ts rename src/services/{adminServ.ts => adminAPI.ts} (63%) create mode 100644 src/services/authAPI.ts delete mode 100644 src/services/authServ.ts delete mode 100644 src/services/clientServ.ts delete mode 100644 src/services/getPassServ.ts create mode 100644 src/store/useAccountStore.ts create mode 100644 src/utils/apiCall.ts create mode 100644 src/utils/formatDate.ts diff --git a/.env.development b/.env.development index 574215f..cc0e1f1 100644 --- a/.env.development +++ b/.env.development @@ -1,9 +1,7 @@ PORT=3001 -VITE_HOST_ROOT=https://demoApi.rushprofit.uk -VITE_HTTP_ROOT=/api # https://demoApi.rushprofit.uk -VITE_AXIOS_ROOT= +VITE_HTTP_ROOT=https://demoApi.rushprofit.uk +VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ VITE_VERSION=V0.1 - # VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/package.json b/package.json index 961d9cb..5a3ec23 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@ant-design/pro-form": "^2.30.2", "@ant-design/pro-layout": "^7.19.0", "@faker-js/faker": "^8.4.1", - "@microsoft/signalr": "^8.0.0", + "@microsoft/signalr": "^8.0.7", "@reduxjs/toolkit": "^2.2.7", "@tanstack/react-query": "^5.32.0", "@tanstack/react-query-devtools": "^5.32.0", diff --git a/src/I18n/TranslationTypes/components/account.ts b/src/I18n/TranslationTypes/components/account.ts index f391c02..ae26f29 100644 --- a/src/I18n/TranslationTypes/components/account.ts +++ b/src/I18n/TranslationTypes/components/account.ts @@ -1,4 +1,4 @@ -export type account ={ +export type account = { 帳戶管理: string, 我的帳戶: string, 新增帳戶: string, @@ -11,4 +11,5 @@ export type account ={ 輸入: string, 確認: string, 前往: string, + PasswordInvestor: string, }; \ No newline at end of file diff --git a/src/I18n/ch/components/account.ts b/src/I18n/ch/components/account.ts index 729b351..72476ce 100644 --- a/src/I18n/ch/components/account.ts +++ b/src/I18n/ch/components/account.ts @@ -1,16 +1,17 @@ -const account ={ - 帳戶管理:'帳戶管理', - 我的帳戶:'我的帳戶', - 新增帳戶:'新增帳戶', - 取消:'取消', - 選擇交易平台:'選擇交易平台', - 選擇帳戶類型:'選擇帳戶類型', - 真實帳戶:'真實帳戶', - 虛擬帳戶:'虛擬帳戶', - 設定帳戶密碼:'設定帳戶密碼', - 輸入:'輸入', - 確認:'確認', - 前往:'前往', +const account = { + 帳戶管理: '帳戶管理', + 我的帳戶: '我的帳戶', + 新增帳戶: '新增帳戶', + 取消: '取消', + 選擇交易平台: '選擇交易平台', + 選擇帳戶類型: '選擇帳戶類型', + 真實帳戶: '真實帳戶', + 虛擬帳戶: '虛擬帳戶', + 設定帳戶密碼: '設定帳戶密碼', + 輸入: '輸入', + 確認: '確認', + 前往: '前往', + PasswordInvestor: "Set password investor", }; export default account; \ No newline at end of file diff --git a/src/I18n/en/components/account.ts b/src/I18n/en/components/account.ts index 729b351..72476ce 100644 --- a/src/I18n/en/components/account.ts +++ b/src/I18n/en/components/account.ts @@ -1,16 +1,17 @@ -const account ={ - 帳戶管理:'帳戶管理', - 我的帳戶:'我的帳戶', - 新增帳戶:'新增帳戶', - 取消:'取消', - 選擇交易平台:'選擇交易平台', - 選擇帳戶類型:'選擇帳戶類型', - 真實帳戶:'真實帳戶', - 虛擬帳戶:'虛擬帳戶', - 設定帳戶密碼:'設定帳戶密碼', - 輸入:'輸入', - 確認:'確認', - 前往:'前往', +const account = { + 帳戶管理: '帳戶管理', + 我的帳戶: '我的帳戶', + 新增帳戶: '新增帳戶', + 取消: '取消', + 選擇交易平台: '選擇交易平台', + 選擇帳戶類型: '選擇帳戶類型', + 真實帳戶: '真實帳戶', + 虛擬帳戶: '虛擬帳戶', + 設定帳戶密碼: '設定帳戶密碼', + 輸入: '輸入', + 確認: '確認', + 前往: '前往', + PasswordInvestor: "Set password investor", }; export default account; \ No newline at end of file diff --git a/src/I18n/vi/components/account.ts b/src/I18n/vi/components/account.ts index 69134a3..154aea3 100644 --- a/src/I18n/vi/components/account.ts +++ b/src/I18n/vi/components/account.ts @@ -1,16 +1,18 @@ -const account ={ - 帳戶管理:'Quản lý tài khoản', - 我的帳戶:'Tài khoản của tôi', - 新增帳戶:'Thêm tài khoản mới', - 取消:'Hủy bỏ', - 選擇交易平台:'Chọn sàn giao dịch', - 選擇帳戶類型:'Chọn loại tài khoản', - 真實帳戶:'Tài khoản thực', - 虛擬帳戶:'Tài khoản ảo', - 設定帳戶密碼:'Cài đặt mật khẩu tài khoản', - 輸入:'Nhập', - 確認:'Xác nhận', - 前往:'Đi tiếp', +const account = { + 帳戶管理: 'Quản lý tài khoản', + 我的帳戶: 'Tài khoản của tôi', + 新增帳戶: 'Thêm tài khoản mới', + 取消: 'Hủy bỏ', + 選擇交易平台: 'Chọn sàn giao dịch', + 選擇帳戶類型: 'Chọn loại tài khoản', + 真實帳戶: 'Tài khoản thực', + 虛擬帳戶: 'Tài khoản ảo', + 設定帳戶密碼: 'Cài đặt mật khẩu tài khoản', + 輸入: 'Nhập', + 確認: 'Xác nhận', + 前往: 'Đi tiếp', + PasswordInvestor: "Nhap mật khẩu investor", + }; export default account; \ No newline at end of file diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx index f9cefc8..0d8bc81 100644 --- a/src/components/AddAccount.tsx +++ b/src/components/AddAccount.tsx @@ -4,13 +4,45 @@ import Mt4 from '../assets/mt4.png'; import { useTranslation } from 'react-i18next'; import { CheckCard } from '@ant-design/pro-components'; import DownloadMT4 from './DownloadMT4'; +import { api } from '@/services/configServ'; +import apiCall from '@/utils/apiCall'; +import { useAccountStore } from '@/store/useAccountStore'; const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visible, onClose }) => { const [accountType, setAccountType] = useState('real'); + const [form] = Form.useForm(); // Initialize form instance const { t } = useTranslation(); + const { fetchMT4Accounts } = useAccountStore(); + const onFinish = async (values: any) => { + let result = { ...values, accountType } + try { - const onFinish = (values: any) => { - console.log('Received values:', values); + const data = await apiCall('/v1.0/mt4Transaction/client/account', 'POST', result); + fetchMT4Accounts(); + + } + catch { + } + finally { + onClose(); + } + + }; + + // Validator for password matching + const validatePassword = (_: any, value: string) => { + if (!value || form.getFieldValue('password') === value) { + return Promise.resolve(); + } + return Promise.reject(new Error(t('account.password_not_match'))); + }; + + // Validator for investor password matching + const validateInvestorPassword = (_: any, value: string) => { + if (!value || form.getFieldValue('passwordInvestor') === value) { + return Promise.resolve(); + } + return Promise.reject(new Error(t('account.password_investor_not_match'))); }; return ( @@ -28,16 +60,20 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib footer={null} >
    form.setFieldsValue({ platformType: val })} // Set form value on change + options={[ { title: 'MetaTrader 4', @@ -65,20 +101,66 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib defaultValue='real' options={[ { label: t('account.真實帳戶'), value: 'real' }, - { label: t('account.虛擬帳戶'), value: 'demo' }, + { label: t('account.虛擬帳戶'), value: 'demo', disabled: true }, ]} /> + + {/* Password Fields */} + + + + - + + {/* Investor Password Fields */} + + + + + + + + + {/* Footer */} +
    + ); +}; diff --git a/src/pages/Realtime/ClientHub.tsx b/src/pages/Realtime/ClientHub.tsx new file mode 100644 index 0000000..360c990 --- /dev/null +++ b/src/pages/Realtime/ClientHub.tsx @@ -0,0 +1,60 @@ +/* eslint-disable */ +import { useEffect, useState } from "react"; +import * as signalR from "@microsoft/signalr"; +import { NotifyMT4TransferToClientDto } from "./types"; + +const url = "https://demoApi.rushprofit.uk/hubs/clientHub"; +// const url = "http://localhost:5000/hubs/clientHub"; + +export const ClientHub = () => { + const [token, setToken] = useState(""); + const [shouldInitConnection, setShouldInitConnection] = useState(false); + const [hubConnection, setHubConnection] = + useState(null); + + useEffect(() => { + if (!shouldInitConnection || !token) { + return; + } + + const connection = new signalR.HubConnectionBuilder() + .withUrl(url, { + accessTokenFactory: () => token, + }) + .withAutomaticReconnect() + .build(); + + connection + .start() + .then(() => { + console.log("Connection started!"); + setHubConnection(connection); + }) + .catch((err) => + console.log("Error while establishing connection :( ", err) + ); + + connection.on( + "NotifyMT4Transfer", + (message: NotifyMT4TransferToClientDto) => { + console.log("NotifyMT4Transfer: ", message); + } + ); + + return () => { + connection.stop(); + }; + }, [token, shouldInitConnection]); + return ( +
    +

    ClientHub

    + setToken(e.target.value)} + /> + +
    + ); +}; diff --git a/src/pages/Realtime/MT4.Pumping.tsx b/src/pages/Realtime/MT4.Pumping.tsx new file mode 100644 index 0000000..8e3f535 --- /dev/null +++ b/src/pages/Realtime/MT4.Pumping.tsx @@ -0,0 +1,55 @@ +/* eslint-disable */ +import { useEffect, useState } from "react"; +import * as signalR from "@microsoft/signalr"; + +const url = "https://demoApi.rushprofit.uk/hubs/marketData"; + +export const MT4Pumping = () => { + const [token, setToken] = useState(""); + const [shouldInitConnection, setShouldInitConnection] = useState(false); + const [hubConnection, setHubConnection] = + useState(null); + + useEffect(() => { + if (!shouldInitConnection || !token) { + return; + } + + const connection = new signalR.HubConnectionBuilder() + .withUrl(url, { + accessTokenFactory: () => token, + }) + .withAutomaticReconnect() + .build(); + + connection + .start() + .then(() => { + console.log("Connection started!"); + setHubConnection(connection); + }) + .catch((err) => + console.log("Error while establishing connection :( ", err) + ); + + connection.on("BidAskUpdate", (message) => { + console.log("BidAskUpdate: ", message); + }); + + return () => { + connection.stop(); + }; + }, [token, shouldInitConnection]); + return ( +
    +

    MT4pumping

    + setToken(e.target.value)} + /> + +
    + ); +}; diff --git a/src/pages/Realtime/MarketDataHub.tsx b/src/pages/Realtime/MarketDataHub.tsx new file mode 100644 index 0000000..f138343 --- /dev/null +++ b/src/pages/Realtime/MarketDataHub.tsx @@ -0,0 +1,57 @@ +/* eslint-disable */ +import { useEffect, useState } from "react"; +import * as signalR from '@microsoft/signalr'; +import { MarketDataDto } from "./types"; + +// const url = "https://demoApi.rushprofit.uk/hubs/marketData"; +const url = "http://demoApi.rushprofit.uk/hubs/marketData"; + +export const MarketDataHub = () => { + const [token, setToken] = useState(""); + const [shouldInitConnection, setShouldInitConnection] = useState(false); + const [hubConnection, setHubConnection] = + useState(null); + + useEffect(() => { + if (!shouldInitConnection || !token) { + return; + } + + const connection = new signalR.HubConnectionBuilder() + .withUrl(url, { + accessTokenFactory: () => token, + }) + .withAutomaticReconnect() + .build(); + + connection + .start() + .then(() => { + console.log("Connection started!"); + setHubConnection(connection); + }) + .catch((err) => + console.log("Error while establishing connection :( ", err) + ); + + // marketData + connection.on("BidAskUpdate", (message: MarketDataDto) => { + console.log("BidAskUpdate: ", message); + }); + return () => { + connection.stop(); + }; + }, [token, shouldInitConnection]); + return ( +
    +

    MarketDataHub

    + setToken(e.target.value)} + /> + +
    + ); +}; diff --git a/src/pages/Realtime/types.ts b/src/pages/Realtime/types.ts new file mode 100644 index 0000000..0475f84 --- /dev/null +++ b/src/pages/Realtime/types.ts @@ -0,0 +1,102 @@ +enum TransactionType { + MT4Deposit = 1, // CRM -> MT4 + MT4Withdrawal, // MT4 -> CRM + MT4CreditIn, + MT4CreditOut, +} + +enum TransactionStatus { + Pending = 1, // 交易處理 + Completed, // 交易已完成 + Failed, // 交易失敗 +} + +export interface UserDto { + UserId: string; + UserName: string; +} + +export interface MarketDataDto { + Symbol: string; + Bid: string; // 買入價格 + Ask: string; // 賣出價格 + LastTime: Date; +} + +export interface NotifyMT4TransferToClientDto { + Amount: number; + Type: TransactionType; + Status: TransactionStatus; + Login: number; + Order: string; + CreatedAt: Date; +} + +export interface NotifyMT4TransferDto extends NotifyMT4TransferToClientDto { + OwnerUserId: string; + OwnerName: string; + OperatorName: string; +} + +export interface NotifyTradeDto { + Login: number; // MT4 account + Order: number; // MT4 order number + Symbol: string; + Volume: number; // 交易數量 + State: number; // --- trade record state + OpenTime: Date; // 開倉時間 + CloseTime: Date; // 平倉時間 + Expiration: Date; // 過期時間 + OpenPrice: number; // 開倉價格 + ClosePrice: number; // 平倉價格 + SL: number; // 止損價格 + TP: number; // 止盈價格 + Commission: number; // 佣金 + CommissionAgent: number; // 代理佣金 + Storage: number; // 過夜利息 + MarginRate: number; // 保證金比率 + Profit: number; // 利潤 + Taxes: number; // 稅金 + Comment: string; // 評論 + GwVolume: number; // 網關交易量 + GwOrder: number; // 外部交易訂單 + GwOpenPrice: number; // 外部開倉價格 + GwClosePrice: number; // 外不平倉價格 +} + +export interface NotifyMarginCallDto { + userId: string; + userName: string; + login: number; + group: string; + equity: number; + balance: number; + credit: number; + levelType: number; // --- margin level type + marginType: number; // --- margin controlling type + marginLevelValue: number; + marginFree: number; // 未使用保證金 + margin: number; // 以使用保證金 + volume: number; // 未平倉的頭寸 +} + +//========================// +// MT4 data // +//========================// + +//--- trade record state +// enum { +// TS_OPEN_NORMAL, // The trade is open in normal state +// TS_OPEN_REMAND, // The trade is open and remanded (held for some reason) +// TS_OPEN_RESTORED, // The trade is open and has been restored +// TS_CLOSED_NORMAL, // The trade is closed in a normal state +// TS_CLOSED_PART, // The trade is partially closed +// TS_CLOSED_BY, // The trade is closed by another trade +// TS_DELETED // The trade has been deleted +// }; + +//--- margin level type +// enum { MARGINLEVEL_OK=0, MARGINLEVEL_MARGINCALL, MARGINLEVEL_STOPOUT }; + +//--- margin controlling type +// { MARGIN_TYPE_PERCENT, MARGIN_TYPE_CURRENCY } diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index 031bb86..7a47b76 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -6,17 +6,24 @@ import AddAccount from '../../components/AddAccount'; import mt4 from '../../assets/mt4.png'; import mt5 from '../../assets/mt5.png'; import { useTranslation } from 'react-i18next'; +import { useAccountStore } from '@/store/useAccountStore'; +import { formatDate } from '@/utils/formatDate'; const { Panel } = Collapse; const Account = () => { const { t } = useTranslation(); - + const [isAddAccountVisible, setIsAddAccountVisible] = React.useState(false); - + const { MT4Accounts, fetchMT4Accounts } = useAccountStore(state => state); + + + React.useEffect(() => { + fetchMT4Accounts(); + }, []) const PTAccount = [ { - id:'1', + id: '1', account: 'email@qq.com', accountType: `${t('report.寶泰帳戶')}`, icon: logo, @@ -37,22 +44,7 @@ const Account = () => { ); - const MT4Account = [ - { - id:'1', - account: '3000000015', - accountType: 'MT4', - balance: '$ 0.00', - isReal: '真實', - }, - { - id:'2', - account: '3000000016', - accountType: 'MT4', - balance: '$ 0.00', - isReal: '模擬', - }, - ]; + const genExtra = () => (
    @@ -109,7 +101,7 @@ const Account = () => { src={mt4} size={36} /> - MT4 帳戶(2) + MT4 帳戶({MT4Accounts.length}) } key='1' @@ -117,12 +109,12 @@ const Account = () => { style={panelStyle} > ( - ]}> + ]}>
    結餘 {item.balance}
    diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index ea2dbeb..5479e72 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -4,17 +4,17 @@ import { Button, Card, Checkbox, Input, Typography, message } from 'antd'; import { useTranslation } from 'react-i18next'; import { Formik, Form, Field, ErrorMessage } from 'formik'; import * as Yup from 'yup'; -import { adminServ } from '@/services/adminServ'; +import { adminAPI } from '@/services/adminAPI'; import { saveLocalStore } from '@/utils/local'; import { useDispatch } from 'react-redux'; import { saveUser } from '@/redux/slice/adminSlice'; -import { authAPI } from '@/services/clientServ'; +import { authAPI } from '@/services/authAPI'; // Import adminServ thay vì axios const { Title, Text } = Typography; -interface ILoginPageProps {} +interface ILoginPageProps { } const LoginPage: React.FunctionComponent = () => { const dispatch = useDispatch(); @@ -52,7 +52,7 @@ const LoginPage: React.FunctionComponent = () => { }); } else { // Gọi API cho admin nếu là userName - response = await adminServ.loginAdServ(values); + response = await adminAPI.loginAdServ(values); } if (response.status === 200) { diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index de4ab81..87a22c8 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -3,7 +3,7 @@ import { Button, Card, Form, Input, Select, Typography, message } from 'antd'; import { Link } from 'react-router-dom'; import { Formik, Field, Form as FormikForm, ErrorMessage } from 'formik'; import * as Yup from 'yup'; -import { authServ } from '@/services/authServ'; +import { authAPI } from '@/services/authAPI'; import { useNavigate } from 'react-router-dom'; interface FormValues { @@ -78,7 +78,7 @@ const RegisterPage = () => { ...(userData.invitationCode && { invitationCode: userData.invitationCode }), }; - const response = await authServ.registerServ(data); + const response = await authAPI.register(data); console.log('Email has been sent', response.data); message.success('Email has been sent. Please confirm email'); setTimeout(() => { diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index 896da88..0f041a6 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -6,6 +6,7 @@ import { message } from 'antd'; import { getPassServ } from '@/services/getPassServ'; // Import service import { Link } from 'react-router-dom'; import { useThemeStore } from '@/store'; // Import useThemeStore +import { authAPI } from '@/services/authAPI'; interface GetPassFormValues { email: string; @@ -24,7 +25,7 @@ const GetPassword: React.FC = () => { const handleSubmit = async (values: GetPassFormValues) => { try { - const response = await getPassServ.sendMailCheckPass(values.email); // Sử dụng service + const response = await authAPI.sendMailConfirmResetPassword(values.email); // Sử dụng service message.success(`${response.data.message}Please check your email`); console.log('Response:', response.data); } catch (error) { @@ -54,9 +55,8 @@ const GetPassword: React.FC = () => { type='email' id='email' name='email' - className={`mt-2 block w-full border rounded-md p-2 focus:outline-none focus:ring-2 h-10 ${ - isDark ? 'border-gray-600 focus:ring-blue-500' : 'border-gray-300 focus:ring-blue-300 text-white' - }`} + className={`mt-2 block w-full border rounded-md p-2 focus:outline-none focus:ring-2 h-10 ${isDark ? 'border-gray-600 focus:ring-blue-500' : 'border-gray-300 focus:ring-blue-300 text-white' + }`} /> {
    diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx index 52095ac..b193a21 100644 --- a/src/pages/login/components/SetPassword.tsx +++ b/src/pages/login/components/SetPassword.tsx @@ -6,6 +6,7 @@ import LoGo from '@/assets/logo.png'; import { Link, useLocation } from 'react-router-dom'; import { getPassServ } from '@/services/getPassServ'; import { useNavigate } from 'react-router-dom'; +import { authAPI } from '@/services/authAPI'; interface ResetPasswordValues { email: string; @@ -41,7 +42,7 @@ const ResetPasswordForm: React.FC = () => { const handleSubmit = async (values: ResetPasswordValues) => { try { - const response = await getPassServ.resetPassword(values.email, values.password, token); + const response = await authAPI.resetPassword(values.email, values.password, token); message.success('Successful change password'); console.log('Đặt lại mật khẩu thành công:', response.data); setPassToLogin('/auth/loginPage'); diff --git a/src/pages/login/components/VeritifyMail.tsx b/src/pages/login/components/VeritifyMail.tsx index 859488d..f64ada5 100644 --- a/src/pages/login/components/VeritifyMail.tsx +++ b/src/pages/login/components/VeritifyMail.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Link, useLocation } from 'react-router-dom'; import { message, Card } from 'antd'; -import { authServ } from '@/services/authServ'; +import { authAPI } from '@/services/authAPI'; import LoGo from '../../../assets/logo.png'; import { useNavigate } from 'react-router-dom'; @@ -29,7 +29,7 @@ const VerifyMail: React.FC = () => { const handleConfirmEmail = async () => { try { - const response = await authServ.confirmEmailServ({ userId, token }); + const response = await authAPI.confirmEmail({ userId, token }); // Giả sử API trả về thông tin người dùng // const userData = response.data.user; diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index fc12c55..379f2c4 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -5,11 +5,11 @@ import SafetyVerification from './components/SafetyVerification'; import { useTranslation } from 'react-i18next'; import PayChannel from './components/PayChannel'; -interface IWithdrawProps {} +interface IWithdrawProps { } const Withdraw: React.FunctionComponent = (props) => { const { t } = useTranslation(); - const {} = props || {}; + const { } = props || {}; const { Text } = Typography; const [form] = Form.useForm(); diff --git a/src/pages/property/type.ts b/src/pages/property/type.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/services/adminServ.ts b/src/services/adminAPI.ts similarity index 63% rename from src/services/adminServ.ts rename to src/services/adminAPI.ts index 2f1c5ea..364aef8 100644 --- a/src/services/adminServ.ts +++ b/src/services/adminAPI.ts @@ -1,7 +1,7 @@ import { https } from './configServ'; -export const adminServ = { - loginAdServ: (data) => { +export const adminAPI = { + loginAdServ: (data: any) => { return https.post('/v1.0/auth/common/login', data); }, }; diff --git a/src/services/authAPI.ts b/src/services/authAPI.ts new file mode 100644 index 0000000..7e715de --- /dev/null +++ b/src/services/authAPI.ts @@ -0,0 +1,40 @@ +import { https } from './configServ'; +// define registration data type +interface RegisterData { + email: string; + password: string; + userName: string; + countryCode: string; + countryCallingCode: number; + phoneNumber: string; +} +// Email authentication data type definition +interface ConfirmEmailData { + userId?: string; + token?: string; +} + +export const authAPI = { + register: (data: RegisterData) => { + return https.post('/v1.0/auth/register', data, { + headers: { + "X-Client-Domain": "http://localhost:3001" + } + }); + }, + confirmEmail: (data: ConfirmEmailData) => { + return https.post('/v1.0/auth/confirmEmail', data); + }, + me: () => { + return https.get('/v1.0/client/me'); + }, + login: (values: { email: string; password: string }) => { + return https.post('/v1.0/auth/login', values); + }, + sendMailConfirmResetPassword: (email: string) => { + return https.post('/v1.0/client/send-email/reset-password', { email }); + }, + resetPassword: (email: string, password: string, token: string | undefined) => { + return https.post('/v1.0/client/reset-password', { email, password, token }); + } +}; diff --git a/src/services/authServ.ts b/src/services/authServ.ts deleted file mode 100644 index b3d74c4..0000000 --- a/src/services/authServ.ts +++ /dev/null @@ -1,31 +0,0 @@ -// authServ.ts -import { AxiosHeaders } from 'axios'; -import { https } from './configServ'; -// define registration data type -interface RegisterData { - email: string; - password: string; - userName: string; - countryCode: string; - countryCallingCode: number; - phoneNumber: string; -} -// Email authentication data type definition -interface ConfirmEmailData { - userId?: string; - token?: string; -} - -export const authServ = { - registerServ: (data: RegisterData) => { - return https.post('/v1.0/auth/register', data, {headers: { - "X-Client-Domain":"http://localhost:3001" - }}); - }, - confirmEmailServ: (data: ConfirmEmailData) => { - return https.post('/v1.0/auth/confirmEmail', data); - }, - userInfo: () => { - return https.get('/v1.0/client/me'); - }, -}; diff --git a/src/services/clientServ.ts b/src/services/clientServ.ts deleted file mode 100644 index a4398de..0000000 --- a/src/services/clientServ.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { https } from './configServ'; - -export const authAPI = { - login: (values: { email: string; password: string }) => { - return https.post('/v1.0/auth/login', values); - }, - getClientInfo: (token: string) => { - return https.get('/v1.0/client/me', { - headers: { - Authorization: `Bearer ${token}`, // Gửi token trong header - }, - }); - }, -}; diff --git a/src/services/configServ.ts b/src/services/configServ.ts index baec12b..77eb377 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -18,6 +18,11 @@ export const api = axios.create({ withCredentials: true, baseURL: host }); + +export const paymentApi = axios.create({ + withCredentials: true, + baseURL: import.meta.env.VITE_PAYMENT_ROOT +}) export const setupInterceptor = (store: Store) => { api.interceptors.request.use( (config) => { @@ -44,11 +49,35 @@ export const setupInterceptor = (store: Store) => { return Promise.reject(error); } ); + paymentApi.interceptors.request.use( + (config) => { + + const token = localStorage.getItem('token'); + if (token) { + config.headers['Authorization'] = `Bearer ${token}`; + } + return config; + }, + (error) => { + return Promise.reject(error); + } + ); + paymentApi.interceptors.response.use( + (response) => { + return response; + }, + async (error) => { + if (error.response && error.response.status === 401) { + // Example: Logout user if token is invalid or expired + // store.dispatch(logout()); + } + return Promise.reject(error); + } + ); }; https.interceptors.request.use((config) => { const auth = getLocalStore<{ token: string }>('user_infor'); - console.log('get Auth'); if (!auth) return config; const pureConfig = { ...config }; pureConfig.headers.Authorization = `Bearer ${auth.token}`; diff --git a/src/services/getPassServ.ts b/src/services/getPassServ.ts deleted file mode 100644 index 0c6760a..0000000 --- a/src/services/getPassServ.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { https } from './configServ'; - -export const getPassServ = { - sendMailCheckPass: (email: string) => { - return https.post('/v1.0/client/send-email/reset-password', { email }); - }, - resetPassword: (email: string, password: string, token: string | undefined) => { - return https.post('/v1.0/client/reset-password', { email, password, token }); - }, -}; diff --git a/src/store/useAccountStore.ts b/src/store/useAccountStore.ts new file mode 100644 index 0000000..7c9c090 --- /dev/null +++ b/src/store/useAccountStore.ts @@ -0,0 +1,103 @@ +import { api } from '@/services/configServ'; +import { create } from 'zustand'; + +// Define the structure for an account +interface Account { + userId: string; + userName: string; + login: number; + group: string; + credit: number; + levelType: number; + marginType: number; + marginLevelValue: number; + marginFree: number; + margin: number; + equity: number; + balance: number; + volume: number; + prevMonthBalance: number; + prevBalance: number; + interestRate: number; + prevMonthEquity: number; + prevEquity: number; + enable: number; + enableChangePassword: number; + enableReadOnly: number; + enableOtp: number; + comment: string; + status: string; + leverage: number; + lastIP: string; + createdAt: string; // ISO date format + updatedAt: string; // ISO date format +} + +interface UserMT4Accounts { + currentPage: number, + totalPages: number, + pageSize: number, + totalCount: number, + items: Account[] +} + +// Define the structure for a balance entry +interface Balance { + accountId: string; + currency: string; + amount: string; +} + +// Define the structure for an order history entry +interface OrderHistory { + orderId: string; + accountId: string; + type: string; + amount: string; + date: string; +} + +// Define the store options with the new additions +interface AccountStoreOptions { + MT4Accounts: Account[]; + MT5Accounts: Account[]; + balances: Balance[]; // New field for storing balances + orderHistories: OrderHistory[]; // New field for storing order histories + + setMT4Accounts: (accounts: Account[]) => void; + setBalances: (balances: Balance[]) => void; + setOrderHistories: (orderHistories: OrderHistory[]) => void; + + fetchMT4Accounts: () => Promise; +} + +// Create the Zustand store +const useAccountStore = create((set) => ({ + MT4Accounts: [], + MT5Accounts: [], + balances: [], // Initialize empty balances + orderHistories: [], // Initialize empty order histories + fetchMT4Accounts: async () => { + const { items: accounts } = await api.get("/v1.0/client/my/mt4/account?PageNumber=1&PageSize=50").then(res => res.data); + + + console.log(accounts) + set(() => ({ MT4Accounts: accounts })); + }, + // Method to set MT4 accounts + setMT4Accounts: (accounts) => { + set(() => ({ MT4Accounts: accounts })); + }, + + // Method to set balances + setBalances: (balances) => { + set(() => ({ balances })); + }, + + // Method to set order histories + setOrderHistories: (orderHistories) => { + set(() => ({ orderHistories })); + }, +})); + +export { useAccountStore }; diff --git a/src/utils/apiCall.ts b/src/utils/apiCall.ts new file mode 100644 index 0000000..74617e4 --- /dev/null +++ b/src/utils/apiCall.ts @@ -0,0 +1,69 @@ +import axios, { AxiosError } from 'axios'; +import { notification } from 'antd'; +import { api } from '@/services/configServ'; + +// Define a type for the API error response +interface ApiErrorResponse { + type?: string; + title: string; + status: number; + errors?: any; + errorCode?: number; +} + +// Define a type for successful response +interface ApiResponse { + data: T; +} + +// Create a helper function for API calls +const apiCall = async ( + url: string, + method: 'GET' | 'POST' | 'PUT' | 'DELETE', + data?: any +): Promise => { + try { + // Making the API request + const response = await api({ + url, + method, + data, + }); + + // Trigger success notification + notification.success({ + message: 'Success', + description: 'Operation was successful!', + }); + + // Return the successful response data + return response.data as T; + } catch (error) { + // Handle errors and trigger error notification + if (axios.isAxiosError(error)) { + const errorPayload = error.response?.data as ApiErrorResponse; + + if (errorPayload?.title) { + notification.error({ + message: 'Error', + description: errorPayload.title || 'An error occurred', + }); + } else { + notification.error({ + message: 'Error', + description: 'An unexpected error occurred', + }); + } + } else { + notification.error({ + message: 'Error', + description: 'Network error or server is down.', + }); + } + + // Optionally re-throw the error for further handling + throw error; + } +}; + +export default apiCall; diff --git a/src/utils/formatDate.ts b/src/utils/formatDate.ts new file mode 100644 index 0000000..528d9e6 --- /dev/null +++ b/src/utils/formatDate.ts @@ -0,0 +1,14 @@ +export function formatDate(isoDate: string): string { + const date = new Date(isoDate); + + const options: Intl.DateTimeFormatOptions = { + year: 'numeric', + month: 'long', + day: 'numeric', + hour: '2-digit', + minute: '2-digit', + hour12: true, + }; + + return date.toLocaleDateString('en-US', options); +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b6b3655..7c19411 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,7 +26,20 @@ dependencies: "@ctrl/tinycolor" "^3.6.1" -"@ant-design/cssinjs@^1.11.1", "@ant-design/cssinjs@^1.21.0": +"@ant-design/cssinjs@^1.11.1": + version "1.21.1" + resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz#7320813c5f747e0cde52c388eff5198d78d57230" + integrity sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg== + dependencies: + "@babel/runtime" "^7.11.1" + "@emotion/hash" "^0.8.0" + "@emotion/unitless" "^0.7.5" + classnames "^2.3.1" + csstype "^3.1.3" + rc-util "^5.35.0" + stylis "^4.3.3" + +"@ant-design/cssinjs@^1.21.0": version "1.21.0" resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.21.0.tgz#de7289bfd71c7a494a28b96569ad88f999619105" integrity sha512-gIilraPl+9EoKdYxnupxjHB/Q6IHNRjEXszKbDxZdsgv4sAZ9pjkCq8yanDWNvyfjp4leir2OVAJm0vxwKK8YA== @@ -44,7 +57,18 @@ resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== -"@ant-design/icons@^5.0.0", "@ant-design/icons@^5.3.6", "@ant-design/icons@^5.3.7": +"@ant-design/icons@^5.0.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.5.1.tgz#4ff57b2a0d3bafae3d990c2781fd857ead36c935" + integrity sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w== + dependencies: + "@ant-design/colors" "^7.0.0" + "@ant-design/icons-svg" "^4.4.0" + "@babel/runtime" "^7.24.8" + classnames "^2.2.6" + rc-util "^5.31.1" + +"@ant-design/icons@^5.3.6", "@ant-design/icons@^5.3.7": version "5.3.7" resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.3.7.tgz#d9f3654bf7934ee5faba43f91b5a187f5309ec68" integrity sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew== @@ -66,14 +90,14 @@ "@antv/g2" "^5.1.18" "@antv/g2-extension-plot" "^0.2.0" -"@ant-design/pro-card@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@ant-design/pro-card/-/pro-card-2.8.4.tgz#9df86a54b26cf90d66e3fa9b6d5e45ec232d0171" - integrity sha512-V+8D10YDsO1FnQK2OKOkB8KkpbjgN7OSLzsJhpkv0l4c4FYV0HzWwEmqIhscgse1j587QcuK3jKwnCWEsxSP1Q== +"@ant-design/pro-card@2.8.8": + version "2.8.8" + resolved "https://registry.yarnpkg.com/@ant-design/pro-card/-/pro-card-2.8.8.tgz#79c38542ece8a2c609968856cb59443288c02d7d" + integrity sha512-av9ksFaSKmi63VXuU9qbEwk49stuzZZsDq4vUqCt1GJBzUiKVGs8rmTYlfDwmqc9k1ZZjCu74SyAf58J5775wg== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" classnames "^2.3.2" omit.js "^2.0.2" @@ -81,53 +105,36 @@ rc-util "^5.4.0" "@ant-design/pro-components@^2.7.1": - version "2.7.10" - resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.10.tgz#b92b027c55fb6067e4ab2743b1ed055565e2dd62" - integrity sha512-UZV1gKGjKxZ9OridFzJLgd9K8WFbTr3t36MQa2Fz5EwWj2mfpAFSvg/0yP9UHgTnfdCe5yrpeck9tGpgHIfcdg== - dependencies: - "@ant-design/pro-card" "2.8.4" - "@ant-design/pro-descriptions" "2.5.45" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-form" "2.28.0" - "@ant-design/pro-layout" "7.19.8" - "@ant-design/pro-list" "2.5.61" - "@ant-design/pro-provider" "2.14.7" + version "2.7.19" + resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.19.tgz#197513f73d1463d70a60dda95c99ebc7a048dfee" + integrity sha512-C/xf7VhZEMZsphT9i6DsjjwQYAEj0u77n7WYtd9/HLfJyQ2h9maORnd1z+BSmBZ58IWb18wPbiODUjNXT/toMw== + dependencies: + "@ant-design/pro-card" "2.8.8" + "@ant-design/pro-descriptions" "2.5.53" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-form" "2.30.2" + "@ant-design/pro-layout" "7.20.2" + "@ant-design/pro-list" "2.5.69" + "@ant-design/pro-provider" "2.14.9" "@ant-design/pro-skeleton" "2.1.13" - "@ant-design/pro-table" "3.16.1" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-table" "3.17.2" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.16.3" -"@ant-design/pro-descriptions@2.5.45": - version "2.5.45" - resolved "https://registry.yarnpkg.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.45.tgz#ffdea687c26c2a7e83df9d5c9108d657f5c6eb6e" - integrity sha512-XwaHEWhBEa2KiLUZoh67TIfW9bIckzNFUu/gzy/6Tzi9W+qYhZQCzacNNAUDR/a/MULc3J859oqRP+JjCdFUGg== +"@ant-design/pro-descriptions@2.5.53": + version "2.5.53" + resolved "https://registry.yarnpkg.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.53.tgz#fe5d6bff540dc3fc51eb57f3b9a60e31b5938b67" + integrity sha512-n/LP+FgjysmZgpjAXei7RZSVYgr/9oM6ta672yoyLkZfdMMezRDNnQb3GEhLDMOERVUBg9Ud3ZwYKSoiyC25QQ== dependencies: - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-form" "2.28.0" - "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-form" "2.30.2" + "@ant-design/pro-provider" "2.14.9" "@ant-design/pro-skeleton" "2.1.13" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" rc-resize-observer "^0.2.3" rc-util "^5.0.6" -"@ant-design/pro-field@2.15.0": - version "2.15.0" - resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.15.0.tgz#2f265196b60fc93802117b80c5a93ca84bb3b639" - integrity sha512-pf0ldCWZGEWLpZWyifHqyaQ0/uG5yVPvYXhnSM6sXBtxtfHqZvZvjuhmIK1wR05wDocS/JHQnq+sA3FTut8FXQ== - dependencies: - "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" - "@babel/runtime" "^7.18.0" - "@chenshuai2144/sketch-color" "^1.0.8" - classnames "^2.3.2" - dayjs "^1.11.10" - lodash.tonumber "^4.0.3" - omit.js "^2.0.2" - rc-util "^5.4.0" - swr "^2.0.0" - "@ant-design/pro-field@2.16.2": version "2.16.2" resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.16.2.tgz#a7420d7db92e0f5a12df71fab4355b2f239f386c" @@ -145,26 +152,7 @@ rc-util "^5.4.0" swr "^2.0.0" -"@ant-design/pro-form@2.28.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.28.0.tgz#855971e96160b0c2a6a155d76f5914496cad6d35" - integrity sha512-3sOtwSakzrQVYvhWzvvg1iBmGWwr166HKqob5UnjQPP55+40y0agQpyxeoagJF83Xb31zkbp+U0iFcAAQQs76A== - dependencies: - "@ant-design/icons" "^5.0.0" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" - "@babel/runtime" "^7.18.0" - "@chenshuai2144/sketch-color" "^1.0.7" - "@umijs/use-params" "^1.0.9" - classnames "^2.3.2" - dayjs "^1.11.10" - lodash.merge "^4.6.2" - omit.js "^2.0.2" - rc-resize-observer "^1.1.0" - rc-util "^5.0.6" - -"@ant-design/pro-form@^2.30.2": +"@ant-design/pro-form@2.30.2", "@ant-design/pro-form@^2.30.2": version "2.30.2" resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.30.2.tgz#1ad072b8a02f220dd2342f5bef186e491c768fbb" integrity sha512-Tn5pT8Pi5kkjr9aotezJdiRkJPgv53nyZK5qx6mwQMnI8zqTXarK22plrVEZXuFoLC1qwuAchmy4ofqAsBLx7w== @@ -183,53 +171,42 @@ rc-resize-observer "^1.1.0" rc-util "^5.0.6" -"@ant-design/pro-layout@7.19.8", "@ant-design/pro-layout@^7.19.0": - version "7.19.8" - resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.19.8.tgz#5d070ae2d74a232a657dca6fb207d097b9e8a621" - integrity sha512-f/vC83jmCjEDP7rrLBxRBqCK8298keSRrXqpd2RqigYlJpGqeKVGcevmk5ngBjDxz+UqjoNfOokG7cU3t3eIvQ== +"@ant-design/pro-layout@7.20.2", "@ant-design/pro-layout@^7.19.0": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.20.2.tgz#60f3c6a075148cacdd67605091d459aaff30fcf1" + integrity sha512-a97k8P2sbprPXcBOG8p1g/0bP5kLBiC3+GSj0oxSWjUelAKzI9Q448tLOIfLjDcokxOvPRCEcCAlRg+mCKZVPg== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" "@umijs/route-utils" "^4.0.0" "@umijs/use-params" "^1.0.9" classnames "^2.3.2" - lodash.merge "^4.6.2" + lodash-es "^4.17.21" omit.js "^2.0.2" - path-to-regexp "2.4.0" + path-to-regexp "8.0.0" rc-resize-observer "^1.1.0" rc-util "^5.0.6" swr "^2.0.0" warning "^4.0.3" -"@ant-design/pro-list@2.5.61": - version "2.5.61" - resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.61.tgz#60d68b032c95332862902954d9f590c8dd83d727" - integrity sha512-MwqTfWcos3XBPJlYNw/T1iVlU7HAT/PlAUDTVhdqwpjs6gKafFsg8fHdsj5MxVsk1Pjp5h8hCWIE0P13aMwfYg== +"@ant-design/pro-list@2.5.69": + version "2.5.69" + resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.69.tgz#e6c1eb20bdecc019e38f974a5b2b7df1557e2eb8" + integrity sha512-jd5slgWw9hV/f1XhFjuHfsdS9fh81lTRhBzJDlgFqZaFNKo++S2c8wX5FbpNzYCu+XIfVTVt8EXvz8j4lPiG0g== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-card" "2.8.4" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-table" "3.16.1" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-card" "2.8.8" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-table" "3.17.2" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" classnames "^2.3.2" dayjs "^1.11.10" rc-resize-observer "^1.0.0" rc-util "^4.19.0" -"@ant-design/pro-provider@2.14.7": - version "2.14.7" - resolved "https://registry.yarnpkg.com/@ant-design/pro-provider/-/pro-provider-2.14.7.tgz#911dac05cd9c501ddb0800fd0141c29102a9c100" - integrity sha512-yEAOph/fTzIhOWMtYAbcsjffyYq8tL6IgMQqRlYZmIisVMRDZZ32F+Ab18a4S18foZiDChEr0e6NZuuY7du5rA== - dependencies: - "@ant-design/cssinjs" "^1.11.1" - "@babel/runtime" "^7.18.0" - "@ctrl/tinycolor" "^3.4.0" - rc-util "^5.0.1" - swr "^2.0.0" - "@ant-design/pro-provider@2.14.9": version "2.14.9" resolved "https://registry.yarnpkg.com/@ant-design/pro-provider/-/pro-provider-2.14.9.tgz#ca9c764a4eeda5ceacdd9cca817ce2764644db3a" @@ -248,17 +225,17 @@ dependencies: "@babel/runtime" "^7.18.0" -"@ant-design/pro-table@3.16.1": - version "3.16.1" - resolved "https://registry.yarnpkg.com/@ant-design/pro-table/-/pro-table-3.16.1.tgz#e48e6dc811afd8ac7e1be7509fa60ad2da5a1295" - integrity sha512-c67xsUMIzlGnHYSVjOCkhPlBlt21zoZxa7+p4A087cyjfkQwFR5Qc+xj8L9t0GCqdRz+7J2A9s3s8SSJAwqCEA== +"@ant-design/pro-table@3.17.2": + version "3.17.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-table/-/pro-table-3.17.2.tgz#93b4c0eb39eaa15214a3deda696fa290207b6615" + integrity sha512-nEwhlx93MgKjXD5PsXQqnB4bQHKe7dTTzwUiYrBCb0Y5So2ra4cBcjobQHS+q1IgIP9DJQQoruRp/AYplCtwHw== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-card" "2.8.4" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-form" "2.28.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-card" "2.8.8" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-form" "2.30.2" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" "@dnd-kit/core" "^6.0.8" "@dnd-kit/modifiers" "^6.0.1" @@ -266,26 +243,11 @@ "@dnd-kit/utilities" "^3.2.1" classnames "^2.3.2" dayjs "^1.11.10" - lodash.merge "^4.6.2" + lodash-es "^4.17.21" omit.js "^2.0.2" rc-resize-observer "^1.0.0" rc-util "^5.0.1" -"@ant-design/pro-utils@2.15.14": - version "2.15.14" - resolved "https://registry.yarnpkg.com/@ant-design/pro-utils/-/pro-utils-2.15.14.tgz#852c3727aa0c0058924fd539cc375022901c1cea" - integrity sha512-h/GdYDN19dTnyWvbfoEF5DyeTwkB+iRUXlhQ1O1NMkD2eOUpKTjVKF8J+Kekb7Bp7Fkf1dBVktVrcY8sioTkrw== - dependencies: - "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.7" - "@babel/runtime" "^7.18.0" - classnames "^2.3.2" - dayjs "^1.11.10" - lodash.merge "^4.6.2" - rc-util "^5.0.6" - safe-stable-stringify "^2.4.3" - swr "^2.0.0" - "@ant-design/pro-utils@2.15.18": version "2.15.18" resolved "https://registry.yarnpkg.com/@ant-design/pro-utils/-/pro-utils-2.15.18.tgz#9bb67927900ddc47dcd354a032483bac243e6c0c" @@ -555,7 +517,14 @@ gl-matrix "^3.3.0" tslib "^2.3.1" -"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7": +"@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.24.8": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/runtime@^7.10.4", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.20.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e" integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA== @@ -865,7 +834,7 @@ dependencies: call-bind "^1.0.7" -"@microsoft/signalr@^8.0.0": +"@microsoft/signalr@^8.0.7": version "8.0.7" resolved "https://registry.yarnpkg.com/@microsoft/signalr/-/signalr-8.0.7.tgz#94419ddbf9418753e493f4ae4c13990316ec2ea5" integrity sha512-PHcdMv8v5hJlBkRHAuKG5trGViQEkPYee36LnJQx4xHOQ5LL4X0nEWIxOp5cCtZ7tu+30quz5V3k0b1YNuc6lw== @@ -2158,7 +2127,12 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -dayjs@^1.11.10, dayjs@^1.11.11: +dayjs@^1.11.10: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +dayjs@^1.11.11: version "1.11.11" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== @@ -3652,11 +3626,6 @@ lodash.merge@^4.6.0, lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.tonumber@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz#0b96b31b35672793eb7f5a63ee791f1b9e9025d9" - integrity sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA== - lodash@^4.0.1, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -4004,10 +3973,10 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" - integrity sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w== +path-to-regexp@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.0.0.tgz#92076ec6b2eaf08be7c3233484142c05e8866cf5" + integrity sha512-GAWaqWlTjYK/7SVpIUA6CTxmcg65SP30sbjdCvyYReosRkk7Z/LyHWwkK3Vu0FcIi0FNTADUs4eh1AsU5s10cg== path-type@^4.0.0: version "4.0.0" @@ -4866,9 +4835,9 @@ safe-regex-test@^1.0.3: is-regex "^1.1.4" safe-stable-stringify@^2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" @@ -5144,10 +5113,10 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -stylis@^4.0.13: - version "4.3.2" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.2.tgz#8f76b70777dd53eb669c6f58c997bf0a9972e444" - integrity sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg== +stylis@^4.0.13, stylis@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.4.tgz#ca5c6c4a35c4784e4e93a2a24dc4e9fa075250a4" + integrity sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now== sucrase@^3.32.0: version "3.35.0" @@ -5346,7 +5315,12 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.3, tslib@^2.6.2: +tslib@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.3, tslib@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== From f930b87e95bc266370f3ce40f3b1d8c8e19fc8a0 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Mon, 7 Oct 2024 16:15:36 +0700 Subject: [PATCH 042/118] baotai account info --- src/pages/account/index.tsx | 26 ++++++++++---------------- src/store/useAccountStore.ts | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index 7a47b76..2d67753 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -15,21 +15,14 @@ const Account = () => { const { t } = useTranslation(); const [isAddAccountVisible, setIsAddAccountVisible] = React.useState(false); - const { MT4Accounts, fetchMT4Accounts } = useAccountStore(state => state); + const { MT4Accounts, me, fetchMT4Accounts, fetchMe } = useAccountStore(state => state); React.useEffect(() => { fetchMT4Accounts(); + fetchMe(); }, []) - const PTAccount = [ - { - id: '1', - account: 'email@qq.com', - accountType: `${t('report.寶泰帳戶')}`, - icon: logo, - balance: '$ 0.00', - }, - ]; + const platformMenu = ( @@ -71,21 +64,22 @@ const Account = () => { return (
    + ( - ]}> + ]}> } - title={item.account} - description={item.accountType} + title={item?.email} + description={item?.phoneNumber} /> -
    結餘 {item.balance}
    +
    結餘 ${item?.wallet.balance}
    )} /> diff --git a/src/store/useAccountStore.ts b/src/store/useAccountStore.ts index 7c9c090..6ff8f5d 100644 --- a/src/store/useAccountStore.ts +++ b/src/store/useAccountStore.ts @@ -56,18 +56,40 @@ interface OrderHistory { amount: string; date: string; } +interface Wallet { + id: number; + balance: number; + lockedBalance: number; +} +interface Me { + id: string; + number: number; + userName: string; + email: string; + phoneNumber: string; + countryCode: string; + countryCallingCode: number; + level: number; + myInvitationCode: string; + myInviter: string | null; + mySales: string | null; + platformNumber: number; + platformName: string; + wallet: Wallet; + roles: string[]; +} // Define the store options with the new additions interface AccountStoreOptions { MT4Accounts: Account[]; MT5Accounts: Account[]; balances: Balance[]; // New field for storing balances orderHistories: OrderHistory[]; // New field for storing order histories - + me: Me | null; setMT4Accounts: (accounts: Account[]) => void; setBalances: (balances: Balance[]) => void; setOrderHistories: (orderHistories: OrderHistory[]) => void; - + fetchMe: () => Promise; fetchMT4Accounts: () => Promise; } @@ -77,13 +99,16 @@ const useAccountStore = create((set) => ({ MT5Accounts: [], balances: [], // Initialize empty balances orderHistories: [], // Initialize empty order histories + me: null, fetchMT4Accounts: async () => { const { items: accounts } = await api.get("/v1.0/client/my/mt4/account?PageNumber=1&PageSize=50").then(res => res.data); - - - console.log(accounts) set(() => ({ MT4Accounts: accounts })); }, + fetchMe: async () => { + const me = await api.get("/v1.0/client/me").then(res => res.data); + console.log(me) + set(() => ({ me })); + }, // Method to set MT4 accounts setMT4Accounts: (accounts) => { set(() => ({ MT4Accounts: accounts })); From 127fa700d462a71e6a12d66b29bb6ce3b657082c Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 8 Oct 2024 11:20:25 +0700 Subject: [PATCH 043/118] check1 --- package.json | 1 + src/I18n/TranslationTypes/components/auth.ts | 47 +- src/I18n/ch/components/auth.ts | 52 +-- src/I18n/en/components/auth.ts | 46 +- src/I18n/vi/components/auth.ts | 45 +- src/components/ProtectBanner.tsx | 3 + src/main.tsx | 2 +- src/pages/AppRouter.tsx | 11 +- src/pages/AuthLayout/AuthLayout.tsx | 11 +- src/pages/PublicLayout/PublicLayout.tsx | 8 +- src/pages/login/LoginPage.tsx | 66 ++- src/pages/login/RegisterPage.tsx | 111 +++-- src/pages/login/components/GetPassword.tsx | 74 +++- .../login/components/ResendMailSignUp.tsx | 83 ++++ src/pages/login/components/VeritifyMail.tsx | 20 +- src/pages/property/Deposit.tsx | 28 +- .../components/SafetyVerification.tsx | 2 +- .../user/components/KycIdentityModal.tsx | 417 +++++++++++++----- src/pages/user/index.tsx | 7 +- src/redux/slice/adminSlice.ts | 33 +- src/services/adminServ.ts | 7 +- src/services/authServ.ts | 2 +- src/services/configServ.ts | 14 +- src/services/getPassServ.ts | 3 + yarn.lock | 63 ++- 25 files changed, 781 insertions(+), 375 deletions(-) create mode 100644 src/pages/login/components/ResendMailSignUp.tsx diff --git a/package.json b/package.json index 961d9cb..5997de6 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "react-responsive": "^10.0.0", "react-router-dom": "^6.23.0", "react-to-print": "^2.15.1", + "tesseract.js": "^5.1.1", "yup": "^1.4.0", "zustand": "^4.5.2" }, diff --git a/src/I18n/TranslationTypes/components/auth.ts b/src/I18n/TranslationTypes/components/auth.ts index 57f7bf7..0fc52cb 100644 --- a/src/I18n/TranslationTypes/components/auth.ts +++ b/src/I18n/TranslationTypes/components/auth.ts @@ -1,38 +1,11 @@ export type auth = { - 登入: String, - 登出: String, - 註冊: String, - 歡迎登入: String, - 請確認您正在訪問: String, - 忘記密碼僅能以原註冊電話查詢: String, - 請輸入原註冊電話號碼進行手機簡訊驗證: String, - 國碼: String, - 手機: String, - 密碼: String, - 驗證碼: String, - 送出: String, - 確認密碼: String, - 設定密碼: String, - 是否滿20歲: String, - 隱私權條款: String, - 驗證成功: String, - 已發送驗證碼: String, - 註冊成功: String, - 忘記密碼: String, - 此手機尚未註冊: String, - 請輸入新密碼: String, - 重設密碼: String, - 電子信箱: String, - 記住我: String, - 還沒有帳戶前往: String, - 姓名: String, - 用戶名稱: String, - 電話號碼: String, - 我已閱讀並同意: String, - 下一步: String, - 已有帳戶前往: String, - 驗證電子信箱: String, - 重發驗證碼: String, - 嘗試多次仍無法收到驗證碼: String, - }; - \ No newline at end of file + loginTitle: String; + SuggestCreateAcc: String; + forgotPasswordAtLogin: String; + passwordAtLogin: String; + loginButton: String; + emailAtLogin: String; + rememberAtLogin: String; + noAccountYetAtLogin: String; + logOutAtHeader: String; +}; diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index e90e5c9..8ad56b6 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -1,40 +1,16 @@ const auth = { - 登入: '登入', - 登出: '登出', - 註冊: '註冊', - 歡迎登入: '歡迎登入', - 請確認您正在訪問: '請確認您正在訪問 k100u.com', - 忘記密碼僅能以原註冊電話查詢: '忘記密碼僅能以原註冊電話查詢...', - 請輸入原註冊電話號碼進行手機簡訊驗證: '請輸入原註冊電話號碼,進行手機簡訊驗證', - 國碼: '國碼', - 手機: '手機', - 密碼: '密碼', - 驗證碼: '驗證碼', - 送出: '發送', - 確認密碼: '確認密碼', - 設定密碼: '設定密碼', - 是否滿20歲: '是否滿20歲', - 隱私權條款: '隱私權條款', - 驗證成功: '驗證成功', - 已發送驗證碼: '已發送驗證碼至', - 註冊成功: '註冊成功', - 忘記密碼: '忘記密碼', - 此手機尚未註冊: '此手機尚未註冊', - 請輸入新密碼: '請輸入新密碼', - 重設密碼: '重設密碼', - 電子信箱: '電子信箱', - 記住我: '記住我', - 還沒有帳戶前往: '還沒有帳戶? 前往', - 姓名: '姓名', - 用戶名稱: '用戶名稱', - 電話號碼: '電話號碼', - 我已閱讀並同意: '我已閱讀並同意', - 下一步: '下一步', - 已有帳戶前往: '已有帳戶? 前往', - 驗證電子信箱: '驗證電子信箱', - 重發驗證碼: '重發驗證碼', - 嘗試多次仍無法收到驗證碼: '嘗試多次仍無法收到驗證碼', - }; + //loginPage: + loginTitle: '登入', + SuggestCreateAcc: '註冊', + forgotPasswordAtLogin: '忘記密碼', + passwordAtLogin: '密碼', + loginButton: '發送', + emailAtLogin: '電子信箱', + rememberAtLogin: '記住我', + noAccountYetAtLogin: '還沒有帳戶? 前往', + //header handle logout and user_infor + logOutAtHeader: '登出', - export default auth; - \ No newline at end of file +}; + +export default auth; diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index 5ba51a8..d88f9be 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -1,39 +1,15 @@ const auth = { - 登入: 'Login', - 登出: 'Logout', - 註冊: 'Register', - 歡迎登入: 'Welcome to Login', - 請確認您正在訪問: 'Please confirm you are visiting k100u.com', - 忘記密碼僅能以原註冊電話查詢: 'Forgot password can only be queried by original registered phone...', - 請輸入原註冊電話號碼進行手機簡訊驗證: 'Please enter the original registered phone number for SMS verification', - 國碼: 'Country Code', - 手機: 'Phone', - 密碼: 'Password', - 驗證碼: 'Verification Code', - 送出: 'Send', - 確認密碼: 'Confirm Password', - 設定密碼: 'Set Password', - 是否滿20歲: 'Are you over 20 years old', - 隱私權條款: 'Privacy Policy', - 驗證成功: 'Verification Successful', - 已發送驗證碼: 'Verification code sent to', - 註冊成功: 'Registration Successful', - 忘記密碼: 'Forgot Password', - 此手機尚未註冊: 'This phone number is not registered', - 請輸入新密碼: 'Please enter a new password', - 重設密碼: 'Reset Password', - 電子信箱: 'Email', - 記住我: 'Remember Me', - 還沒有帳戶前往: 'Don\'t have an account? Go to', - 姓名: 'Name', - 用戶名稱: 'Username', - 電話號碼: 'Phone Number', - 我已閱讀並同意: 'I have read and agree to', - 下一步: 'Next', - 已有帳戶前往: 'Already have an account? Go to', - 驗證電子信箱: 'Verify Email', - 重發驗證碼: 'Resend Verification Code', - 嘗試多次仍無法收到驗證碼: 'Unable to receive verification code after multiple attempts', + //loginPage: + loginTitle: 'Login', + SuggestCreateAcc: 'Register', + forgotPasswordAtLogin: 'Forgot your password', + passwordAtLogin: 'Password', + loginButton: 'Send', + emailAtLogin: 'Email', + rememberAtLogin: 'Remember Me', + noAccountYetAtLogin: "Don't have an account? Go to", + //header handle logout and user_infor + logOutAtHeader: 'LogOut', }; export default auth; diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts index f248406..9b09c34 100644 --- a/src/I18n/vi/components/auth.ts +++ b/src/I18n/vi/components/auth.ts @@ -1,39 +1,16 @@ const auth = { - 登入: 'Đăng nhập', - 登出: 'Đăng xuất', - 註冊: 'Đăng ký', + //loginPage: + loginTitle: 'Đăng nhập', + SuggestCreateAcc: 'Đăng ký', + forgotPasswordAtLogin: 'Quên mật khẩu', 歡迎登入: 'Chào mừng đăng nhập', - 請確認您正在訪問: 'Vui lòng xác nhận bạn đang truy cập vào k100u.com', - 忘記密碼僅能以原註冊電話查詢: 'Nếu quên mật khẩu bạn chỉ có thể kiểm tra bằng số điện thoại đã đăng ký ban đầu…', - 請輸入原註冊電話號碼進行手機簡訊驗證: 'Vui lòng nhập số điện thoại đăng ký ban đầu để xác minh qua SMS', - 國碼: 'Mã quốc gia', - 手機: 'Số điện thoại', - 密碼: 'Mật khẩu', - 驗證碼: 'Mã xác minh', - 送出: 'Gửi', - 確認密碼: 'Kiểm tra mật khẩu', - 設定密碼: 'Cài đặt mật khẩu', - 是否滿20歲: 'Đủ 20 tuổi hay không?', - 隱私權條款: 'Chính sách bảo mật', - 驗證成功: 'Xác minh thành công', - 已發送驗證碼: 'Đã gửi mã phát minh', - 註冊成功: 'Đăng ký thành công', - 忘記密碼: 'Quên mật khẩu', - 此手機尚未註冊: 'Số điện thoại này chưa đăng ký', - 請輸入新密碼: 'Vui lòng nhập mật khẩu mới', - 重設密碼: 'Đặt lại mật khẩu', - 電子信箱: 'Email', - 記住我: 'Ghi nhớ', - 還沒有帳戶前往: 'Chưa có tài khoản? Đi tới ', - 姓名: 'Họ tên', - 用戶名稱: 'Tên người dùng', - 電話號碼: 'Số điện thoại', - 我已閱讀並同意: 'Tôi đã đọc và đồng ý', - 下一步: 'Tiếp tục', - 已有帳戶前往: 'Đã có tài khoản? Đi tới ', - 驗證電子信箱: 'Xác minh email', - 重發驗證碼: 'Gửi lại mã xác minh', - 嘗試多次仍無法收到驗證碼: 'Vẫn không nhận được mã xác minh dù đã thử nhiều lần', + passwordAtLogin: 'Mật khẩu', + loginButton: 'Đăng nhập', + emailAtLogin: 'Email', + rememberAtLogin: 'Ghi nhớ tôi', + noAccountYetAtLogin: 'Chưa có tài khoản? Đi tới ', + //header handle logout and user_infor + logOutAtHeader: 'Đăng xuất', }; export default auth; diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 327f220..3d6f313 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -367,6 +367,9 @@ const ProtectBanner: React.FunctionComponent = () => { setOpenKYCModal(false)} + onFinish={() => { + console.log('ok'); + }} /> { const queryClient = new QueryClient(); const { isDark } = useThemeStore(); diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 61bfcfc..7c47ec6 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -1,12 +1,12 @@ -import { lazy } from 'react'; -import { BrowserRouter, HashRouter, Navigate, Route, Routes } from 'react-router-dom'; +// import { lazy } from 'react'; +import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom'; import VeritifyMail from './login/components/VeritifyMail'; import ResetPasswordForm from './login/components/SetPassword'; import GetPassword from './login/components/GetPassword'; import { useSelector } from 'react-redux'; import { signedUr } from '@/redux/slice/adminSlice'; -import Account from './account/index' +import Account from './account/index'; import PublicLayout from './PublicLayout'; import AuthLayout from './AuthLayout'; import Home from './Home'; @@ -18,6 +18,7 @@ import RegisterPage from './login/RegisterPage'; import InvestmentMarket from '../components/InvestmentMarket/InvestmentMarket'; import MyFocus from './HotInvestMents/MyFocus'; import CurrencyDetails from './currencydetails/CurrencyDetails'; +import ResendMailSignUp from './login/components/ResendMailSignUp'; // const Account = lazy(() => import('./account/index')); // const PublicLayout = lazy(() => import('./PublicLayout')); // const AuthLayout = lazy(() => import('./AuthLayout')); @@ -103,6 +104,10 @@ const AppRouter = () => { path='get-password' element={} /> + } + /> {/* capture */} diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 1ace88a..79ae74a 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -25,9 +25,9 @@ const contentStyle: React.CSSProperties = { lineHeight: '120px', }; -const footerStyle: React.CSSProperties = { - height: '656px', -}; +// const footerStyle: React.CSSProperties = { +// height: '656px', +// }; const layoutStyle: React.CSSProperties = { overflow: 'hidden', @@ -114,7 +114,10 @@ const AuthLayout = () => { checkedChildren={} // Hiện biểu tượng mặt trời khi ở chế độ sáng unCheckedChildren={} // Hiện biểu tượng mặt trăng khi ở chế độ tối /> - + {}} + /> diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 9954f85..e5bb545 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -36,7 +36,7 @@ import { useDispatch } from 'react-redux'; import { logoutUser } from '@/redux/slice/adminSlice'; import { useNavigate } from 'react-router-dom'; -interface IPublicLayoutProps { } +interface IPublicLayoutProps {} const FooterRender = () => ( = () => { name: (
    setIsAddAccountVisible(true)} - onKeyDown={() => { }} + onKeyDown={() => {}} role='button' tabIndex={0} > @@ -375,7 +375,7 @@ const PublicLayout: React.FunctionComponent = () => { { key: '登出', icon: , - label: '登出', + label: t('auth.logOutAtHeader'), onClick: handleLogout, // Thêm hàm handleLogout ở đây }, ], @@ -406,7 +406,7 @@ const PublicLayout: React.FunctionComponent = () => { { key: '登出', icon: , - label: '登出', + label: t('auth.logOutAtHeader'), onClick: handleLogout, // Thêm hàm handleLogout ở đây }, ], diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index ea2dbeb..8291a90 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -60,7 +60,7 @@ const LoginPage: React.FunctionComponent = () => { type: 'success', content: 'Login successfully', }); - saveLocalStore(response.data, 'user'); + saveLocalStore(response.data, 'user_infor'); if (response.data.token) { localStorage.setItem('token', response.data.token); } @@ -89,7 +89,7 @@ const LoginPage: React.FunctionComponent = () => { alignItems: 'center', }} > - {t('auth.登入')} + {t('auth.loginTitle')} = () => { >
    - +
    = () => {
    - +
    = () => { setRemember(e.target.checked); }} > - {t('auth.記住我')} + {t('auth.rememberAtLogin')}
    @@ -152,20 +152,60 @@ const LoginPage: React.FunctionComponent = () => { style={{ width: '100%' }} htmlType='submit' > - {t('auth.送出')} + {t('auth.loginButton')}
    )}
    - - {t('auth.還沒有帳戶前往')} - {t('auth.註冊')} - - - 忘記密碼 - +
    + + {t('auth.noAccountYetAtLogin')} + e.preventDefault()} // Ngăn chặn hành vi mặc định + onClick={(e) => { + e.preventDefault(); // Ngăn chặn hành vi mặc định + navigate('/auth/registerPage'); // Thực hiện điều hướng + }} + > + {t('auth.SuggestCreateAcc')} + + +
    +
    + + e.preventDefault()} // Ngăn chặn hành vi mặc định + onClick={(e) => { + e.preventDefault(); // Ngăn chặn hành vi mặc định + navigate('/auth/get-password'); + }} + > + {t('auth.forgotPasswordAtLogin')} + + +
    +
    +
    +

    + 還沒收到信嗎? + e.preventDefault()} + onClick={(e) => { + e.preventDefault(); + navigate('/auth/resend-email-register'); + }} + > + 重發 + +

    diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index de4ab81..c50f60b 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -5,6 +5,7 @@ import { Formik, Field, Form as FormikForm, ErrorMessage } from 'formik'; import * as Yup from 'yup'; import { authServ } from '@/services/authServ'; import { useNavigate } from 'react-router-dom'; +import { AxiosError } from 'axios'; interface FormValues { userName: string; @@ -17,10 +18,15 @@ interface FormValues { invitationCode?: string; } +interface ErrorResponse { + errors?: Record; + title?: string; +} + const { Title } = Typography; const { Option } = Select; -const RegisterPage = () => { +const RegisterPage: React.FC = () => { const [currentStep, setCurrentStep] = useState<'register' | 'setPassword'>('register'); const [userData, setUserData] = useState(null); const okDaRegis = useNavigate(); @@ -45,16 +51,39 @@ const RegisterPage = () => { const validationSchemaSetPassword = Yup.object().shape({ password: Yup.string() - .required( - "請輸入密碼。密碼必須至少八個字符。密碼必須包含至少一大寫字母('A'-'Z')。密碼必須包含至少一大寫字母('A'-'Z')", - ) + .required('請輸入密碼') .min(8, '密碼必須至少八個字符') - .matches(/[a-z]/, "密碼必須包含至少一大寫字母('A'-'Z')") - .matches(/[A-Z]/, "密碼必須包含至少一大寫字母('A'-'Z')"), + .test('has-lowercase', '密碼必須包含至少一個小寫字母 (a-z)', (value) => { + return /[a-z]/.test(value || ''); + }) + .test('has-uppercase', '密碼必須包含至少一個大寫字母 (A-Z)', (value) => { + return /[A-Z]/.test(value || ''); + }) + .test('has-number', '密碼必須包含至少一個數字', (value) => { + return /\d/.test(value || ''); + }) + .test('all-required', '密碼必須至少八個字元,並包含一個大寫字母、一個小寫字母和一個數字', function (value) { + const { createError } = this; + if (!value) { + return createError({ path: 'password', message: '請輸入密碼' }); + } + if (value.length < 8) { + return createError({ path: 'password', message: '密碼必須至少八個字符' }); + } + if (!/[a-z]/.test(value)) { + return createError({ path: 'password', message: '密碼必須包含至少 một ký tự chữ thường (a-z)' }); + } + if (!/[A-Z]/.test(value)) { + return createError({ path: 'password', message: '密碼必須包含至少 một ký tự chữ hoa (A-Z)' }); + } + if (!/\d/.test(value)) { + return createError({ path: 'password', message: '密碼必須包含至少 một số' }); + } + return true; + }), confirmPassword: Yup.string() - .nullable() - .oneOf([Yup.ref('password'), null], '兩次輸入的密碼不一致') - .required('請確認密碼'), + .required('請確認密碼') + .oneOf([Yup.ref('password')], '兩次輸入的密碼不一致'), }); const handleNextStep = (values: FormValues) => { @@ -73,7 +102,7 @@ const RegisterPage = () => { password: values.password, userName: userData.userName, countryCode: userData.countryCode, - countryCallingCode: countryCodeObj?.callingCode, + countryCallingCode: Number(countryCodeObj?.callingCode), phoneNumber: userData.userPhone, ...(userData.invitationCode && { invitationCode: userData.invitationCode }), }; @@ -85,21 +114,26 @@ const RegisterPage = () => { okDaRegis('/auth/loginPage'); }, 1500); } catch (error) { - if (error.response && error.response.data && error.response.data.errors) { - const errorMessages = error.response.data.errors; - let messageToDisplay = ''; + const axiosError = error as AxiosError; - for (const [field, messages] of Object.entries(errorMessages)) { - const formattedMessages = messages.join(', '); - messageToDisplay += `${field}: ${formattedMessages}\n`; - } + if (axiosError.response && axiosError.response.data) { + const { errors, title } = axiosError.response.data; - message.error(messageToDisplay); + if (errors) { + let messageToDisplay = ''; + for (const [field, messages] of Object.entries(errors)) { + const formattedMessages = messages.join(', '); + messageToDisplay += `${field}: ${formattedMessages}\n`; + } + message.error(messageToDisplay); + } else if (title) { + message.error(title); + } else { + message.error('Đã xảy ra lỗi không xác định.'); + } } else { - message.error('Đã xảy ra lỗi. Vui lòng thử lại.'); + message.error('Đã xảy ra lỗi không xác định.'); } - console.error('registration error', error); - setCurrentStep('register'); } }; @@ -121,7 +155,7 @@ const RegisterPage = () => { validationSchema={validationSchemaRegister} onSubmit={handleNextStep} > - {({ values }) => ( + {({}) => ( @@ -212,7 +246,7 @@ const RegisterPage = () => { className='text-start text-xs text-red-500 mt-1' /> - + { +
    +

    + 還沒收到信嗎? + e.preventDefault()} // Ngăn chặn hành vi mặc định + onClick={(e) => { + e.preventDefault(); // Ngăn chặn hành vi mặc định + okDaRegis('/auth/loginPage'); + }} + > + 重發 + +

    +
    + +
    +
    ); diff --git a/src/pages/login/components/ResendMailSignUp.tsx b/src/pages/login/components/ResendMailSignUp.tsx new file mode 100644 index 0000000..8a85639 --- /dev/null +++ b/src/pages/login/components/ResendMailSignUp.tsx @@ -0,0 +1,83 @@ +import React from 'react'; +import { Formik, Form, Field, ErrorMessage } from 'formik'; +import * as Yup from 'yup'; +import { message } from 'antd'; +import { getPassServ } from '@/services/getPassServ'; // Import service +import { useThemeStore } from '@/store'; // Import useThemeStore + +interface ResendMailSignUpFormValues { + email: string; +} + +const ResendMailSignUp: React.FC = () => { + const { isDark } = useThemeStore(); // Lấy trạng thái theme + + const initialValues: ResendMailSignUpFormValues = { + email: '', + }; + + const validationSchema = Yup.object({ + email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), + }); + + const handleSubmit = async (values: ResendMailSignUpFormValues) => { + try { + const response = await getPassServ.resendEmail(values.email); // Sử dụng service + message.success(`${response.data.message}Please check your email`); + console.log('Response:', response.data); + } catch (error) { + console.error('Error sending email:', error); + } + }; + + return ( + <> +
    +

    查收郵件

    + + {() => ( +
    +
    + + + +
    + +
    +
    +
    + )} +
    +
    + + ); +}; + +export default ResendMailSignUp; diff --git a/src/pages/login/components/VeritifyMail.tsx b/src/pages/login/components/VeritifyMail.tsx index 859488d..786c686 100644 --- a/src/pages/login/components/VeritifyMail.tsx +++ b/src/pages/login/components/VeritifyMail.tsx @@ -31,16 +31,24 @@ const VerifyMail: React.FC = () => { try { const response = await authServ.confirmEmailServ({ userId, token }); - // Giả sử API trả về thông tin người dùng - // const userData = response.data.user; - // dispatch(saveUserAfterConfirm(userData)); - message.success('Email verification successful. Please log in to continue.'); console.log(response.data); nextSteps('/auth/loginPage'); } catch (error) { - message.error(error.response.data.title); - console.error(error); + // Kiểm tra nếu error có cấu trúc mà bạn cần + if (error instanceof Error) { + message.error('An unexpected error occurred'); + console.error(error); + } else { + // Giả định rằng error có dạng AxiosError nếu bạn sử dụng Axios + const axiosError = error as { response?: { data: { title?: string } } }; + if (axiosError.response) { + message.error(axiosError.response.data.title || 'An error occurred'); + } else { + message.error('An unexpected error occurred'); + } + console.error(error); + } } }; diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index fa1e3b0..f7ed160 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -1,4 +1,4 @@ -import { Button, Form, Input, InputNumber, Space, message } from 'antd'; +import { Button, Form, InputNumber, Space, message } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import DepositUsdtTrc20 from './components/DepositUsdtTrc20'; @@ -6,6 +6,7 @@ import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import PayChannel from './components/PayChannel'; import { api } from '@/services/configServ'; +import { AxiosError } from 'axios'; // Import AxiosError nếu bạn dùng Axios interface IDepositProps {} @@ -19,6 +20,7 @@ const Deposit: React.FunctionComponent = (props) => { const onReset = () => { form.resetFields(); }; + const checkVerify = async () => { try { const response = await api.get('/v1.0/kyc/my'); @@ -29,15 +31,12 @@ const Deposit: React.FunctionComponent = (props) => { console.log(status); const checkMoney = form.getFieldValue('我要存入'); // Lấy giá trị số từ InputNumber - // Nếu checkMoney <= 2000, thì setOpenDepositUsdtTrc20 là true if (checkMoney <= 2000) { setOpenDepositUsdtTrc20(true); - return; // Dừng lại vì đã thực hiện điều kiện này + return; } - // Kiểm tra điều kiện với status và giá trị deposit if ([1, 2, 4, 5].includes(status)) { - // Ngăn chặn DepositUsdtTrc20 và hiển thị thông báo setOpenDepositUsdtTrc20(false); if (status === 1) { @@ -50,10 +49,9 @@ const Deposit: React.FunctionComponent = (props) => { message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); } - return; // Dừng lại và không thực hiện DepositUsdtTrc20 + return; } - // Nếu status = 3 thì cho phép DepositUsdtTrc20 hoạt động bình thường if (status === 3) { setOpenDepositUsdtTrc20(true); } @@ -63,15 +61,17 @@ const Deposit: React.FunctionComponent = (props) => { console.log(`Unexpected response status: ${response.status}`); } } catch (error) { - if (error.response) { - // Server responded with a status other than 2xx - console.log(`Error: ${error.response.status} - ${error.response.data.message}`); - } else if (error.request) { - // Request was made but no response received + const axiosError = error as AxiosError; + + if (axiosError.response) { + // Ép kiểu cho axiosError.response.data để có thể truy cập thuộc tính message + const responseData = axiosError.response.data as { message: string }; + + console.log(`Error: ${axiosError.response.status} - ${responseData.message}`); + } else if (axiosError.request) { console.log('Error: No response received from the server'); } else { - // Something else caused the error - console.log('Error:', error.message); + console.log('Error:', axiosError.message); } } }; diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index 7b5ebfa..c17851c 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -148,7 +148,7 @@ const SafetyVerification: React.FunctionComponent = ({ className='tight' level={3} > - {t('auth.驗證電子信箱')} + 驗證電子信箱 已發送驗證碼至您的電子信箱
    diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 5383f04..48a1d9d 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -1,29 +1,31 @@ import { IdcardOutlined } from '@ant-design/icons'; +import { Form } from 'antd'; import { CheckCard, ProForm, + ProFormCheckbox, ProFormDatePicker, ProFormText, ProFormUploadButton, StepsForm, } from '@ant-design/pro-components'; -import { Button, Checkbox, Col, Modal, Row, Select, Typography, message } from 'antd'; +import { Col, Modal, Row, Select, Typography, message } from 'antd'; import { useTranslation } from 'react-i18next'; import * as React from 'react'; import { FaPassport } from 'react-icons/fa'; -import { GiKeyCard, GiVikingLonghouse } from 'react-icons/gi'; +import { GiKeyCard } from 'react-icons/gi'; import { RiUserLocationFill } from 'react-icons/ri'; import { useState } from 'react'; import KycIdentityResult from './KycIdentityResult'; -import axios from 'axios'; import { api } from '@/services/configServ'; -import { useDispatch, useSelector } from 'react-redux'; +import { useSelector } from 'react-redux'; import { RootState } from '@/redux/configStore'; +// import Tesseract from 'tesseract.js'; interface IKycIdentityModalProps { open: boolean; onCancel: () => void; - onFinish: () => void; + onFinish: (values: any) => void; } const KycIdentityModal: React.FunctionComponent = ({ open, onCancel, onFinish }) => { @@ -33,6 +35,12 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); const [countryCode, setCountryCode] = useState(null); const [countryCalling, setCountryCalling] = useState(null); + // const [names, setNames] = useState(''); + // const [address, setAddress] = useState(''); + // const [ids, setIds] = useState([]); + // handle state sameAdress + const [form] = Form.useForm(); // Tạo instance của form từ useForm + // State to hold the form data // const [formData, setFormData] = useState({ // fullName: userName || '', @@ -44,24 +52,32 @@ const KycIdentityModal: React.FunctionComponent = ({ ope // residentialAddress: '', // phoneNumber: '', // }); - + // const onCheckboxChange = (e: any) => { + // if (e.target.checked) { + // setResidentialAddress(idAddress); // Khi checkbox được chọn, cập nhật địa chỉ tạm trú bằng ID address + // form.setFieldsValue({ residentialAddress: idAddress }); // Cập nhật giá trị của form + // } else { + // setResidentialAddress(''); // Nếu bỏ chọn checkbox, xóa giá trị địa chỉ tạm trú + // form.setFieldsValue({ residentialAddress: '' }); + // } + // }; // const handleInputChange = (changedValues: any) => { // setFormData((prevData) => ({ // ...prevData, // ...changedValues, // })); // }; - React.useEffect(() => { - console.log(countryCalling); - console.log(countryCode); - }, [countryCalling, countryCode]); - const waitTime = (time: number = 100) => { - return new Promise((resolve) => { - setTimeout(() => { - resolve(true); - }, time); - }); - }; + // React.useEffect(() => { + // console.log(address); + // // console.log(countryCode); + // }, [address]); + // const waitTime = (time: number = 100) => { + // return new Promise((resolve) => { + // setTimeout(() => { + // resolve(true); + // }, time); + // }); + // }; const handleApiCall = async (kycData: any) => { try { @@ -69,35 +85,117 @@ const KycIdentityModal: React.FunctionComponent = ({ ope console.log('API Response:', response.data); message.success('KYC data submitted successfully!'); return true; // Indicate success - } catch (error) { + } catch (error: any) { console.error('Error submitting KYC data:', error); - message.error(error.response.data.errors.KycData); + if (error.response && error.response.data && error.response.data.errors) { + message.error(error.response.data.errors.KycData); + } else { + message.error('An unknown error occurred'); + } return false; // Indicate failure } }; - const handleUrField = async () => { - await waitTime(1000); // Giữ nguyên phần đợi 1 giây - - console.log(token); // Giữ nguyên phần log token + const waitTime = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + const uploadFile = async ( + file: File | Blob, // use normal file + imageType: string, + onSuccess?: (data: any) => void, + onError?: (error: Error | ProgressEvent | Error) => void, + ) => { + const formData = new FormData(); + formData.append('file', file); + formData.append('ImageType', imageType); try { - const response = await api.get('/v1.0/kyc/my'); - - console.log('API response:', response.data); - - const countryCode = response.data.countryCode; - setCountryCode(countryCode); - const countryCalling = response.data.countryCallingCode; - setCountryCalling(countryCalling); - - return true; + if (file instanceof Blob && 'name' in file) { + const response = await api.post('/v1.0/kyc/upload-image', formData); + message.success(`${file.name}上傳成功`); + onSuccess?.(response.data); + } else { + message.error('文件無效'); + } } catch (error) { - console.error('Error calling API:', error); - return false; // Trả về false nếu có lỗi để không cho phép tiếp tục + if (error instanceof Error) { + const fileName = file instanceof File ? file.name : '文件'; // get da file name when there is one + message.error(`${fileName} 上传失败,请重试`); + onError?.(error); + } else if (error instanceof ProgressEvent) { + // process ProgressEvent + onError?.(error); + } else { + message.error('文件錯誤'); + onError?.(new Error('文件錯誤')); + } } }; + // const handleUrField = async () => { + // await waitTime(1000); // Giữ nguyên phần đợi 1 giây + + // console.log(token); // Giữ nguyên phần log token + + // try { + // const response = await api.get('/v1.0/kyc/my'); + + // console.log('API response:', response.data); + + // const countryCode = response.data.countryCode; + // setCountryCode(countryCode); + // const countryCalling = response.data.countryCallingCode; + // setCountryCalling(countryCalling); + + // // console.log(values); + // return true; + // } catch (error) { + // console.error('Error calling API:', error); + // return false; // Trả về false nếu có lỗi để không cho phép tiếp tục + // } + // }; + + // const handleInforImg = async (file) => { + // // read da file and create URL + // const imgURL = URL.createObjectURL(file); + + // // use tesseract to check text's img + // try { + // const { + // data: { text }, + // } = await Tesseract.recognize(imgURL, 'eng', { + // logger: (info) => console.log(info), + // }); + + // console.log('Văn bản OCR:', text); + + // // Tiền xử lý văn bản + // const cleanedText = text.replace(/\n/g, ' ').trim(); // Loại bỏ các ký tự xuống dòng, làm sạch văn bản + + // // Trích xuất họ tên + // const nameRegex = /([A-Z][a-z]+(?:\s[A-Z][a-z]+)+)/g; + // const extractedNames = cleanedText.match(nameRegex) || []; // Nếu không tìm thấy, mặc định là mảng rỗng + // setNames(extractedNames); // Lưu vào state + + // // Trích xuất địa chỉ + // const addressRegex = /Place of residence:\s*(.+)/g; + // const addressMatches = addressRegex.exec(cleanedText); + // const extractedAddress = addressMatches ? addressMatches[1] : 'Không tìm thấy địa chỉ'; + // setAddress(extractedAddress); // Lưu vào state + + // // Trích xuất ID + // const idRegex = /\b(\d{8,})\b/g; + // const extractedIds = cleanedText.match(idRegex) || []; // Nếu không tìm thấy, mặc định là mảng rỗng + // setIds(extractedIds); // Lưu vào state + + // // Hiển thị kết quả + // console.log('名字', extractedNames.length > 0 ? extractedNames.join(', ') : 'Không tìm thấy họ tên'); + // console.log('地址:', extractedAddress); + // console.log('ID:', extractedIds.length > 0 ? extractedIds.join(', ') : 'Không tìm thấy ID'); + // } catch (error) { + // console.error('Có lỗi khi trích xuất văn bản:', error); + // message.error('Có lỗi khi trích xuất văn bản từ ảnh.'); + // } + // }; + return (
    = ({ ope try { const response = await api.post('/v1.0/kyc/review'); if (response.status === 200) { - onFinish(); + onFinish(values); message.success('完成提交'); } } catch (error: any) { @@ -145,6 +243,43 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { + // Kiểm tra values.primaryDocument + if (!values.primaryDocument) { + message.error('身分證是必須的'); + setTimeout(() => { + message.error('除了美國的區域碼,其他區域碼需選擇其中一種第二證件', 5); + }, 1000); + return false; // Trả về false nếu primaryDocument không tồn tại + } + + await waitTime(1000); // Giữ nguyên phần đợi 1 giây + + console.log(token); // Giữ nguyên phần log token + + try { + const response = await api.get('/v1.0/kyc/my'); + + console.log('API response:', response.data); + + const countryCode = response.data.countryCode; + setCountryCode(countryCode); + const countryCalling = response.data.countryCallingCode; + setCountryCalling(countryCalling); + + // Kiểm tra secondaryDocument nếu countryCode không phải là "US" + if (countryCode !== 'US' && !values.secondaryDocument) { + message.error('除了美國的區域碼,其他區域碼需選擇其中一種第二證件'); + return false; // Trả về false nếu secondaryDocument không tồn tại và countryCode không phải là "US" + } + + // console.log(values); + return true; // Trả về true nếu mọi thứ đều ổn + } catch (error) { + console.error('Error calling API:', error); + return false; // Trả về false nếu có lỗi để không cho phép tiếp tục + } + }} > = ({ ope > } /> @@ -187,7 +322,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { // message.success('所有图片已成功上传并保存'); // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) @@ -213,19 +348,28 @@ const KycIdentityModal: React.FunctionComponent = ({ ope fieldProps={{ listType: 'picture-card', customRequest: async ({ file, onSuccess, onError }) => { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'IDFront'); - - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); + // Check file type before calling uploadFile + if (typeof file === 'string') { + onError?.(new Error('文件類型無效')); + return; } + await uploadFile(file, 'IDFront', onSuccess, onError); }, + // customRequest: async ({ file, onSuccess, onError }) => { + // const formData = new FormData(); + // formData.append('file', file); + // formData.append('ImageType', 'IDFront'); + + // try { + // const response = await api.post('/v1.0/kyc/upload-image', formData); + // message.success(`${file.name} 上传成功`); + // onSuccess(response.data); + // // await handleInforImg(file); + // } catch (error) { + // message.error(`${file.name} 上传失败,请重试`); + // onError(error); + // } + // }, }} width='xl' /> @@ -239,19 +383,27 @@ const KycIdentityModal: React.FunctionComponent = ({ ope fieldProps={{ listType: 'picture-card', customRequest: async ({ file, onSuccess, onError }) => { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'IDBack'); - - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); + // Check file type before calling uploadFile + if (typeof file === 'string') { + onError?.(new Error('文件類型無效')); + return; } + await uploadFile(file, 'IDBack', onSuccess, onError); }, + // customRequest: async ({ file, onSuccess, onError }) => { + // const formData = new FormData(); + // formData.append('file', file); + // formData.append('ImageType', 'IDBack'); + + // try { + // const response = await api.post('/v1.0/kyc/upload-image', formData); + // message.success(`${file.name} 上传成功`); + // onSuccess(response.data); + // } catch (error) { + // message.error(`${file.name} 上传失败,请重试`); + // onError(error); + // } + // }, }} width='xl' /> @@ -270,19 +422,27 @@ const KycIdentityModal: React.FunctionComponent = ({ ope fieldProps={{ listType: 'picture-card', customRequest: async ({ file, onSuccess, onError }) => { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'SecondaryIDFront'); - - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); + // Check file type before calling uploadFile + if (typeof file === 'string') { + onError?.(new Error('文件類型無效')); + return; } + await uploadFile(file, 'SecondaryIDFront', onSuccess, onError); }, + // customRequest: async ({ file, onSuccess, onError }) => { + // const formData = new FormData(); + // formData.append('file', file); + // formData.append('ImageType', 'SecondaryIDFront'); + + // try { + // const response = await api.post('/v1.0/kyc/upload-image', formData); + // message.success(`${file.name} 上传成功`); + // onSuccess(response.data); + // } catch (error) { + // message.error(`${file.name} 上传失败,请重试`); + // onError(error); + // } + // }, }} width='xl' /> @@ -296,19 +456,27 @@ const KycIdentityModal: React.FunctionComponent = ({ ope fieldProps={{ listType: 'picture-card', customRequest: async ({ file, onSuccess, onError }) => { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'SecondaryIDBack'); - - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); + // Check file type before calling uploadFile + if (typeof file === 'string') { + onError?.(new Error('文件類型無效')); + return; } + await uploadFile(file, 'SecondaryIDBack', onSuccess, onError); }, + // customRequest: async ({ file, onSuccess, onError }) => { + // const formData = new FormData(); + // formData.append('file', file); + // formData.append('ImageType', 'SecondaryIDBack'); + + // try { + // const response = await api.post('/v1.0/kyc/upload-image', formData); + // message.success(`${file.name} 上传成功`); + // onSuccess(response.data); + // } catch (error) { + // message.error(`${file.name} 上传失败,请重试`); + // onError(error); + // } + // }, }} width='xl' /> @@ -327,19 +495,27 @@ const KycIdentityModal: React.FunctionComponent = ({ ope fieldProps={{ listType: 'picture-card', customRequest: async ({ file, onSuccess, onError }) => { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'SelfieWithID'); - - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); + // Check file type before calling uploadFile + if (typeof file === 'string') { + onError?.(new Error('文件類型無效')); + return; } + await uploadFile(file, 'SelfieWithID', onSuccess, onError); }, + // customRequest: async ({ file, onSuccess, onError }) => { + // const formData = new FormData(); + // formData.append('file', file); + // formData.append('ImageType', 'SelfieWithID'); + + // try { + // const response = await api.post('/v1.0/kyc/upload-image', formData); + // message.success(`${file.name} 上传成功`); + // onSuccess(response.data); + // } catch (error) { + // message.error(`${file.name} 上传失败,请重试`); + // onError(error); + // } + // }, }} width='xl' /> @@ -357,19 +533,27 @@ const KycIdentityModal: React.FunctionComponent = ({ ope fieldProps={{ listType: 'picture-card', customRequest: async ({ file, onSuccess, onError }) => { - const formData = new FormData(); - formData.append('file', file); - formData.append('ImageType', 'AddressProof'); - - try { - const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name} 上传成功`); - onSuccess(response.data); - } catch (error) { - message.error(`${file.name} 上传失败,请重试`); - onError(error); + // Check file type before calling uploadFile + if (typeof file === 'string') { + onError?.(new Error('文件類型無效')); + return; } + await uploadFile(file, 'AddressProof', onSuccess, onError); }, + // customRequest: async ({ file, onSuccess, onError }) => { + // const formData = new FormData(); + // formData.append('file', file); + // formData.append('ImageType', 'AddressProof'); + + // try { + // const response = await api.post('/v1.0/kyc/upload-image', formData); + // message.success(`${file.name} 上传成功`); + // onSuccess(response.data); + // } catch (error) { + // message.error(`${file.name} 上传失败,请重试`); + // onError(error); + // } + // }, }} width='xl' /> @@ -377,9 +561,9 @@ const KycIdentityModal: React.FunctionComponent = ({ ope - { // Collect data for the API call @@ -433,7 +617,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope <> @@ -451,6 +635,27 @@ const KycIdentityModal: React.FunctionComponent = ({ ope width='xl' rules={[{ required: true, message: '此项为必填项,请勿留空' }]} /> + + {/* Checkbox: Copy ID Address to Residential Address */} + { + const checked = e.target.checked; + if (checked) { + // Auto-fill residentialAddress with idAddress + form.setFieldsValue({ + residentialAddress: form.getFieldValue('idAddress'), + }); + } else { + // Clear residentialAddress when unchecked + form.setFieldsValue({ + residentialAddress: '', + }); + } + }} + /> + = (props) => { // const [invitationCode, setInvitationCode] = useState(null); // Lấy token từ Redux store - const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần + // const token = useSelector((state: RootState) => state.admin.user?.token); + // Cập nhật tên state nếu cần const handleChangeCountry = () => { console.log('Button clicked: changing country'); setOpenUpdateCountryForm(true); diff --git a/src/redux/slice/adminSlice.ts b/src/redux/slice/adminSlice.ts index 706e7ed..234cc54 100644 --- a/src/redux/slice/adminSlice.ts +++ b/src/redux/slice/adminSlice.ts @@ -3,33 +3,34 @@ import { getLocalStore, removeLocalStore, saveLocalStore } from '@/utils/local'; import { createSlice, PayloadAction } from '@reduxjs/toolkit'; interface UserState { - user: { - token: string; - } | null; + user: { + token: string; + userName: string; + } | null; } // Khởi tạo state từ localStorage const initialState: UserState = { - user: getLocalStore('user') || null, // Nếu không có thì trả về null + user: getLocalStore('user_infor') || null, // Nếu không có thì trả về null }; const adminSlice = createSlice({ - name: 'user', - initialState, - reducers: { - saveUser: (state, action: PayloadAction) => { - state.user = action.payload; - saveLocalStore(action.payload, 'user'); - }, - logoutUser: (state) => { - state.user = null; - removeLocalStore('user'); - }, + name: 'user', + initialState, + reducers: { + saveUser: (state, action: PayloadAction) => { + state.user = action.payload; + saveLocalStore(action.payload, 'user_infor'); }, + logoutUser: (state) => { + state.user = null; + removeLocalStore('user_infor'); + }, + }, }); // Selector để lấy trạng thái đăng nhập -export const signedUr = (state: { user: UserState }) => Boolean(state.admin.user); +export const signedUr = (state: { admin: UserState }) => Boolean(state.admin.user); export const { saveUser, logoutUser } = adminSlice.actions; export default adminSlice.reducer; diff --git a/src/services/adminServ.ts b/src/services/adminServ.ts index 2f1c5ea..642591b 100644 --- a/src/services/adminServ.ts +++ b/src/services/adminServ.ts @@ -1,7 +1,12 @@ import { https } from './configServ'; +interface LoginData { + userName?: string; + email?: string; + password: string; +} export const adminServ = { - loginAdServ: (data) => { + loginAdServ: (data: LoginData) => { return https.post('/v1.0/auth/common/login', data); }, }; diff --git a/src/services/authServ.ts b/src/services/authServ.ts index b3d74c4..3f4cef6 100644 --- a/src/services/authServ.ts +++ b/src/services/authServ.ts @@ -1,5 +1,5 @@ // authServ.ts -import { AxiosHeaders } from 'axios'; +// import { AxiosHeaders } from 'axios'; import { https } from './configServ'; // define registration data type interface RegisterData { diff --git a/src/services/configServ.ts b/src/services/configServ.ts index baec12b..a3f529e 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -1,5 +1,5 @@ import { getLocalStore } from '@/utils/local'; -import { Store } from '@reduxjs/toolkit'; +// import { Store } from '@reduxjs/toolkit'; import axios from 'axios'; const https = axios.create({ @@ -12,16 +12,14 @@ const https = axios.create({ }, }); - -let host = (import.meta.env.VITE_HTTP_ROOT); +let host = import.meta.env.VITE_HTTP_ROOT; export const api = axios.create({ withCredentials: true, - baseURL: host + baseURL: host, }); -export const setupInterceptor = (store: Store) => { +export const setupInterceptor = () => { api.interceptors.request.use( (config) => { - const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = `Bearer ${token}`; @@ -30,7 +28,7 @@ export const setupInterceptor = (store: Store) => { }, (error) => { return Promise.reject(error); - } + }, ); api.interceptors.response.use( (response) => { @@ -42,7 +40,7 @@ export const setupInterceptor = (store: Store) => { // store.dispatch(logout()); } return Promise.reject(error); - } + }, ); }; diff --git a/src/services/getPassServ.ts b/src/services/getPassServ.ts index 0c6760a..48d7226 100644 --- a/src/services/getPassServ.ts +++ b/src/services/getPassServ.ts @@ -7,4 +7,7 @@ export const getPassServ = { resetPassword: (email: string, password: string, token: string | undefined) => { return https.post('/v1.0/client/reset-password', { email, password, token }); }, + resendEmail: (email: string) => { + return https.post('/v1.0/auth/resendConfirmationEmail', { email }); + }, }; diff --git a/yarn.lock b/yarn.lock index b6b3655..e9ee9c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1786,6 +1786,11 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +bmp-js@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" + integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -3209,6 +3214,11 @@ iconv-lite@0.6: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +idb-keyval@^6.2.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" + integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== + ignore@^5.2.0, ignore@^5.2.4: version "5.3.1" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" @@ -3355,6 +3365,11 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: dependencies: has-tostringtag "^1.0.0" +is-electron@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -3454,6 +3469,11 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + is-weakmap@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" @@ -3801,7 +3821,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -node-fetch@^2.6.7: +node-fetch@^2.6.7, node-fetch@^2.6.9: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -3938,6 +3958,11 @@ once@^1.3.0: dependencies: wrappy "1" +opencollective-postinstall@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" + integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -4713,6 +4738,11 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" +regenerator-runtime@^0.13.3: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -5255,6 +5285,27 @@ tape@^4.5.1: resolve "~1.22.6" string.prototype.trim "~1.2.8" +tesseract.js-core@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tesseract.js-core/-/tesseract.js-core-5.1.1.tgz#2b6f3ef28dd109bf4efdbc8fff70bd11adac8b85" + integrity sha512-KX3bYSU5iGcO1XJa+QGPbi+Zjo2qq6eBhNjSGR5E5q0JtzkoipJKOUQD7ph8kFyteCEfEQ0maWLu8MCXtvX5uQ== + +tesseract.js@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tesseract.js/-/tesseract.js-5.1.1.tgz#7bfaca1c103ba0ce3ddf5e101f0692802a01f880" + integrity sha512-lzVl/Ar3P3zhpUT31NjqeCo1f+D5+YfpZ5J62eo2S14QNVOmHBTtbchHm/YAbOOOzCegFnKf4B3Qih9LuldcYQ== + dependencies: + bmp-js "^0.1.0" + idb-keyval "^6.2.0" + is-electron "^2.2.2" + is-url "^1.2.4" + node-fetch "^2.6.9" + opencollective-postinstall "^2.0.3" + regenerator-runtime "^0.13.3" + tesseract.js-core "^5.1.1" + wasm-feature-detect "^1.2.11" + zlibjs "^0.3.1" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5531,6 +5582,11 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" +wasm-feature-detect@^1.2.11: + version "1.8.0" + resolved "https://registry.yarnpkg.com/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz#4e9f55b0a64d801f372fbb0324ed11ad3abd0c78" + integrity sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -5674,6 +5730,11 @@ yup@^1.4.0: toposort "^2.0.2" type-fest "^2.19.0" +zlibjs@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/zlibjs/-/zlibjs-0.3.1.tgz#50197edb28a1c42ca659cc8b4e6a9ddd6d444554" + integrity sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w== + zustand@^4.5.2: version "4.5.4" resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.4.tgz#63abdd81edfb190bc61e0bbae045cc4d52158a05" From 4f569c260b6eba5f9f883d413b137a569a1550b2 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 8 Oct 2024 16:58:13 +0700 Subject: [PATCH 044/118] check pull --- package.json | 2 +- src/api/auth/index.ts | 4 +- src/api/auth/useLogin.ts | 56 ++--- src/api/auth/useRegister.ts | 168 ++++++------- src/api/index.ts | 2 +- src/pages/AppRouter.tsx | 6 +- src/pages/AuthLayout/AuthLayout.tsx | 2 +- src/pages/currencydetails/CurrencyDetails.tsx | 232 ++++++++--------- src/pages/login/components/Test.tsx | 16 +- src/pages/login/components/index.ts | 16 +- .../user/components/KycIdentityModal.tsx | 91 +++++-- .../user/components/KycIdentityResult.tsx | 5 +- src/utils/axiosRoot.ts | 26 +- src/utils/imageTool.ts | 238 +++++++++--------- src/utils/index.ts | 20 +- src/utils/numbro.ts | 110 ++++---- src/utils/options.ts | 60 ++--- yarn.lock | 152 +++++------ 18 files changed, 622 insertions(+), 584 deletions(-) diff --git a/package.json b/package.json index 5997de6..12bd695 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dependencies": { "@ant-design/charts": "^2.1.0", "@ant-design/icons": "^5.3.6", - "@ant-design/pro-components": "^2.7.1", + "@ant-design/pro-components": "^2.7.19", "@ant-design/pro-form": "^2.30.2", "@ant-design/pro-layout": "^7.19.0", "@faker-js/faker": "^8.4.1", diff --git a/src/api/auth/index.ts b/src/api/auth/index.ts index 01f77d1..8a9e462 100644 --- a/src/api/auth/index.ts +++ b/src/api/auth/index.ts @@ -1,2 +1,2 @@ -export * from './useLogin'; -export * from './useRegister'; \ No newline at end of file +// export * from './useLogin'; +// export * from './useRegister'; \ No newline at end of file diff --git a/src/api/auth/useLogin.ts b/src/api/auth/useLogin.ts index aad194d..589c0e7 100644 --- a/src/api/auth/useLogin.ts +++ b/src/api/auth/useLogin.ts @@ -1,29 +1,29 @@ -const express = require('express'); -const router = express.Router(); -const User = require('../models/User'); -router.post( - '/login', - async ( - req: { body: { email: any; password: any } }, - res: { - status: (arg0: number) => { (): any; new (): any; json: { (arg0: { message: string }): any; new (): any } }; - }, - ) => { - const { email, password } = req.body; - try { - const user = await User.findOne({ email }); - if (!user) { - return res.status(400).json({ message: '用戶不存在' }); - } - if (password !== user.password) { - return res.status(400).json({ message: '密碼錯誤' }); - } - return res.status(200).json({ message: '登錄成功' }); - } catch (error) { - console.error('Login error:', error); - return res.status(500).json({ message: '內部錯誤' }); - } - }, -); +// const express = require('express'); +// const router = express.Router(); +// const User = require('../models/User'); +// router.post( +// '/login', +// async ( +// req: { body: { email: any; password: any } }, +// res: { +// status: (arg0: number) => { (): any; new (): any; json: { (arg0: { message: string }): any; new (): any } }; +// }, +// ) => { +// const { email, password } = req.body; +// try { +// const user = await User.findOne({ email }); +// if (!user) { +// return res.status(400).json({ message: '用戶不存在' }); +// } +// if (password !== user.password) { +// return res.status(400).json({ message: '密碼錯誤' }); +// } +// return res.status(200).json({ message: '登錄成功' }); +// } catch (error) { +// console.error('Login error:', error); +// return res.status(500).json({ message: '內部錯誤' }); +// } +// }, +// ); -module.exports = router; +// module.exports = router; diff --git a/src/api/auth/useRegister.ts b/src/api/auth/useRegister.ts index 792b276..9ef0ff5 100644 --- a/src/api/auth/useRegister.ts +++ b/src/api/auth/useRegister.ts @@ -1,95 +1,95 @@ -// src/api/auth/useRegister.ts -import { useState } from 'react'; -import { axiosRoot } from '@/utils/axiosRoot'; -import { UseTestMutationProps, useTestMutation } from '@/utils'; +// // src/api/auth/useRegister.ts +// import { useState } from 'react'; +// import { axiosRoot } from '@/utils/axiosRoot'; +// import { UseTestMutationProps, useTestMutation } from '@/utils'; -type RegisterRes = { - userName: string; - userPhone: string; - userEmail: string; -}; +// type RegisterRes = { +// userName: string; +// userPhone: string; +// userEmail: string; +// }; -type RegisterProps = { - userName: string; - userPhone: string; - userCountryCode: string; - userEmail: string; -}; +// type RegisterProps = { +// userName: string; +// userPhone: string; +// userCountryCode: string; +// userEmail: string; +// }; -const useRegister = (useProps: UseTestMutationProps) => { - const { ...config } = useProps; - const [verificationCode, setVerificationCode] = useState(''); - const { mutate, isPending, error } = useTestMutation({ - ...config, - mutationFn: async (props) => { - try { - const sentVerificationCode = generateVerificationCode(); - setVerificationCode(sentVerificationCode); - const { data } = await axiosRoot.post('/check-email', { email: props.userEmail }); - if (data.exists) { - throw new Error('此郵件地址已被註冊'); - } +// const useRegister = (useProps: UseTestMutationProps) => { +// const { ...config } = useProps; +// const [verificationCode, setVerificationCode] = useState(''); +// const { mutate, isPending, error } = useTestMutation({ +// ...config, +// mutationFn: async (props) => { +// try { +// const sentVerificationCode = generateVerificationCode(); +// setVerificationCode(sentVerificationCode); +// const { data } = await axiosRoot.post('/check-email', { email: props.userEmail }); +// if (data.exists) { +// throw new Error('此郵件地址已被註冊'); +// } - await axiosRoot.post('/send-verification-email', { - email: props.userEmail, - verificationCode: sentVerificationCode, - }); - } catch (error) { - throw error; - } - }, - delay: 1000, - }); - return { mutate, isPending, error, verificationCode }; -}; +// await axiosRoot.post('/send-verification-email', { +// email: props.userEmail, +// verificationCode: sentVerificationCode, +// }); +// } catch (error) { +// throw error; +// } +// }, +// delay: 1000, +// }); +// return { mutate, isPending, error, verificationCode }; +// }; -const useSendVerificationCode = () => { - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - const [verificationCode, setVerificationCode] = useState(''); +// const useSendVerificationCode = () => { +// const [loading, setLoading] = useState(false); +// const [error, setError] = useState(null); +// const [verificationCode, setVerificationCode] = useState(''); - const sendVerificationCode = async (email: string) => { - setLoading(true); - setError(null); - const sentVerificationCode = generateVerificationCode(); - setVerificationCode(sentVerificationCode); +// const sendVerificationCode = async (email: string) => { +// setLoading(true); +// setError(null); +// const sentVerificationCode = generateVerificationCode(); +// setVerificationCode(sentVerificationCode); - try { - await axiosRoot.post('/send-verification-email', { email, verificationCode: sentVerificationCode }); - setLoading(false); - alert(`驗證碼已發送到 ${email}`); - } catch (error) { - setLoading(false); - setError('寄送驗證碼失敗'); - } - }; +// try { +// await axiosRoot.post('/send-verification-email', { email, verificationCode: sentVerificationCode }); +// setLoading(false); +// alert(`驗證碼已發送到 ${email}`); +// } catch (error) { +// setLoading(false); +// setError('寄送驗證碼失敗'); +// } +// }; - return { sendVerificationCode, verificationCode, loading, error }; -}; +// return { sendVerificationCode, verificationCode, loading, error }; +// }; -const onSetPasswordFinish = async (values: any, navigate: any) => { - try { - await axiosRoot.post('/save-password', { - password: values.password, - email: values.userEmail, - phone: values.userCountryCode + values.userPhone, - name: values.userName, - }); - setTimeout(() => { - navigate('/auth/loginPage'); - }, 3000); - return { successVisible: true }; - } catch (error) { - console.error('Error saving password:', error); - return { successVisible: false }; - } -}; +// const onSetPasswordFinish = async (values: any, navigate: any) => { +// try { +// await axiosRoot.post('/save-password', { +// password: values.password, +// email: values.userEmail, +// phone: values.userCountryCode + values.userPhone, +// name: values.userName, +// }); +// setTimeout(() => { +// navigate('/auth/loginPage'); +// }, 3000); +// return { successVisible: true }; +// } catch (error) { +// console.error('Error saving password:', error); +// return { successVisible: false }; +// } +// }; -function generateVerificationCode() { - return Math.floor(100000 + Math.random() * 900000) - .toString() - .slice(0, 4); -} +// function generateVerificationCode() { +// return Math.floor(100000 + Math.random() * 900000) +// .toString() +// .slice(0, 4); +// } -export { useRegister, useSendVerificationCode, onSetPasswordFinish }; -export type { RegisterRes, RegisterProps }; +// export { useRegister, useSendVerificationCode, onSetPasswordFinish }; +// export type { RegisterRes, RegisterProps }; diff --git a/src/api/index.ts b/src/api/index.ts index e295e15..f289162 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1 +1 @@ -export * from './auth'; \ No newline at end of file +// export * from './auth'; \ No newline at end of file diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 7c47ec6..e658b3c 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -17,7 +17,7 @@ import LoginPage from './login/LoginPage'; import RegisterPage from './login/RegisterPage'; import InvestmentMarket from '../components/InvestmentMarket/InvestmentMarket'; import MyFocus from './HotInvestMents/MyFocus'; -import CurrencyDetails from './currencydetails/CurrencyDetails'; +// import CurrencyDetails from './currencydetails/CurrencyDetails'; import ResendMailSignUp from './login/components/ResendMailSignUp'; // const Account = lazy(() => import('./account/index')); // const PublicLayout = lazy(() => import('./PublicLayout')); @@ -81,10 +81,10 @@ const AppRouter = () => { path='MyFocus' element={} /> - } - /> + /> */} {/* auth */} diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 79ae74a..6081e14 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -115,7 +115,7 @@ const AuthLayout = () => { unCheckedChildren={} // Hiện biểu tượng mặt trăng khi ở chế độ tối /> {}} /> diff --git a/src/pages/currencydetails/CurrencyDetails.tsx b/src/pages/currencydetails/CurrencyDetails.tsx index 8e8d08c..625bcd4 100644 --- a/src/pages/currencydetails/CurrencyDetails.tsx +++ b/src/pages/currencydetails/CurrencyDetails.tsx @@ -1,125 +1,125 @@ -import React, { useState } from 'react'; -import { Layout, Menu, Button, Input, Row, Col, Typography, Space, Card } from 'antd'; -import { StarOutlined } from '@ant-design/icons'; -import GoToTrade from '../../components/GoToTrade'; +// import React, { useState } from 'react'; +// import { Layout, Menu, Button, Input, Row, Col, Typography, Space, Card } from 'antd'; +// import { StarOutlined } from '@ant-design/icons'; +// import GoToTrade from '../../components/GoToTrade'; -const { Header, Content } = Layout; -const { Title, Paragraph } = Typography; +// const { Header, Content } = Layout; +// const { Title, Paragraph } = Typography; -const data = { - labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], -}; +// const data = { +// labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], +// }; -const App = () => { - const [isStarred, setIsStarred] = useState(false); - const [isModalVisible, setIsModalVisible] = useState(false); +// const App = () => { +// const [isStarred, setIsStarred] = useState(false); +// const [isModalVisible, setIsModalVisible] = useState(false); - const handleStarClick = () => { - setIsStarred(!isStarred); - }; +// const handleStarClick = () => { +// setIsStarred(!isStarred); +// }; - const handleOk = () => { - setIsModalVisible(false); - }; +// const handleOk = () => { +// setIsModalVisible(false); +// }; - const handleCancel = () => { - setIsModalVisible(false); - }; +// const handleCancel = () => { +// setIsModalVisible(false); +// }; - const showModal = () => { - setIsModalVisible(true); - }; +// const showModal = () => { +// setIsModalVisible(true); +// }; - return ( - - -
    - - {/* Your navigation button here */} - - - - -
    - - - - -
    - AUDJPY -
    - - AUDJPY - <span style={{ fontSize: '14px', marginLeft: '16px', color:'grey' }}> - 2189.05 <span style={{ fontSize: '12px', color: 'grey' }}>0.15%</span> - </span> - - - AUDJPY - <span style={{ fontSize: '14px', marginLeft: '16px', color: '#52c41a' }}> - 2189.05 <span style={{ fontSize: '12px', color: '#52c41a' }}>0.15%</span> - </span> - -
    - - -
    -
    - - 该货币对在世界各地的多个交易所进行交易。这意味着投资者在不同的交易时间有许多不同的交易机会交易AUDJPY。根据您居住的地方,您可能在白天或晚上 - 的任何时候都可以交易AUDJPY。对于那些想利用这些机会的人来说,知道AUDJPY的交易时间开始和结束是很重要的。 - -
    - {/* Chart can be placed here */} -
    -
    -
    - -
    -
    -
    - -
    - ); -}; +// return ( +// +// +//
    +// +// {/* Your navigation button here */} +// +// +// +// +//
    +// +// +// +// +//
    +// AUDJPY +//
    +// +// AUDJPY +// <span style={{ fontSize: '14px', marginLeft: '16px', color:'grey' }}> +// 2189.05 <span style={{ fontSize: '12px', color: 'grey' }}>0.15%</span> +// </span> +// +// +// AUDJPY +// <span style={{ fontSize: '14px', marginLeft: '16px', color: '#52c41a' }}> +// 2189.05 <span style={{ fontSize: '12px', color: '#52c41a' }}>0.15%</span> +// </span> +// +//
    +// +// +//
    +//
    +// +// 该货币对在世界各地的多个交易所进行交易。这意味着投资者在不同的交易时间有许多不同的交易机会交易AUDJPY。根据您居住的地方,您可能在白天或晚上 +// 的任何时候都可以交易AUDJPY。对于那些想利用这些机会的人来说,知道AUDJPY的交易时间开始和结束是很重要的。 +// +//
    +// {/* Chart can be placed here */} +//
    +//
    +//
    +// +//
    +//
    +//
    +// +//
    +// ); +// }; -export default App; +// export default App; diff --git a/src/pages/login/components/Test.tsx b/src/pages/login/components/Test.tsx index 923d802..33296dd 100644 --- a/src/pages/login/components/Test.tsx +++ b/src/pages/login/components/Test.tsx @@ -1,10 +1,10 @@ -interface ITestProps { -} -const Test: React.FunctionComponent = (props) => { - return
    - this is test -
    ; -}; +// interface ITestProps { +// } +// const Test: React.FunctionComponent = (props) => { +// return
    +// this is test +//
    ; +// }; -export default Test; +// export default Test; diff --git a/src/pages/login/components/index.ts b/src/pages/login/components/index.ts index b80548e..a15652c 100644 --- a/src/pages/login/components/index.ts +++ b/src/pages/login/components/index.ts @@ -1,9 +1,9 @@ -import Test from './Test' +// import Test from './Test' -const compoenents ={ - Test, - Item: Test, -} -export default Test -export {compoenents -} \ No newline at end of file +// const compoenents ={ +// Test, +// Item: Test, +// } +// export default Test +// export {compoenents +// } \ No newline at end of file diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 48a1d9d..0f8045f 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -28,6 +28,15 @@ interface IKycIdentityModalProps { onFinish: (values: any) => void; } +interface UploadfilesState { + IDFront: boolean; + IDBack: boolean; + SecondaryIDFront?: boolean; + SecondaryIDBack?: boolean; + SelfieWithID: boolean; + AddressProof: boolean; +} + const KycIdentityModal: React.FunctionComponent = ({ open, onCancel, onFinish }) => { const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần const userName = useSelector((state: RootState) => state.admin.user?.userName); @@ -41,6 +50,13 @@ const KycIdentityModal: React.FunctionComponent = ({ ope // handle state sameAdress const [form] = Form.useForm(); // Tạo instance của form từ useForm + // handle Image status + const [uploadFileStatus, setUploadFileStatus] = useState({ + IDFront: false, + IDBack: false, + SelfieWithID: false, + AddressProof: false, + }); // State to hold the form data // const [formData, setFormData] = useState({ // fullName: userName || '', @@ -89,6 +105,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope console.error('Error submitting KYC data:', error); if (error.response && error.response.data && error.response.data.errors) { message.error(error.response.data.errors.KycData); + console.log(kycData); } else { message.error('An unknown error occurred'); } @@ -98,8 +115,8 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const waitTime = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); const uploadFile = async ( - file: File | Blob, // use normal file - imageType: string, + file: File | Blob, + imageType: keyof UploadfilesState, onSuccess?: (data: any) => void, onError?: (error: Error | ProgressEvent | Error) => void, ) => { @@ -110,18 +127,33 @@ const KycIdentityModal: React.FunctionComponent = ({ ope try { if (file instanceof Blob && 'name' in file) { const response = await api.post('/v1.0/kyc/upload-image', formData); - message.success(`${file.name}上傳成功`); + message.success(`${file.name} 上传成功`); onSuccess?.(response.data); + + // Update uploaded files state + setUploadFileStatus((prevState) => { + const updatedState = { + ...prevState, + [imageType]: true, + }; + + // Only update secondaryIDFront and secondaryIDBack if countryCode is not 'US' + if (countryCode === 'US') { + updatedState.SecondaryIDFront = true; + updatedState.SecondaryIDBack = true; + } + + return updatedState; + }); } else { message.error('文件無效'); } } catch (error) { if (error instanceof Error) { - const fileName = file instanceof File ? file.name : '文件'; // get da file name when there is one + const fileName = file instanceof File ? file.name : '文件'; message.error(`${fileName} 上传失败,请重试`); onError?.(error); } else if (error instanceof ProgressEvent) { - // process ProgressEvent onError?.(error); } else { message.error('文件錯誤'); @@ -130,6 +162,19 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }; + const handleFinish = async () => { + // Check if all required files are uploaded + const allFilesUploaded = Object.values(uploadFileStatus).every((file) => file); + if (!allFilesUploaded) { + message.error('請確保所有必要的文件都已上傳'); + return false; // Prevent moving to the next step + } + + // If all files are uploaded, proceed with your logic (e.g., calling an API) + message.success('所有圖片已成功上傳並儲存'); + return true; // Allow moving to the next step + }; + // const handleUrField = async () => { // await waitTime(1000); // Giữ nguyên phần đợi 1 giây @@ -206,6 +251,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope if (response.status === 200) { onFinish(values); message.success('完成提交'); + onCancel(); } } catch (error: any) { message.error(`上传失败,请重试: ` + error.response.data.title); @@ -322,6 +368,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { // message.success('所有图片已成功上传并保存'); @@ -563,11 +610,13 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { // Collect data for the API call - let kycData: any = { + + const kycData: any = { FullName: values.fullName, IDNumber: values.primaryIdNumber, DateOfBirth: values.dateOfBirth, @@ -640,19 +689,21 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { - const checked = e.target.checked; - if (checked) { - // Auto-fill residentialAddress with idAddress - form.setFieldsValue({ - residentialAddress: form.getFieldValue('idAddress'), - }); - } else { - // Clear residentialAddress when unchecked - form.setFieldsValue({ - residentialAddress: '', - }); - } + fieldProps={{ + onChange: (e) => { + const checked = e.target.checked; + if (checked) { + // Auto-fill residentialAddress with idAddress + form.setFieldsValue({ + residentialAddress: form.getFieldValue('idAddress'), + }); + } else { + // Clear residentialAddress when unchecked + form.setFieldsValue({ + residentialAddress: '', + }); + } + }, }} /> @@ -677,7 +728,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope {/* Ô nhập số điện thoại */}
    diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index d488aa4..a3db75d 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -5,7 +5,10 @@ import { useState } from 'react'; import { Link } from 'react-router-dom'; import KycBankModal from './KycBankModal'; -interface IKycIdentityResultProps {} +interface IKycIdentityResultProps { + open: boolean; // add prop open to da fix type + onCancel: () => void; +} const KycIdentityResult: React.FunctionComponent = () => { const [OpenKycBankModal, setOpenKycBankModal] = useState(false); diff --git a/src/utils/axiosRoot.ts b/src/utils/axiosRoot.ts index f532ca8..4cbd8cd 100644 --- a/src/utils/axiosRoot.ts +++ b/src/utils/axiosRoot.ts @@ -1,16 +1,16 @@ -import axios from 'axios'; -import { LoginRes } from '../api'; -import { forage, forageKeys } from './foragePkg'; +// import axios from 'axios'; +// import { LoginRes } from '../api'; +// import { forage, forageKeys } from './foragePkg'; -const axiosRoot = axios.create({ - baseURL: process.env.NODE_ENV === 'production' ? `${window.location.host}/api` : '/api', -}); +// const axiosRoot = axios.create({ +// baseURL: process.env.NODE_ENV === 'production' ? `${window.location.host}/api` : '/api', +// }); -axiosRoot.interceptors.request.use(async (config) => { - const auth = await forage().getItem(forageKeys.auth); - if (!auth) return config; - config.headers.Authorization = `Bearer ${auth.token}`; - return config; -}); +// axiosRoot.interceptors.request.use(async (config) => { +// const auth = await forage().getItem(forageKeys.auth); +// if (!auth) return config; +// config.headers.Authorization = `Bearer ${auth.token}`; +// return config; +// }); -export { axiosRoot }; +// export { axiosRoot }; diff --git a/src/utils/imageTool.ts b/src/utils/imageTool.ts index d774b19..47ae4d0 100644 --- a/src/utils/imageTool.ts +++ b/src/utils/imageTool.ts @@ -1,119 +1,119 @@ -/** - * TODO: - * 1. 壓縮比例應該調整成最高大小以及最少壓縮 - * 2. 浮水印改為整版面斜向 - */ - -import { nTot } from './numbro'; - -type CompressionOptions = { - file: File | undefined | null; - waterMark?: string; - sizeLog?: boolean; -}; - -type CompressionRes = Promise< - | false - | { - oImg: string; - wImg: string; - compressedFile: File; - wFile: File; - } ->; - -const compression = async (props: CompressionOptions): CompressionRes => { - const { file, waterMark, sizeLog } = props; - if (!file) return Promise.resolve(false); - // #: File to image - const maxWidth = 800; - const maxHeight = 800; - const minWidth = 80; - const minHeight = 80; - const quality = 0.5; - - const img = new Image(); - img.src = URL.createObjectURL(file); - - await new Promise((resolve, reject) => { - img.onload = () => { - URL.revokeObjectURL(img.src); - resolve(); - }; - img.onerror = reject; - }); - - // #: Image to Canvas - const canvas = document.createElement('canvas'); - const ctx = canvas.getContext('2d'); - let width = img.width; - let height = img.height; - - if (width > maxWidth) { - height = (maxWidth * height) / width; - width = maxWidth; - } - - if (height > maxHeight) { - width = (maxHeight * width) / height; - height = maxHeight; - } - - if (width < minWidth) { - height = minWidth * (height / width); - width = minWidth; - } - - if (height < minHeight) { - height = minHeight; - width = minHeight * (width / height); - } - - canvas.width = width; - canvas.height = height; - - // #: 浮水印 & 壓縮 - if (!ctx) return Promise.resolve(false); - - ctx.drawImage(img, 0, 0, width, height); - - const oImg = canvas.toDataURL('image/jpeg', quality); - const compressedBlob = await new Promise((resolve) => { - canvas.toBlob( - (blob) => { - if (blob) resolve(blob); - }, - 'image/jpeg', - quality, - ); - }); - const compressedFile = new File([compressedBlob], 'img.jpg', { type: 'image/jpeg' }); - if (waterMark) { - ctx.font = '20px Arial'; - ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; - ctx.textBaseline = 'middle'; - ctx.fillText(waterMark, 10, 20, maxWidth); - } - - const wImg = canvas.toDataURL('image/jpeg', quality); - const wBlob = await new Promise((resolve) => { - canvas.toBlob( - (blob) => { - if (blob) resolve(blob); - }, - 'image/jpeg', - quality, - ); - }); - const wFile = new File([wBlob], 'img.jpg', { type: 'image/jpeg' }); - - // #: Size compare log - if (import.meta.env.DEV && sizeLog) { - console.info('Origin file size:', nTot({ value: file.size })); - if (compressedFile) console.info('Compressed file size:', nTot({ value: compressedFile.size })); - if (wFile) console.info('Compressed file with water mark size:', nTot({ value: wFile.size })); - } - return { oImg, wImg, compressedFile, wFile }; -}; - -export { compression }; +// /** +// * TODO: +// * 1. 壓縮比例應該調整成最高大小以及最少壓縮 +// * 2. 浮水印改為整版面斜向 +// */ + +// import { nTot } from './numbro'; + +// type CompressionOptions = { +// file: File | undefined | null; +// waterMark?: string; +// sizeLog?: boolean; +// }; + +// type CompressionRes = Promise< +// | false +// | { +// oImg: string; +// wImg: string; +// compressedFile: File; +// wFile: File; +// } +// >; + +// const compression = async (props: CompressionOptions): CompressionRes => { +// const { file, waterMark, sizeLog } = props; +// if (!file) return Promise.resolve(false); +// // #: File to image +// const maxWidth = 800; +// const maxHeight = 800; +// const minWidth = 80; +// const minHeight = 80; +// const quality = 0.5; + +// const img = new Image(); +// img.src = URL.createObjectURL(file); + +// await new Promise((resolve, reject) => { +// img.onload = () => { +// URL.revokeObjectURL(img.src); +// resolve(); +// }; +// img.onerror = reject; +// }); + +// // #: Image to Canvas +// const canvas = document.createElement('canvas'); +// const ctx = canvas.getContext('2d'); +// let width = img.width; +// let height = img.height; + +// if (width > maxWidth) { +// height = (maxWidth * height) / width; +// width = maxWidth; +// } + +// if (height > maxHeight) { +// width = (maxHeight * width) / height; +// height = maxHeight; +// } + +// if (width < minWidth) { +// height = minWidth * (height / width); +// width = minWidth; +// } + +// if (height < minHeight) { +// height = minHeight; +// width = minHeight * (width / height); +// } + +// canvas.width = width; +// canvas.height = height; + +// // #: 浮水印 & 壓縮 +// if (!ctx) return Promise.resolve(false); + +// ctx.drawImage(img, 0, 0, width, height); + +// const oImg = canvas.toDataURL('image/jpeg', quality); +// const compressedBlob = await new Promise((resolve) => { +// canvas.toBlob( +// (blob) => { +// if (blob) resolve(blob); +// }, +// 'image/jpeg', +// quality, +// ); +// }); +// const compressedFile = new File([compressedBlob], 'img.jpg', { type: 'image/jpeg' }); +// if (waterMark) { +// ctx.font = '20px Arial'; +// ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; +// ctx.textBaseline = 'middle'; +// ctx.fillText(waterMark, 10, 20, maxWidth); +// } + +// const wImg = canvas.toDataURL('image/jpeg', quality); +// const wBlob = await new Promise((resolve) => { +// canvas.toBlob( +// (blob) => { +// if (blob) resolve(blob); +// }, +// 'image/jpeg', +// quality, +// ); +// }); +// const wFile = new File([wBlob], 'img.jpg', { type: 'image/jpeg' }); + +// // #: Size compare log +// if (import.meta.env.DEV && sizeLog) { +// console.info('Origin file size:', nTot({ value: file.size })); +// if (compressedFile) console.info('Compressed file size:', nTot({ value: compressedFile.size })); +// if (wFile) console.info('Compressed file with water mark size:', nTot({ value: wFile.size })); +// } +// return { oImg, wImg, compressedFile, wFile }; +// }; + +// export { compression }; diff --git a/src/utils/index.ts b/src/utils/index.ts index f0b08cf..4145ec7 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,10 +1,10 @@ -export * from './foragePkg'; -export * from './imageTool'; -export * from './myFactory'; -export * from './calendarLocal'; -export * from './broadcast'; -export * from './numbro'; -export * from './useTestMaster'; -export * from './logger'; -export * from './options'; -export * from './enums'; \ No newline at end of file +// export * from './foragePkg'; +// export * from './imageTool'; +// export * from './myFactory'; +// export * from './calendarLocal'; +// export * from './broadcast'; +// export * from './numbro'; +// export * from './useTestMaster'; +// export * from './logger'; +// export * from './options'; +// export * from './enums'; \ No newline at end of file diff --git a/src/utils/numbro.ts b/src/utils/numbro.ts index e448bf0..ab02e08 100644 --- a/src/utils/numbro.ts +++ b/src/utils/numbro.ts @@ -1,55 +1,55 @@ -import numbro from 'numbro'; -import { CryptoTypes } from './options'; - -type CurrencyTypes = 'TWD'; - -type NtoTprops = { - value: unknown; - digitsType?: CryptoTypes | CurrencyTypes | null; -}; - -const nTot = ({ value, digitsType }: NtoTprops): string => { - // 避免 **.**.** 的格式 - if (!value || (typeof value === 'string' && value.split('.').length > 2)) return '0'; - if (typeof value === 'string' && /[^\d.,]/.test(value)) { - const splitValue = value.split(''); - const firstDIndex = splitValue.findIndex((isD) => /[^\d.,]/.test(isD)); - const newValue = value.slice(0, firstDIndex); - return newValue; - } - - // - const digits = () => { - if (digitsType === 'BTC') return 2; - if (digitsType === 'ERC20_USDT') return 2; - if (digitsType === 'ETH') return 2; - if (digitsType === 'TRC20_USDT') return 2; - if (digitsType === 'TRX') return 2; - if (digitsType === 'TWD') return 0; - // 未設定的情況下回傳使用者輸入的結果 - if (typeof value === 'string' || typeof value === 'number') { - const length = value.toString().split('.').at(1)?.length; - if (length === undefined) return 0; - if (length === 0) return -1; - return length; - } - return 0; - }; - - if (digits() === -1) return value as string; - - return numbro(value).format({ - thousandSeparated: true, - mantissa: digits(), - }); -}; - -const tTon = (value: unknown): number => { - if (!value) return 0; - if (typeof value === 'string') return numbro.unformat(value); - if (typeof value === 'number') return value; - return 0; -}; - -export { nTot, tTon }; -export type { CurrencyTypes }; +// import numbro from 'numbro'; +// import { CryptoTypes } from './options'; + +// type CurrencyTypes = 'TWD'; + +// type NtoTprops = { +// value: unknown; +// digitsType?: CryptoTypes | CurrencyTypes | null; +// }; + +// const nTot = ({ value, digitsType }: NtoTprops): string => { +// // 避免 **.**.** 的格式 +// if (!value || (typeof value === 'string' && value.split('.').length > 2)) return '0'; +// if (typeof value === 'string' && /[^\d.,]/.test(value)) { +// const splitValue = value.split(''); +// const firstDIndex = splitValue.findIndex((isD) => /[^\d.,]/.test(isD)); +// const newValue = value.slice(0, firstDIndex); +// return newValue; +// } + +// // +// const digits = () => { +// if (digitsType === 'BTC') return 2; +// if (digitsType === 'ERC20_USDT') return 2; +// if (digitsType === 'ETH') return 2; +// if (digitsType === 'TRC20_USDT') return 2; +// if (digitsType === 'TRX') return 2; +// if (digitsType === 'TWD') return 0; +// // 未設定的情況下回傳使用者輸入的結果 +// if (typeof value === 'string' || typeof value === 'number') { +// const length = value.toString().split('.').at(1)?.length; +// if (length === undefined) return 0; +// if (length === 0) return -1; +// return length; +// } +// return 0; +// }; + +// if (digits() === -1) return value as string; + +// return numbro(value).format({ +// thousandSeparated: true, +// mantissa: digits(), +// }); +// }; + +// const tTon = (value: unknown): number => { +// if (!value) return 0; +// if (typeof value === 'string') return numbro.unformat(value); +// if (typeof value === 'number') return value; +// return 0; +// }; + +// export { nTot, tTon }; +// export type { CurrencyTypes }; diff --git a/src/utils/options.ts b/src/utils/options.ts index 9dbebc1..74e8ea2 100644 --- a/src/utils/options.ts +++ b/src/utils/options.ts @@ -1,36 +1,36 @@ -import { useTranslation } from 'react-i18next'; -import { CountryKeyNum, VerifyStatusNum } from './enums'; -const { t } = useTranslation(); +// import { useTranslation } from 'react-i18next'; +// import { CountryKeyNum, VerifyStatusNum } from './enums'; +// const { t } = useTranslation(); -const verifyStatusOptions = [ - { value: VerifyStatusNum.Verifing, label: '驗證中' }, - { value: VerifyStatusNum.Fail, label: '失敗' }, - { value: VerifyStatusNum.Pass, label: `${t('assets.通過')}` }, -]; +// const verifyStatusOptions = [ +// { value: VerifyStatusNum.Verifing, label: '驗證中' }, +// { value: VerifyStatusNum.Fail, label: '失敗' }, +// { value: VerifyStatusNum.Pass, label: `${t('assets.通過')}` }, +// ]; -const countryOptions = [ - { value: CountryKeyNum.Taiwan, label: '台灣' }, - { value: CountryKeyNum.Honkon, label: '香港' }, -]; +// const countryOptions = [ +// { value: CountryKeyNum.Taiwan, label: '台灣' }, +// { value: CountryKeyNum.Honkon, label: '香港' }, +// ]; -const getCountryBankOptions = (countyKey: CountryKeyNum | undefined) => { - if (countyKey === CountryKeyNum.Taiwan) - return [ - { value: '163', label: '臺灣銀行 Bank of Taiwan (163)' }, - { value: '149', label: '臺灣土地銀行 Land Bank of Taiwan(149)' }, - { - value: '269', - label: '合作金庫商業銀行 Taiwan Cooperative Bank(269)', - }, - { value: '186', label: '第一商業銀行 First Commercial Bank(186)' }, - { - value: '185', - label: '華南商業銀行 Hua Nan Commercial Bank, Ltd.(185)', - }, - ]; - return []; -}; +// const getCountryBankOptions = (countyKey: CountryKeyNum | undefined) => { +// if (countyKey === CountryKeyNum.Taiwan) +// return [ +// { value: '163', label: '臺灣銀行 Bank of Taiwan (163)' }, +// { value: '149', label: '臺灣土地銀行 Land Bank of Taiwan(149)' }, +// { +// value: '269', +// label: '合作金庫商業銀行 Taiwan Cooperative Bank(269)', +// }, +// { value: '186', label: '第一商業銀行 First Commercial Bank(186)' }, +// { +// value: '185', +// label: '華南商業銀行 Hua Nan Commercial Bank, Ltd.(185)', +// }, +// ]; +// return []; +// }; -export { getCountryBankOptions, verifyStatusOptions, countryOptions }; +// export { getCountryBankOptions, verifyStatusOptions, countryOptions }; diff --git a/yarn.lock b/yarn.lock index e9ee9c3..98a5ff4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -66,68 +66,51 @@ "@antv/g2" "^5.1.18" "@antv/g2-extension-plot" "^0.2.0" -"@ant-design/pro-card@2.8.4": - version "2.8.4" - resolved "https://registry.yarnpkg.com/@ant-design/pro-card/-/pro-card-2.8.4.tgz#9df86a54b26cf90d66e3fa9b6d5e45ec232d0171" - integrity sha512-V+8D10YDsO1FnQK2OKOkB8KkpbjgN7OSLzsJhpkv0l4c4FYV0HzWwEmqIhscgse1j587QcuK3jKwnCWEsxSP1Q== +"@ant-design/pro-card@2.8.8": + version "2.8.8" + resolved "https://registry.yarnpkg.com/@ant-design/pro-card/-/pro-card-2.8.8.tgz#79c38542ece8a2c609968856cb59443288c02d7d" + integrity sha512-av9ksFaSKmi63VXuU9qbEwk49stuzZZsDq4vUqCt1GJBzUiKVGs8rmTYlfDwmqc9k1ZZjCu74SyAf58J5775wg== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" classnames "^2.3.2" omit.js "^2.0.2" rc-resize-observer "^1.0.0" rc-util "^5.4.0" -"@ant-design/pro-components@^2.7.1": - version "2.7.10" - resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.10.tgz#b92b027c55fb6067e4ab2743b1ed055565e2dd62" - integrity sha512-UZV1gKGjKxZ9OridFzJLgd9K8WFbTr3t36MQa2Fz5EwWj2mfpAFSvg/0yP9UHgTnfdCe5yrpeck9tGpgHIfcdg== - dependencies: - "@ant-design/pro-card" "2.8.4" - "@ant-design/pro-descriptions" "2.5.45" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-form" "2.28.0" - "@ant-design/pro-layout" "7.19.8" - "@ant-design/pro-list" "2.5.61" - "@ant-design/pro-provider" "2.14.7" +"@ant-design/pro-components@^2.7.19": + version "2.7.19" + resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.19.tgz#197513f73d1463d70a60dda95c99ebc7a048dfee" + integrity sha512-C/xf7VhZEMZsphT9i6DsjjwQYAEj0u77n7WYtd9/HLfJyQ2h9maORnd1z+BSmBZ58IWb18wPbiODUjNXT/toMw== + dependencies: + "@ant-design/pro-card" "2.8.8" + "@ant-design/pro-descriptions" "2.5.53" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-form" "2.30.2" + "@ant-design/pro-layout" "7.20.2" + "@ant-design/pro-list" "2.5.69" + "@ant-design/pro-provider" "2.14.9" "@ant-design/pro-skeleton" "2.1.13" - "@ant-design/pro-table" "3.16.1" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-table" "3.17.2" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.16.3" -"@ant-design/pro-descriptions@2.5.45": - version "2.5.45" - resolved "https://registry.yarnpkg.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.45.tgz#ffdea687c26c2a7e83df9d5c9108d657f5c6eb6e" - integrity sha512-XwaHEWhBEa2KiLUZoh67TIfW9bIckzNFUu/gzy/6Tzi9W+qYhZQCzacNNAUDR/a/MULc3J859oqRP+JjCdFUGg== +"@ant-design/pro-descriptions@2.5.53": + version "2.5.53" + resolved "https://registry.yarnpkg.com/@ant-design/pro-descriptions/-/pro-descriptions-2.5.53.tgz#fe5d6bff540dc3fc51eb57f3b9a60e31b5938b67" + integrity sha512-n/LP+FgjysmZgpjAXei7RZSVYgr/9oM6ta672yoyLkZfdMMezRDNnQb3GEhLDMOERVUBg9Ud3ZwYKSoiyC25QQ== dependencies: - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-form" "2.28.0" - "@ant-design/pro-provider" "2.14.7" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-form" "2.30.2" + "@ant-design/pro-provider" "2.14.9" "@ant-design/pro-skeleton" "2.1.13" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" rc-resize-observer "^0.2.3" rc-util "^5.0.6" -"@ant-design/pro-field@2.15.0": - version "2.15.0" - resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.15.0.tgz#2f265196b60fc93802117b80c5a93ca84bb3b639" - integrity sha512-pf0ldCWZGEWLpZWyifHqyaQ0/uG5yVPvYXhnSM6sXBtxtfHqZvZvjuhmIK1wR05wDocS/JHQnq+sA3FTut8FXQ== - dependencies: - "@ant-design/icons" "^5.0.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" - "@babel/runtime" "^7.18.0" - "@chenshuai2144/sketch-color" "^1.0.8" - classnames "^2.3.2" - dayjs "^1.11.10" - lodash.tonumber "^4.0.3" - omit.js "^2.0.2" - rc-util "^5.4.0" - swr "^2.0.0" - "@ant-design/pro-field@2.16.2": version "2.16.2" resolved "https://registry.yarnpkg.com/@ant-design/pro-field/-/pro-field-2.16.2.tgz#a7420d7db92e0f5a12df71fab4355b2f239f386c" @@ -145,45 +128,46 @@ rc-util "^5.4.0" swr "^2.0.0" -"@ant-design/pro-form@2.28.0": - version "2.28.0" - resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.28.0.tgz#855971e96160b0c2a6a155d76f5914496cad6d35" - integrity sha512-3sOtwSakzrQVYvhWzvvg1iBmGWwr166HKqob5UnjQPP55+40y0agQpyxeoagJF83Xb31zkbp+U0iFcAAQQs76A== +"@ant-design/pro-form@2.30.2", "@ant-design/pro-form@^2.30.2": + version "2.30.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.30.2.tgz#1ad072b8a02f220dd2342f5bef186e491c768fbb" + integrity sha512-Tn5pT8Pi5kkjr9aotezJdiRkJPgv53nyZK5qx6mwQMnI8zqTXarK22plrVEZXuFoLC1qwuAchmy4ofqAsBLx7w== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" "@chenshuai2144/sketch-color" "^1.0.7" "@umijs/use-params" "^1.0.9" classnames "^2.3.2" dayjs "^1.11.10" - lodash.merge "^4.6.2" + lodash-es "^4.17.21" omit.js "^2.0.2" rc-resize-observer "^1.1.0" rc-util "^5.0.6" -"@ant-design/pro-form@^2.30.2": - version "2.30.2" - resolved "https://registry.yarnpkg.com/@ant-design/pro-form/-/pro-form-2.30.2.tgz#1ad072b8a02f220dd2342f5bef186e491c768fbb" - integrity sha512-Tn5pT8Pi5kkjr9aotezJdiRkJPgv53nyZK5qx6mwQMnI8zqTXarK22plrVEZXuFoLC1qwuAchmy4ofqAsBLx7w== +"@ant-design/pro-layout@7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.20.2.tgz#60f3c6a075148cacdd67605091d459aaff30fcf1" + integrity sha512-a97k8P2sbprPXcBOG8p1g/0bP5kLBiC3+GSj0oxSWjUelAKzI9Q448tLOIfLjDcokxOvPRCEcCAlRg+mCKZVPg== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-field" "2.16.2" "@ant-design/pro-provider" "2.14.9" "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" - "@chenshuai2144/sketch-color" "^1.0.7" + "@umijs/route-utils" "^4.0.0" "@umijs/use-params" "^1.0.9" classnames "^2.3.2" - dayjs "^1.11.10" lodash-es "^4.17.21" omit.js "^2.0.2" + path-to-regexp "8.0.0" rc-resize-observer "^1.1.0" rc-util "^5.0.6" + swr "^2.0.0" + warning "^4.0.3" -"@ant-design/pro-layout@7.19.8", "@ant-design/pro-layout@^7.19.0": +"@ant-design/pro-layout@^7.19.0": version "7.19.8" resolved "https://registry.yarnpkg.com/@ant-design/pro-layout/-/pro-layout-7.19.8.tgz#5d070ae2d74a232a657dca6fb207d097b9e8a621" integrity sha512-f/vC83jmCjEDP7rrLBxRBqCK8298keSRrXqpd2RqigYlJpGqeKVGcevmk5ngBjDxz+UqjoNfOokG7cU3t3eIvQ== @@ -203,16 +187,16 @@ swr "^2.0.0" warning "^4.0.3" -"@ant-design/pro-list@2.5.61": - version "2.5.61" - resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.61.tgz#60d68b032c95332862902954d9f590c8dd83d727" - integrity sha512-MwqTfWcos3XBPJlYNw/T1iVlU7HAT/PlAUDTVhdqwpjs6gKafFsg8fHdsj5MxVsk1Pjp5h8hCWIE0P13aMwfYg== +"@ant-design/pro-list@2.5.69": + version "2.5.69" + resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.69.tgz#e6c1eb20bdecc019e38f974a5b2b7df1557e2eb8" + integrity sha512-jd5slgWw9hV/f1XhFjuHfsdS9fh81lTRhBzJDlgFqZaFNKo++S2c8wX5FbpNzYCu+XIfVTVt8EXvz8j4lPiG0g== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-card" "2.8.4" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-table" "3.16.1" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-card" "2.8.8" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-table" "3.17.2" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" classnames "^2.3.2" dayjs "^1.11.10" @@ -248,17 +232,17 @@ dependencies: "@babel/runtime" "^7.18.0" -"@ant-design/pro-table@3.16.1": - version "3.16.1" - resolved "https://registry.yarnpkg.com/@ant-design/pro-table/-/pro-table-3.16.1.tgz#e48e6dc811afd8ac7e1be7509fa60ad2da5a1295" - integrity sha512-c67xsUMIzlGnHYSVjOCkhPlBlt21zoZxa7+p4A087cyjfkQwFR5Qc+xj8L9t0GCqdRz+7J2A9s3s8SSJAwqCEA== +"@ant-design/pro-table@3.17.2": + version "3.17.2" + resolved "https://registry.yarnpkg.com/@ant-design/pro-table/-/pro-table-3.17.2.tgz#93b4c0eb39eaa15214a3deda696fa290207b6615" + integrity sha512-nEwhlx93MgKjXD5PsXQqnB4bQHKe7dTTzwUiYrBCb0Y5So2ra4cBcjobQHS+q1IgIP9DJQQoruRp/AYplCtwHw== dependencies: "@ant-design/icons" "^5.0.0" - "@ant-design/pro-card" "2.8.4" - "@ant-design/pro-field" "2.15.0" - "@ant-design/pro-form" "2.28.0" - "@ant-design/pro-provider" "2.14.7" - "@ant-design/pro-utils" "2.15.14" + "@ant-design/pro-card" "2.8.8" + "@ant-design/pro-field" "2.16.2" + "@ant-design/pro-form" "2.30.2" + "@ant-design/pro-provider" "2.14.9" + "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" "@dnd-kit/core" "^6.0.8" "@dnd-kit/modifiers" "^6.0.1" @@ -266,7 +250,7 @@ "@dnd-kit/utilities" "^3.2.1" classnames "^2.3.2" dayjs "^1.11.10" - lodash.merge "^4.6.2" + lodash-es "^4.17.21" omit.js "^2.0.2" rc-resize-observer "^1.0.0" rc-util "^5.0.1" @@ -3672,11 +3656,6 @@ lodash.merge@^4.6.0, lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.tonumber@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz#0b96b31b35672793eb7f5a63ee791f1b9e9025d9" - integrity sha512-SY0SwuPOHRwKcCNTdsntPYb+Zddz5mDUIVFABzRMqmAiL41pMeyoQFGxYAw5zdc9NnH4pbJqiqqp5ckfxa+zSA== - lodash@^4.0.1, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -4034,6 +4013,11 @@ path-to-regexp@2.4.0: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.4.0.tgz#35ce7f333d5616f1c1e1bfe266c3aba2e5b2e704" integrity sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w== +path-to-regexp@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.0.0.tgz#92076ec6b2eaf08be7c3233484142c05e8866cf5" + integrity sha512-GAWaqWlTjYK/7SVpIUA6CTxmcg65SP30sbjdCvyYReosRkk7Z/LyHWwkK3Vu0FcIi0FNTADUs4eh1AsU5s10cg== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" From 1b38eefd887602e9cdd4112821c4db37009cf6d3 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 8 Oct 2024 17:14:15 +0700 Subject: [PATCH 045/118] delete --- src/services/authServ.ts | 0 src/services/getPassServ.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/services/authServ.ts delete mode 100644 src/services/getPassServ.ts diff --git a/src/services/authServ.ts b/src/services/authServ.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/services/getPassServ.ts b/src/services/getPassServ.ts deleted file mode 100644 index e69de29..0000000 From cf8084cd1284a4394dcda31d3564fd308a91f676 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 9 Oct 2024 09:49:38 +0700 Subject: [PATCH 046/118] up to date dl --- src/components/AddAccount.tsx | 23 +- src/main.tsx | 4 +- src/pages/AppRouter.tsx | 2 +- src/pages/Realtime/BackOfficeHub.tsx | 57 +- src/pages/Realtime/ClientHub.tsx | 33 +- src/pages/Realtime/MT4.Pumping.tsx | 26 +- src/pages/Realtime/MarketDataHub.tsx | 26 +- src/pages/login/LoginPage.tsx | 2 +- src/pages/login/components/GetPassword.tsx | 56 +- .../login/components/ResendMailSignUp.tsx | 55 +- src/pages/login/components/SetPassword.tsx | 1 - src/services/adminAPI.ts | 7 + src/services/authAPI.ts | 10 +- src/services/configServ.ts | 2 +- src/utils/apiCall.ts | 100 +- yarn.lock | 1557 ++++++++--------- 16 files changed, 995 insertions(+), 966 deletions(-) diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx index 0d8bc81..72e23bb 100644 --- a/src/components/AddAccount.tsx +++ b/src/components/AddAccount.tsx @@ -4,29 +4,25 @@ import Mt4 from '../assets/mt4.png'; import { useTranslation } from 'react-i18next'; import { CheckCard } from '@ant-design/pro-components'; import DownloadMT4 from './DownloadMT4'; -import { api } from '@/services/configServ'; +// import { api } from '@/services/configServ'; import apiCall from '@/utils/apiCall'; import { useAccountStore } from '@/store/useAccountStore'; const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visible, onClose }) => { const [accountType, setAccountType] = useState('real'); - const [form] = Form.useForm(); // Initialize form instance + const [form] = Form.useForm(); // Initialize form instance const { t } = useTranslation(); const { fetchMT4Accounts } = useAccountStore(); const onFinish = async (values: any) => { - let result = { ...values, accountType } + let result = { ...values, accountType }; try { - const data = await apiCall('/v1.0/mt4Transaction/client/account', 'POST', result); fetchMT4Accounts(); - - } - catch { - } - finally { + console.log(data); + } catch { + } finally { onClose(); } - }; // Validator for password matching @@ -60,7 +56,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib footer={null} >
    @@ -71,9 +67,8 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib > form.setFieldsValue({ platformType: val })} // Set form value on change - + value={form.getFieldValue('platformType')} // Controlled value + onChange={(val) => form.setFieldsValue({ platformType: val })} // Set form value on change options={[ { title: 'MetaTrader 4', diff --git a/src/main.tsx b/src/main.tsx index 0cb30e2..0ed3144 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -12,7 +12,7 @@ import '@/I18n'; import { Provider } from 'react-redux'; import { store } from '@/redux/configStore'; import { setupInterceptor } from './services/configServ'; -setupInterceptor() +setupInterceptor(); const App: React.FunctionComponent = () => { const queryClient = new QueryClient(); const { isDark } = useThemeStore(); @@ -53,6 +53,6 @@ ReactDOM.createRoot(document.getElementById('root')!).render( // - + , // , ); diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index f5d338f..d075937 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -10,7 +10,7 @@ import Account from './account/index'; import PublicLayout from './PublicLayout'; import AuthLayout from './AuthLayout'; import Home from './Home'; -import Property from './property/index'; +// import Property from './property/index'; import User from './user/index'; import History from './history/index'; import LoginPage from './login/LoginPage'; diff --git a/src/pages/Realtime/BackOfficeHub.tsx b/src/pages/Realtime/BackOfficeHub.tsx index bf84dd1..f87d874 100644 --- a/src/pages/Realtime/BackOfficeHub.tsx +++ b/src/pages/Realtime/BackOfficeHub.tsx @@ -1,24 +1,19 @@ /* eslint-disable */ -import { useEffect, useState } from "react"; -import * as signalR from "@microsoft/signalr"; -import { - NotifyTradeDto, - NotifyMT4TransferDto, - UserDto, - NotifyMarginCallDto, -} from "./types"; +import { useEffect, useState } from 'react'; +import * as signalR from '@microsoft/signalr'; +import { NotifyTradeDto, NotifyMT4TransferDto, UserDto, NotifyMarginCallDto } from './types'; -const url = "https://demoApi.rushprofit.uk/hubs/backOfficeHub"; +const url = 'https://demoApi.rushprofit.uk/hubs/backOfficeHub'; // const url = "http://localhost:5000/hubs/backOfficeHub"; export const BackOfficeHub = () => { - const [token, setToken] = useState(""); + const [token, setToken] = useState(''); const [shouldInitConnection, setShouldInitConnection] = useState(false); - const [hubConnection, setHubConnection] = - useState(null); + const [hubConnection, setHubConnection] = useState(null); useEffect(() => { if (!shouldInitConnection || !token) { + console.log(hubConnection); return; } @@ -32,39 +27,37 @@ export const BackOfficeHub = () => { connection .start() .then(() => { - console.log("Connection started!"); + console.log('Connection started!'); setHubConnection(connection); }) - .catch((err) => - console.log("Error while establishing connection :( ", err) - ); + .catch((err) => console.log('Error while establishing connection :( ', err)); - connection.on("UserRegister", (message: UserDto) => { - console.log("UserRegister: ", message); + connection.on('UserRegister', (message: UserDto) => { + console.log('UserRegister: ', message); }); - connection.on("NotifyCommissionRuleRequired", (message: UserDto) => { - console.log("NotifyCommissionRuleRequired: ", message); + connection.on('NotifyCommissionRuleRequired', (message: UserDto) => { + console.log('NotifyCommissionRuleRequired: ', message); }); - connection.on("NotifyCommissionSettingRequired", (message: UserDto) => { - console.log("NotifyCommissionSettingRequired: ", message); + connection.on('NotifyCommissionSettingRequired', (message: UserDto) => { + console.log('NotifyCommissionSettingRequired: ', message); }); - connection.on("NotifyMT4Transfer", (message: NotifyMT4TransferDto) => { - console.log("NotifyMT4Transfer: ", message); + connection.on('NotifyMT4Transfer', (message: NotifyMT4TransferDto) => { + console.log('NotifyMT4Transfer: ', message); }); - connection.on("NotifyTradeOpen", (message: NotifyTradeDto) => { - console.log("NotifyTradeOpen: ", message); + connection.on('NotifyTradeOpen', (message: NotifyTradeDto) => { + console.log('NotifyTradeOpen: ', message); }); - connection.on("NotifyTradeClose", (message: NotifyTradeDto) => { - console.log("NotifyTradeClose: ", message); + connection.on('NotifyTradeClose', (message: NotifyTradeDto) => { + console.log('NotifyTradeClose: ', message); }); - connection.on("NotifyMarginCall", (message: NotifyMarginCallDto) => { - console.log("NotifyMarginCall: ", message); + connection.on('NotifyMarginCall', (message: NotifyMarginCallDto) => { + console.log('NotifyMarginCall: ', message); }); return () => { @@ -75,8 +68,8 @@ export const BackOfficeHub = () => {

    BackOfficeHub

    setToken(e.target.value)} /> diff --git a/src/pages/Realtime/ClientHub.tsx b/src/pages/Realtime/ClientHub.tsx index 360c990..ea73239 100644 --- a/src/pages/Realtime/ClientHub.tsx +++ b/src/pages/Realtime/ClientHub.tsx @@ -1,19 +1,19 @@ /* eslint-disable */ -import { useEffect, useState } from "react"; -import * as signalR from "@microsoft/signalr"; -import { NotifyMT4TransferToClientDto } from "./types"; +import { useEffect, useState } from 'react'; +import * as signalR from '@microsoft/signalr'; +import { NotifyMT4TransferToClientDto } from './types'; -const url = "https://demoApi.rushprofit.uk/hubs/clientHub"; +const url = 'https://demoApi.rushprofit.uk/hubs/clientHub'; // const url = "http://localhost:5000/hubs/clientHub"; export const ClientHub = () => { - const [token, setToken] = useState(""); + const [token, setToken] = useState(''); const [shouldInitConnection, setShouldInitConnection] = useState(false); - const [hubConnection, setHubConnection] = - useState(null); + const [hubConnection, setHubConnection] = useState(null); useEffect(() => { if (!shouldInitConnection || !token) { + console.log(hubConnection); return; } @@ -27,19 +27,14 @@ export const ClientHub = () => { connection .start() .then(() => { - console.log("Connection started!"); + console.log('Connection started!'); setHubConnection(connection); }) - .catch((err) => - console.log("Error while establishing connection :( ", err) - ); + .catch((err) => console.log('Error while establishing connection :( ', err)); - connection.on( - "NotifyMT4Transfer", - (message: NotifyMT4TransferToClientDto) => { - console.log("NotifyMT4Transfer: ", message); - } - ); + connection.on('NotifyMT4Transfer', (message: NotifyMT4TransferToClientDto) => { + console.log('NotifyMT4Transfer: ', message); + }); return () => { connection.stop(); @@ -49,8 +44,8 @@ export const ClientHub = () => {

    ClientHub

    setToken(e.target.value)} /> diff --git a/src/pages/Realtime/MT4.Pumping.tsx b/src/pages/Realtime/MT4.Pumping.tsx index 8e3f535..36e6d89 100644 --- a/src/pages/Realtime/MT4.Pumping.tsx +++ b/src/pages/Realtime/MT4.Pumping.tsx @@ -1,17 +1,17 @@ /* eslint-disable */ -import { useEffect, useState } from "react"; -import * as signalR from "@microsoft/signalr"; +import { useEffect, useState } from 'react'; +import * as signalR from '@microsoft/signalr'; -const url = "https://demoApi.rushprofit.uk/hubs/marketData"; +const url = 'https://demoApi.rushprofit.uk/hubs/marketData'; export const MT4Pumping = () => { - const [token, setToken] = useState(""); + const [token, setToken] = useState(''); const [shouldInitConnection, setShouldInitConnection] = useState(false); - const [hubConnection, setHubConnection] = - useState(null); + const [hubConnection, setHubConnection] = useState(null); useEffect(() => { if (!shouldInitConnection || !token) { + console.log(hubConnection); return; } @@ -25,15 +25,13 @@ export const MT4Pumping = () => { connection .start() .then(() => { - console.log("Connection started!"); + console.log('Connection started!'); setHubConnection(connection); }) - .catch((err) => - console.log("Error while establishing connection :( ", err) - ); + .catch((err) => console.log('Error while establishing connection :( ', err)); - connection.on("BidAskUpdate", (message) => { - console.log("BidAskUpdate: ", message); + connection.on('BidAskUpdate', (message) => { + console.log('BidAskUpdate: ', message); }); return () => { @@ -44,8 +42,8 @@ export const MT4Pumping = () => {

    MT4pumping

    setToken(e.target.value)} /> diff --git a/src/pages/Realtime/MarketDataHub.tsx b/src/pages/Realtime/MarketDataHub.tsx index f138343..87a6d9d 100644 --- a/src/pages/Realtime/MarketDataHub.tsx +++ b/src/pages/Realtime/MarketDataHub.tsx @@ -1,19 +1,19 @@ /* eslint-disable */ -import { useEffect, useState } from "react"; +import { useEffect, useState } from 'react'; import * as signalR from '@microsoft/signalr'; -import { MarketDataDto } from "./types"; +import { MarketDataDto } from './types'; // const url = "https://demoApi.rushprofit.uk/hubs/marketData"; -const url = "http://demoApi.rushprofit.uk/hubs/marketData"; +const url = 'http://demoApi.rushprofit.uk/hubs/marketData'; export const MarketDataHub = () => { - const [token, setToken] = useState(""); + const [token, setToken] = useState(''); const [shouldInitConnection, setShouldInitConnection] = useState(false); - const [hubConnection, setHubConnection] = - useState(null); + const [hubConnection, setHubConnection] = useState(null); useEffect(() => { if (!shouldInitConnection || !token) { + console.log(hubConnection); return; } @@ -27,16 +27,14 @@ export const MarketDataHub = () => { connection .start() .then(() => { - console.log("Connection started!"); + console.log('Connection started!'); setHubConnection(connection); }) - .catch((err) => - console.log("Error while establishing connection :( ", err) - ); + .catch((err) => console.log('Error while establishing connection :( ', err)); // marketData - connection.on("BidAskUpdate", (message: MarketDataDto) => { - console.log("BidAskUpdate: ", message); + connection.on('BidAskUpdate', (message: MarketDataDto) => { + console.log('BidAskUpdate: ', message); }); return () => { connection.stop(); @@ -46,8 +44,8 @@ export const MarketDataHub = () => {

    MarketDataHub

    setToken(e.target.value)} /> diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index 3bdd00c..bf0e4c7 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -14,7 +14,7 @@ import { authAPI } from '@/services/authAPI'; const { Title, Text } = Typography; -interface ILoginPageProps { } +interface ILoginPageProps {} const LoginPage: React.FunctionComponent = () => { const dispatch = useDispatch(); diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index 6feb80d..7d2910b 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -1,8 +1,7 @@ -import React from 'react'; +import React, { useState } from 'react'; import { Formik, Form, Field, ErrorMessage } from 'formik'; import * as Yup from 'yup'; import { message } from 'antd'; -import { getPassServ } from '@/services/getPassServ'; // Import service import { useThemeStore } from '@/store'; // Import useThemeStore import { authAPI } from '@/services/authAPI'; @@ -11,11 +10,10 @@ interface GetPassFormValues { } const GetPassword: React.FC = () => { - const { isDark } = useThemeStore(); // Lấy trạng thái theme - - const initialValues: GetPassFormValues = { - email: '', - }; + const { isDark } = useThemeStore(); + const initialValues: GetPassFormValues = { email: '' }; + const [canResend, setCanResend] = useState(true); + const [waitTime, setWaitTime] = useState(40); // wait time: 40s const validationSchema = Yup.object({ email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), @@ -23,7 +21,7 @@ const GetPassword: React.FC = () => { const handleSubmit = async (values: GetPassFormValues) => { try { - const response = await authAPI.sendMailConfirmResetPassword(values.email); // Sử dụng service + const response = await authAPI.sendMailConfirmResetPassword(values.email); // use service message.success(`${response.data.message}Please check your email`); console.log('Response:', response.data); } catch (error) { @@ -39,6 +37,29 @@ const GetPassword: React.FC = () => { // console.error('Error sending email:', error); // } // }; + const handleResend = async () => { + if (!canResend) return; + setCanResend(false); + setWaitTime(40); // Đặt lại thời gian chờ + try { + const response = await authAPI.resendEmail(initialValues.email); + message.success(`${response.data.message}Please check your email`); + console.log('Response:', response.data); + } catch (error) { + console.error('Error sending email:', error); + } + + const timer = setInterval(() => { + setWaitTime((prev) => { + if (prev <= 1) { + clearInterval(timer); + setCanResend(true); + return 40; // Đặt lại thời gian chờ + } + return prev - 1; // Giảm 1 giây + }); + }, 1000); + }; return ( <> @@ -76,8 +97,9 @@ const GetPassword: React.FC = () => {
    @@ -95,17 +117,11 @@ const GetPassword: React.FC = () => {
    diff --git a/src/pages/login/components/ResendMailSignUp.tsx b/src/pages/login/components/ResendMailSignUp.tsx index 8a85639..23602c5 100644 --- a/src/pages/login/components/ResendMailSignUp.tsx +++ b/src/pages/login/components/ResendMailSignUp.tsx @@ -1,8 +1,8 @@ -import React from 'react'; +import React, { useState } from 'react'; import { Formik, Form, Field, ErrorMessage } from 'formik'; import * as Yup from 'yup'; import { message } from 'antd'; -import { getPassServ } from '@/services/getPassServ'; // Import service +import { authAPI } from '@/services/authAPI'; // Import service import { useThemeStore } from '@/store'; // Import useThemeStore interface ResendMailSignUpFormValues { @@ -10,7 +10,9 @@ interface ResendMailSignUpFormValues { } const ResendMailSignUp: React.FC = () => { - const { isDark } = useThemeStore(); // Lấy trạng thái theme + const { isDark } = useThemeStore(); // Get themes status + const [canResend, setCanResend] = useState(true); + const [waitTime, setWaitTime] = useState(40); // wait time: 40s const initialValues: ResendMailSignUpFormValues = { email: '', @@ -22,7 +24,7 @@ const ResendMailSignUp: React.FC = () => { const handleSubmit = async (values: ResendMailSignUpFormValues) => { try { - const response = await getPassServ.resendEmail(values.email); // Sử dụng service + const response = await authAPI.sendMailConfirmResetPassword(values.email); //use service message.success(`${response.data.message}Please check your email`); console.log('Response:', response.data); } catch (error) { @@ -30,6 +32,30 @@ const ResendMailSignUp: React.FC = () => { } }; + const handleResend = async () => { + if (!canResend) return; + setCanResend(false); + setWaitTime(40); // Đặt lại thời gian chờ + try { + const response = await authAPI.resendEmail(initialValues.email); + message.success(`${response.data.message}Please check your email`); + console.log('Response:', response.data); + } catch (error) { + console.error('Error sending email:', error); + } + + const timer = setInterval(() => { + setWaitTime((prev) => { + if (prev <= 1) { + clearInterval(timer); + setCanResend(true); + return 40; // Đặt lại thời gian chờ + } + return prev - 1; // Giảm 1 giây + }); + }, 1000); + }; + return ( <>
    @@ -46,7 +72,7 @@ const ResendMailSignUp: React.FC = () => { htmlFor='email' className={`block text-sm text-start font-medium ${isDark ? 'text-white' : 'text-black'}`} > - Gửi lại email + 重發郵件 { isDark ? 'bg-gray-700 text-white hover:bg-gray-600' : 'bg-gray-200 text-black hover:bg-gray-300' }`} > - gửi lại + 重發
    )} +
    +
    +

    還沒有收到電子郵件嗎?

    +
    +
    + +
    +
    ); diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx index b193a21..b7966a7 100644 --- a/src/pages/login/components/SetPassword.tsx +++ b/src/pages/login/components/SetPassword.tsx @@ -4,7 +4,6 @@ import { message } from 'antd'; import * as Yup from 'yup'; import LoGo from '@/assets/logo.png'; import { Link, useLocation } from 'react-router-dom'; -import { getPassServ } from '@/services/getPassServ'; import { useNavigate } from 'react-router-dom'; import { authAPI } from '@/services/authAPI'; diff --git a/src/services/adminAPI.ts b/src/services/adminAPI.ts index e69de29..364aef8 100644 --- a/src/services/adminAPI.ts +++ b/src/services/adminAPI.ts @@ -0,0 +1,7 @@ +import { https } from './configServ'; + +export const adminAPI = { + loginAdServ: (data: any) => { + return https.post('/v1.0/auth/common/login', data); + }, +}; diff --git a/src/services/authAPI.ts b/src/services/authAPI.ts index 7e715de..3aa5db8 100644 --- a/src/services/authAPI.ts +++ b/src/services/authAPI.ts @@ -18,8 +18,8 @@ export const authAPI = { register: (data: RegisterData) => { return https.post('/v1.0/auth/register', data, { headers: { - "X-Client-Domain": "http://localhost:3001" - } + 'X-Client-Domain': 'http://localhost:3001', + }, }); }, confirmEmail: (data: ConfirmEmailData) => { @@ -36,5 +36,9 @@ export const authAPI = { }, resetPassword: (email: string, password: string, token: string | undefined) => { return https.post('/v1.0/client/reset-password', { email, password, token }); - } + }, + // Add this function in authAPI.ts + resendEmail: (email: string) => { + return https.post('/v1.0/auth/resendConfirmationEmail', { email }); + }, }; diff --git a/src/services/configServ.ts b/src/services/configServ.ts index bb17211..b54faf6 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -22,7 +22,7 @@ export const paymentApi = axios.create({ withCredentials: true, baseURL: import.meta.env.VITE_PAYMENT_ROOT }) -export const setupInterceptor = (store: Store) => { +export const setupInterceptor = () => { api.interceptors.request.use( (config) => { const token = localStorage.getItem('token'); diff --git a/src/utils/apiCall.ts b/src/utils/apiCall.ts index 74617e4..1d2499c 100644 --- a/src/utils/apiCall.ts +++ b/src/utils/apiCall.ts @@ -1,69 +1,65 @@ -import axios, { AxiosError } from 'axios'; +import axios from 'axios'; import { notification } from 'antd'; import { api } from '@/services/configServ'; // Define a type for the API error response interface ApiErrorResponse { - type?: string; - title: string; - status: number; - errors?: any; - errorCode?: number; + type?: string; + title: string; + status: number; + errors?: any; + errorCode?: number; } // Define a type for successful response -interface ApiResponse { - data: T; -} +// interface ApiResponse { +// data: T; +// } // Create a helper function for API calls -const apiCall = async ( - url: string, - method: 'GET' | 'POST' | 'PUT' | 'DELETE', - data?: any -): Promise => { - try { - // Making the API request - const response = await api({ - url, - method, - data, - }); - - // Trigger success notification - notification.success({ - message: 'Success', - description: 'Operation was successful!', - }); +const apiCall = async (url: string, method: 'GET' | 'POST' | 'PUT' | 'DELETE', data?: any): Promise => { + try { + // Making the API request + const response = await api({ + url, + method, + data, + }); - // Return the successful response data - return response.data as T; - } catch (error) { - // Handle errors and trigger error notification - if (axios.isAxiosError(error)) { - const errorPayload = error.response?.data as ApiErrorResponse; + // Trigger success notification + notification.success({ + message: 'Success', + description: 'Operation was successful!', + }); - if (errorPayload?.title) { - notification.error({ - message: 'Error', - description: errorPayload.title || 'An error occurred', - }); - } else { - notification.error({ - message: 'Error', - description: 'An unexpected error occurred', - }); - } - } else { - notification.error({ - message: 'Error', - description: 'Network error or server is down.', - }); - } + // Return the successful response data + return response.data as T; + } catch (error) { + // Handle errors and trigger error notification + if (axios.isAxiosError(error)) { + const errorPayload = error.response?.data as ApiErrorResponse; - // Optionally re-throw the error for further handling - throw error; + if (errorPayload?.title) { + notification.error({ + message: 'Error', + description: errorPayload.title || 'An error occurred', + }); + } else { + notification.error({ + message: 'Error', + description: 'An unexpected error occurred', + }); + } + } else { + notification.error({ + message: 'Error', + description: 'Network error or server is down.', + }); } + + // Optionally re-throw the error for further handling + throw error; + } }; export default apiCall; diff --git a/yarn.lock b/yarn.lock index 649bd3d..6be7b0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,7 +26,16 @@ dependencies: "@ctrl/tinycolor" "^3.6.1" -"@ant-design/cssinjs@^1.11.1": +"@ant-design/cssinjs-utils@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.0.tgz#5e85c16c1695e692f550b3e4b156cf70cac0b873" + integrity sha512-E9nOWObXx7Dy7hdyuYlOFaer/LtPO7oyZVxZphh0CYEslr5EmhJPM3WI0Q2RBHRtYg6dSNqeSK73kvZjPN3IMQ== + dependencies: + "@ant-design/cssinjs" "^1.21.0" + "@babel/runtime" "^7.23.2" + rc-util "^5.38.0" + +"@ant-design/cssinjs@^1.11.1", "@ant-design/cssinjs@^1.21.1": version "1.21.1" resolved "https://registry.yarnpkg.com/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz#7320813c5f747e0cde52c388eff5198d78d57230" integrity sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg== @@ -52,12 +61,19 @@ rc-util "^5.35.0" stylis "^4.0.13" +"@ant-design/fast-color@^2.0.6": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@ant-design/fast-color/-/fast-color-2.0.6.tgz#ab4d4455c1542c9017d367c2fa8ca3e4215d0ba2" + integrity sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA== + dependencies: + "@babel/runtime" "^7.24.7" + "@ant-design/icons-svg@^4.4.0": version "4.4.2" resolved "https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz#ed2be7fb4d82ac7e1d45a54a5b06d6cecf8be6f6" integrity sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA== -"@ant-design/icons@^5.0.0": +"@ant-design/icons@^5.0.0", "@ant-design/icons@^5.5.1": version "5.5.1" resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.5.1.tgz#4ff57b2a0d3bafae3d990c2781fd857ead36c935" integrity sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w== @@ -68,7 +84,7 @@ classnames "^2.2.6" rc-util "^5.31.1" -"@ant-design/icons@^5.3.6", "@ant-design/icons@^5.3.7": +"@ant-design/icons@^5.3.6": version "5.3.7" resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-5.3.7.tgz#d9f3654bf7934ee5faba43f91b5a187f5309ec68" integrity sha512-bCPXTAg66f5bdccM4TT21SQBDO1Ek2gho9h3nO9DAKXJP4sq+5VBjrQMSxMVXSB3HyEz+cUbHQ5+6ogxCOpaew== @@ -104,7 +120,7 @@ rc-resize-observer "^1.0.0" rc-util "^5.4.0" -"@ant-design/pro-components@^2.7.1": +"@ant-design/pro-components@^2.7.19": version "2.7.19" resolved "https://registry.yarnpkg.com/@ant-design/pro-components/-/pro-components-2.7.19.tgz#197513f73d1463d70a60dda95c99ebc7a048dfee" integrity sha512-C/xf7VhZEMZsphT9i6DsjjwQYAEj0u77n7WYtd9/HLfJyQ2h9maORnd1z+BSmBZ58IWb18wPbiODUjNXT/toMw== @@ -158,19 +174,18 @@ integrity sha512-Tn5pT8Pi5kkjr9aotezJdiRkJPgv53nyZK5qx6mwQMnI8zqTXarK22plrVEZXuFoLC1qwuAchmy4ofqAsBLx7w== dependencies: "@ant-design/icons" "^5.0.0" + "@ant-design/pro-field" "2.16.2" "@ant-design/pro-provider" "2.14.9" "@ant-design/pro-utils" "2.15.18" "@babel/runtime" "^7.18.0" - "@umijs/route-utils" "^4.0.0" + "@chenshuai2144/sketch-color" "^1.0.7" "@umijs/use-params" "^1.0.9" classnames "^2.3.2" + dayjs "^1.11.10" lodash-es "^4.17.21" omit.js "^2.0.2" - path-to-regexp "8.0.0" rc-resize-observer "^1.1.0" rc-util "^5.0.6" - swr "^2.0.0" - warning "^4.0.3" "@ant-design/pro-layout@7.20.2", "@ant-design/pro-layout@^7.19.0": version "7.20.2" @@ -196,6 +211,7 @@ version "2.5.69" resolved "https://registry.yarnpkg.com/@ant-design/pro-list/-/pro-list-2.5.69.tgz#e6c1eb20bdecc019e38f974a5b2b7df1557e2eb8" integrity sha512-jd5slgWw9hV/f1XhFjuHfsdS9fh81lTRhBzJDlgFqZaFNKo++S2c8wX5FbpNzYCu+XIfVTVt8EXvz8j4lPiG0g== + dependencies: "@ant-design/icons" "^5.0.0" "@ant-design/pro-card" "2.8.8" "@ant-design/pro-field" "2.16.2" @@ -275,9 +291,9 @@ throttle-debounce "^5.0.0" "@antv/component@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@antv/component/-/component-2.0.1.tgz#795f22fafcc1ffb074a9b7dbee3622c7e2ef8c5e" - integrity sha512-VldsSv2O/JNjZYenFIzmtLeC+KD2RcpNARsCLKpi04Iz26joQ3uMtnwxM5W4bd/SCJYKp+eeQeMHMAbwaNR1pw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@antv/component/-/component-2.0.4.tgz#3e8267158882378020d892afca554afc45383d91" + integrity sha512-1bqDP98gCZhgAK34SGjQk2LI0BoY+VPA3iO74hM+bjSug33V99baoB29ahO+E/upf/o0aiOhkYN/lM3zWKeCxg== dependencies: "@antv/g" "^6.0.5" "@antv/scale" "^0.4.3" @@ -298,42 +314,42 @@ resolved "https://registry.yarnpkg.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz#3e06323b9dcd55a3241ddc7c5458cfabd2095164" integrity sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg== -"@antv/g-camera-api@2.0.9": - version "2.0.9" - resolved "https://registry.yarnpkg.com/@antv/g-camera-api/-/g-camera-api-2.0.9.tgz#7c1d935ca20f98ca6dfa692bab07e504b9db9202" - integrity sha512-ixeF5lypyNqZ6Btua6FC7w3YvGi+WnmtDIAalByaM8lGDlYroZNYQTsOeVE4JsS15kjQwEe+GYs+e0jWgdXpeg== +"@antv/g-camera-api@2.0.13": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@antv/g-camera-api/-/g-camera-api-2.0.13.tgz#1f32da4004e7ddf17149e97a7eff0142f0a87000" + integrity sha512-E+gnPwViM1NOrlDUYErgxhQhxqK43dSjXEwJ5WdL689gJviT1BUebQWTCulwq8WQK7wLZO3tQzlkm/sr4xv9Tw== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" "@antv/g-canvas@^2.0.0": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@antv/g-canvas/-/g-canvas-2.0.8.tgz#b74fbab77c0d31fc7326f6601eac5ed2df0ff499" - integrity sha512-XyzFGq3xqIRxEnIIU310FyOyuNAuUKyh93plgkRkF2dOCpS3RAVQRRxD1vnG47NShwjfo3Pn0qiIKTSyxGXQZg== - dependencies: - "@antv/g-lite" "2.0.6" - "@antv/g-plugin-canvas-path-generator" "2.0.6" - "@antv/g-plugin-canvas-picker" "2.0.7" - "@antv/g-plugin-canvas-renderer" "2.0.7" - "@antv/g-plugin-dom-interaction" "2.0.6" - "@antv/g-plugin-html-renderer" "2.0.7" - "@antv/g-plugin-image-loader" "2.0.6" + version "2.0.15" + resolved "https://registry.yarnpkg.com/@antv/g-canvas/-/g-canvas-2.0.15.tgz#982aadb647e04580c591a97a53081a0f011533ed" + integrity sha512-sBLoIcf1HgysoNTmnjMicVfwW3NiVepu+SSBsycg6l7rVjsl+JXPIPpgMJhUR7aJpJahmI2mJS61wi8tNplGoA== + dependencies: + "@antv/g-lite" "2.0.11" + "@antv/g-plugin-canvas-path-generator" "2.0.10" + "@antv/g-plugin-canvas-picker" "2.0.12" + "@antv/g-plugin-canvas-renderer" "2.0.12" + "@antv/g-plugin-dom-interaction" "2.0.10" + "@antv/g-plugin-html-renderer" "2.0.12" + "@antv/g-plugin-image-loader" "2.0.10" "@antv/util" "^3.3.5" tslib "^2.5.3" -"@antv/g-dom-mutation-observer-api@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.6.tgz#6fc9669c4e5576214200aaa5e795993b92cc2d43" - integrity sha512-VIdXYxaIa82oqxLu2si+zaMq+UCU4CZS1sdtE4oROEe9uhA4vlZsynfnoOD+nw5RcTwKWx9nu1IxI/xsjFXUvw== +"@antv/g-dom-mutation-observer-api@2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@antv/g-dom-mutation-observer-api/-/g-dom-mutation-observer-api-2.0.10.tgz#4d7f33403d422b96352a8881cea0aaf1ebc3852c" + integrity sha512-Eas3+BYWxQoqChEF8zknijHDkOqQUY8mUCOKm0giedkJyswD3Ttddyon/DLuj1IYWX8h8TNPh9J8Gwf6dzyEGA== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" -"@antv/g-lite@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@antv/g-lite/-/g-lite-2.0.6.tgz#8554751bb0cc293c84f79786ca0041d5451e0394" - integrity sha512-7lYAtxrNHqtQIsBYCub6HLrMNm0828dzBed9Kge1hZtLbTL0weCmZBq/te/0lpdNDVeP/XqwYmT6toIi3sc0Ew== +"@antv/g-lite@2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@antv/g-lite/-/g-lite-2.0.11.tgz#6ee8c5efb94e19a2b76a0cb3a027505cbeea647e" + integrity sha512-H3zGfpt7S7wRRCYajuMzB+xMeCkadMEolt67WxdQDwR5ewWD04QZ7fjHP2mqJzco7YiMFSP6qYgOTyOygcgsrg== dependencies: "@antv/g-math" "3.0.0" "@antv/util" "^3.3.5" @@ -352,85 +368,85 @@ gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-canvas-path-generator@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.6.tgz#f2d4595de4c33d9e45581869e6c011f0a6cd23cd" - integrity sha512-wMRUPowlyp1t7u3aalBZM0gQXCrOVNqNpodOOwFPqe+M0qBpHmh9gUF1AtXyg3m84i4HCUFgmupJ9YZVCnZ2lg== +"@antv/g-plugin-canvas-path-generator@2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-path-generator/-/g-plugin-canvas-path-generator-2.0.10.tgz#41e47c49415bb26f64b82020b191b1201df5a5ff" + integrity sha512-f/lE8QeSrufT7Y9Xgb4MGDZ14tFtqpok0mlf6RH/woPABmYUZpHQ5Evvm3OK3kb42Jge84uDF3Dur1+kYkCygg== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/g-math" "3.0.0" "@antv/util" "^3.3.5" tslib "^2.5.3" -"@antv/g-plugin-canvas-picker@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.7.tgz#153294e357638beb457d484ffeb60a4f0d01924a" - integrity sha512-c1igCBXG4ZBvzxrTQ9DNxhYdA1gkzNv6JbTmT2ZDIBMxkLi1sD9jjEF00vc1+d2OHS3bpqmfpLkIniZCtAN3kA== +"@antv/g-plugin-canvas-picker@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-picker/-/g-plugin-canvas-picker-2.0.12.tgz#8237b8f71549f5ca0738232f0f15c64e1a5541d7" + integrity sha512-NgWzhDrdY9/N3QXGHgrcrg7SNewLHZe+rs/jno1DO4bwrY7I0JuQeUPHF34JJmdL421muiCyCTg1VoCjEY+ZyQ== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/g-math" "3.0.0" - "@antv/g-plugin-canvas-path-generator" "2.0.6" - "@antv/g-plugin-canvas-renderer" "2.0.7" + "@antv/g-plugin-canvas-path-generator" "2.0.10" + "@antv/g-plugin-canvas-renderer" "2.0.12" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-canvas-renderer@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.0.7.tgz#cfd0eb4695663be11b36366a75f621609265ff34" - integrity sha512-GcfAyCXrsBCOUWPx8MnyMN3TJ/ocb9APg6gO1LeN5F8YN0fpkKqxuhfHTtc5D1dCG0+8VQWSyI3HdkbOOhA3vA== +"@antv/g-plugin-canvas-renderer@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-canvas-renderer/-/g-plugin-canvas-renderer-2.0.12.tgz#11190b946bc9042217e668a24988da213d5e5779" + integrity sha512-ZRD+Ca2OhKpl21mdB0LaTrK1tt/FvUryjDM+cRZOGDwGoAu4YK33hI+l0HLqhexd19SGwRYJZD6djfc4sCJxKQ== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/g-math" "3.0.0" - "@antv/g-plugin-canvas-path-generator" "2.0.6" - "@antv/g-plugin-image-loader" "2.0.6" + "@antv/g-plugin-canvas-path-generator" "2.0.10" + "@antv/g-plugin-image-loader" "2.0.10" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-dom-interaction@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.0.6.tgz#568797e0396b13684c21d8b29403e9f5697ac7c6" - integrity sha512-tu9+PNPSc7JOO+rZ/Q7tTuPMbMXRsXg9AVVaB+PzwGuYYQmCfRuudtPa5+lVWzXaFc6wlThb4v9qeA2AerqeNw== +"@antv/g-plugin-dom-interaction@2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-dom-interaction/-/g-plugin-dom-interaction-2.0.10.tgz#da6dbbe662fe357874a905b9d4bdb21f1ced28e7" + integrity sha512-X9sKOzBAltLCLJmgw1iV04l8GvQH3doe65ohXvBSwomYo3VqZqBxVYTwWIGlTJhqdT9RccWFm4FRPhMjA9HaKQ== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" tslib "^2.5.3" "@antv/g-plugin-dragndrop@^2.0.0": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.6.tgz#065989d708e8695cd4e83e78907db4556e0a066c" - integrity sha512-qMrDbrGEnM66Qg/vwI+zNdhFNoN+pjzyZtO3MD+CjNQnEGpQqy1W9PNLpWcFE43BU5Z/JkoUtu6Oy5C/WKHBbQ== + version "2.0.10" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-dragndrop/-/g-plugin-dragndrop-2.0.10.tgz#bcb86ad802976f258a2415fe311db50a817bc3b0" + integrity sha512-q0UKEJrcNpHc1elVG/JT5NaiMer6HGLD+n+LJvZLWkZN4vnt0JveHAEqiasKxLtOW+BlbdgynIeyp9Dbk4t3vA== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/util" "^3.3.5" tslib "^2.5.3" -"@antv/g-plugin-html-renderer@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.0.7.tgz#c1c76719fbf4a7a7d2237403c512d5ce3d908401" - integrity sha512-j5zuVJ3cBm0VfJBTAtMa5GB159HSInBBXO3Nup4UVaKjl7JSL0Qkz5vZCvRX6rv6UD19+vH483v7JtQ+JXcgHA== +"@antv/g-plugin-html-renderer@2.0.12": + version "2.0.12" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-html-renderer/-/g-plugin-html-renderer-2.0.12.tgz#691c0dfef1a195bced8d6841405c3b3ba1d7ae25" + integrity sha512-69kYFsULhqTEvZgcXPEn5c+Ip8OjiC050ndfa9QNUBuLO3xipPbupLtPObp0jrcdimF6WnADm9Wh3e4W2nkMhw== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-plugin-image-loader@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.6.tgz#dc110a44085f29b78aa1d4076913ab79b5deb26b" - integrity sha512-lyJ157fDqH0iFBYwFGUxZNUOxN0vRV5hF7e0iK9ElvSEc2ovqpLi0UVwjAbA67eJwpd5Y771Go1sRfx0XJo87Q== +"@antv/g-plugin-image-loader@2.0.10": + version "2.0.10" + resolved "https://registry.yarnpkg.com/@antv/g-plugin-image-loader/-/g-plugin-image-loader-2.0.10.tgz#ae31ca7d2307c58d268085455ca63242c67a065c" + integrity sha512-LiNboU2ZAmfx6wbJCA2L9WsAevkaEWyJVL3DaSMuoPtrh6U4Im8xz083mryg5RxQ/sd7+ARk4kVeW7GRZbEl0w== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/util" "^3.3.5" gl-matrix "^3.4.3" tslib "^2.5.3" -"@antv/g-web-animations-api@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@antv/g-web-animations-api/-/g-web-animations-api-2.0.7.tgz#0f52dcdaf7732d5a01746e943e511cef4fe1a4ce" - integrity sha512-BpP86sTRAgNAWHDNajOhoM0YC2eL95iUFGcRftulrZ/8sqnTXF/M/I319vcznylwKNS37tzVmEppn76vS35UmQ== +"@antv/g-web-animations-api@2.0.11": + version "2.0.11" + resolved "https://registry.yarnpkg.com/@antv/g-web-animations-api/-/g-web-animations-api-2.0.11.tgz#a6db241470808609948fe5c7bb7755ca7ae7dbcd" + integrity sha512-29Q1u+6rE6kxoAxUkO6VdnwnOlI3VUwsFoPWC6h1lLJcPsf3rcDnW06RPrJ4WYQm2h4eTncaW6YcoI4LbfoNgg== dependencies: - "@antv/g-lite" "2.0.6" + "@antv/g-lite" "2.0.11" "@antv/util" "^3.3.5" tslib "^2.5.3" @@ -445,9 +461,9 @@ d3-hierarchy "^3.1.2" "@antv/g2@^5.1.18", "@antv/g2@^5.1.8": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-5.2.1.tgz#06a89f53107313abfab3321d31a06664f25682d7" - integrity sha512-Kb3e1ohkLxGEd0+yjc/2ff2hAzIUzUoSR+PP0riI1Pp+c6CobLiK68ji6aoCmfndQMDknvLYAZHSOL8OXc7ChA== + version "5.2.7" + resolved "https://registry.yarnpkg.com/@antv/g2/-/g2-5.2.7.tgz#fa131b0343a1a8a771b255d9efd57e2ded4a7503" + integrity sha512-bOU7ZJfa735KCqIsWWwlFtn3pc8TwJIckBhy7X8PFcxTuMIXzgqOt7vbMMdF4psBHMyIIOCDAo8zf9rGhgjEzA== dependencies: "@antv/component" "^2.0.0" "@antv/coord" "^0.4.6" @@ -455,7 +471,6 @@ "@antv/g" "^6.0.0" "@antv/g-canvas" "^2.0.0" "@antv/g-plugin-dragndrop" "^2.0.0" - "@antv/path-util" "^3.0.1" "@antv/scale" "^0.4.12" "@antv/util" "^3.3.5" d3-array "^3.2.4" @@ -467,29 +482,19 @@ d3-path "^3.1.0" d3-scale-chromatic "^3.0.0" d3-shape "^3.2.0" - d3-voronoi "^1.1.4" flru "^1.0.2" fmin "^0.0.2" pdfast "^0.2.0" "@antv/g@^6.0.0", "@antv/g@^6.0.5": - version "6.0.10" - resolved "https://registry.yarnpkg.com/@antv/g/-/g-6.0.10.tgz#34fd7f71b8709b1c25669e4411362de29bdfe5ec" - integrity sha512-VH45ddgHQhEzWZ4aDpHHcu6f77vIVKhfEMgHZzUL9bnMTmJ2P4qf0DtarhP6BKvxcHlFFpJcSyYSxTurNHvW5w== + version "6.0.14" + resolved "https://registry.yarnpkg.com/@antv/g/-/g-6.0.14.tgz#509d62a2efba9f9c27d3faf6dd0e91f3f41b426b" + integrity sha512-OMqo9eDB+Wku/Uj/cZU1va1d4pj3LwV68ChqrN3ozo4Xz2Pj7EoEV6o0/H8TGJthl4b9jp5k9dvI6nablvxdMg== dependencies: - "@antv/g-camera-api" "2.0.9" - "@antv/g-dom-mutation-observer-api" "2.0.6" - "@antv/g-lite" "2.0.6" - "@antv/g-web-animations-api" "2.0.7" - -"@antv/path-util@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@antv/path-util/-/path-util-3.0.1.tgz#42fd84222824e8ad8d1bde70f164a05924870d4a" - integrity sha512-tpvAzMpF9Qm6ik2YSMqICNU5tco5POOW7S4XoxZAI/B0L26adU+Md/SmO0BBo2SpuywKvzPH3hPT3xmoyhr04Q== - dependencies: - gl-matrix "^3.1.0" - lodash-es "^4.17.21" - tslib "^2.0.3" + "@antv/g-camera-api" "2.0.13" + "@antv/g-dom-mutation-observer-api" "2.0.10" + "@antv/g-lite" "2.0.11" + "@antv/g-web-animations-api" "2.0.11" "@antv/scale@^0.4.12", "@antv/scale@^0.4.3": version "0.4.16" @@ -509,29 +514,22 @@ tslib "^2.0.3" "@antv/util@^3.3.5", "@antv/util@^3.3.7": - version "3.3.7" - resolved "https://registry.yarnpkg.com/@antv/util/-/util-3.3.7.tgz#35a900f0e9b65defbb92ec0e92a20b8189a18815" - integrity sha512-qqPg7rIPCsJyl7N56jAC25v/99mJ3ApVkgBsGijhiWrEeKvzXBPk1r5P77Pm9nCljpnn+hH8Z3t5AivbEoTJMg== + version "3.3.10" + resolved "https://registry.yarnpkg.com/@antv/util/-/util-3.3.10.tgz#6fb2560c0f42df61f824e1f995a1ed1bdb00eb9a" + integrity sha512-basGML3DFA3O87INnzvDStjzS+n0JLEhRnRsDzP9keiXz8gT1z/fTdmJAZFOzMMWxy+HKbi7NbSt0+8vz/OsBQ== dependencies: fast-deep-equal "^3.1.3" gl-matrix "^3.3.0" tslib "^2.3.1" -"@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.7", "@babel/runtime@^7.24.8": - version "7.25.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" - integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== +"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.25.6": + version "7.25.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.7.tgz#7ffb53c37a8f247c8c4d335e89cdf16a2e0d0fb6" + integrity sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.10.4", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.7", "@babel/runtime@^7.20.0", "@babel/runtime@^7.21.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7": - version "7.24.8" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.8.tgz#5d958c3827b13cc6d05e038c07fb2e5e3420d82e" - integrity sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA== - dependencies: - regenerator-runtime "^0.14.0" - -"@chenshuai2144/sketch-color@^1.0.7", "@chenshuai2144/sketch-color@^1.0.8": +"@chenshuai2144/sketch-color@^1.0.8": version "1.0.9" resolved "https://registry.yarnpkg.com/@chenshuai2144/sketch-color/-/sketch-color-1.0.9.tgz#41144e2d9656bff2143516d4e8e62e5003bd466a" integrity sha512-obzSy26cb7Pm7OprWyVpgMpIlrZpZ0B7vbrU0RMbvRg0YAI890S5Xy02Aj1Nhl4+KTbi1lVYHt6HQP8Hm9s+1w== @@ -716,9 +714,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + version "4.11.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" + integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -740,17 +738,17 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== "@faker-js/faker@^8.4.1": version "8.4.1" resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-8.4.1.tgz#5d5e8aee8fce48f5e189bf730ebd1f758f491451" integrity sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg== -"@humanwhocodes/config-array@^0.11.13", "@humanwhocodes/config-array@^0.11.14": +"@humanwhocodes/config-array@^0.11.13": version "0.11.14" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== @@ -759,12 +757,21 @@ debug "^4.3.1" minimatch "^3.0.5" +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== + dependencies: + "@humanwhocodes/object-schema" "^2.0.3" + debug "^4.3.1" + minimatch "^3.0.5" + "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": +"@humanwhocodes/object-schema@^2.0.2", "@humanwhocodes/object-schema@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== @@ -866,6 +873,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -883,13 +895,13 @@ dependencies: "@babel/runtime" "^7.24.4" -"@rc-component/color-picker@~1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@rc-component/color-picker/-/color-picker-1.5.3.tgz#f3b0e14bb67ec5ee77d1fd5d261f63dd4fd00449" - integrity sha512-+tGGH3nLmYXTalVe0L8hSZNs73VTP5ueSHwUlDC77KKRaN7G4DS4wcpG5DTDzdcV/Yas+rzA6UGgIyzd8fS4cw== +"@rc-component/color-picker@~2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@rc-component/color-picker/-/color-picker-2.0.1.tgz#6b9b96152466a9d4475cbe72b40b594bfda164be" + integrity sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q== dependencies: + "@ant-design/fast-color" "^2.0.6" "@babel/runtime" "^7.23.6" - "@ctrl/tinycolor" "^3.6.1" classnames "^2.2.6" rc-util "^5.38.1" @@ -935,10 +947,10 @@ classnames "^2.3.2" rc-util "^5.38.0" -"@rc-component/tour@~1.15.0": - version "1.15.0" - resolved "https://registry.yarnpkg.com/@rc-component/tour/-/tour-1.15.0.tgz#37a66ae5af8eefaf0ab0e22ddd8e6fecdbdc14a7" - integrity sha512-h6hyILDwL+In9GAgRobwRWihLqqsD7Uft3fZGrJ7L4EiyCoxbnNYwzPXDfz7vNDhWeVyvAWQJj9fJCzpI4+b4g== +"@rc-component/tour@~1.15.1": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@rc-component/tour/-/tour-1.15.1.tgz#9b79808254185fc19e964172d99e25e8c6800ded" + integrity sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ== dependencies: "@babel/runtime" "^7.18.0" "@rc-component/portal" "^1.0.0-9" @@ -946,10 +958,10 @@ classnames "^2.3.2" rc-util "^5.24.4" -"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1", "@rc-component/trigger@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.2.0.tgz#503a48b0895a2cfddee0a5b7b11492c3df2a493d" - integrity sha512-QarBCji02YE9aRFhZgRZmOpXBj0IZutRippsVBv85sxvG4FGk/vRxwAlkn3MS9zK5mwbETd86mAVg2tKqTkdJA== +"@rc-component/trigger@^2.0.0", "@rc-component/trigger@^2.1.1", "@rc-component/trigger@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@rc-component/trigger/-/trigger-2.2.3.tgz#b47e945115e2d0a7f7e067dbb9ed76c91c1b4385" + integrity sha512-X1oFIpKoXAMXNDYCviOmTfuNuYxE4h5laBsyCqVAVMjNHxoF3/uiyA7XdegK1XbCvBbCZ6P6byWrEoDRpKL8+A== dependencies: "@babel/runtime" "^7.23.2" "@rc-component/portal" "^1.1.0" @@ -959,214 +971,219 @@ rc-util "^5.38.0" "@reduxjs/toolkit@^2.2.7": - version "2.2.7" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.7.tgz#199e3d10ccb39267cb5aee92c0262fd9da7fdfb2" - integrity sha512-faI3cZbSdFb8yv9dhDTmGwclW0vk0z5o1cia+kf7gCbaCwHI5e+7tP57mJUv22pNcNbeA62GSrPpfrUfdXcQ6g== + version "2.2.8" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-2.2.8.tgz#69e6473dd5a395860d387abdd53fe5a2add378c8" + integrity sha512-eK/ieXftPRQfaBSmzsamXEyDwkntMTY0e9SG5ETsEOv5JIPKhu3mj992t6B8FJjlnSrZBAAqdT8oMkPe4j+P9g== dependencies: immer "^10.0.3" redux "^5.0.1" redux-thunk "^3.1.0" reselect "^5.1.0" -"@remix-run/router@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.17.1.tgz#bf93997beb81863fde042ebd05013a2618471362" - integrity sha512-mCOMec4BKd6BRGBZeSnGiIgwsbLGp3yhVqAD8H+PxiRNEHgDpZb8J1TnrSDlg97t0ySKMQJTHCWBCmBpSmkF6Q== - -"@rollup/rollup-android-arm-eabi@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz#f0da481244b7d9ea15296b35f7fe39cd81157396" - integrity sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA== - -"@rollup/rollup-android-arm64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz#82ab3c575f4235fb647abea5e08eec6cf325964e" - integrity sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg== - -"@rollup/rollup-darwin-arm64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz#6a530452e68a9152809ce58de1f89597632a085b" - integrity sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ== - -"@rollup/rollup-darwin-x64@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz#47727479f5ca292cf434d7e75af2725b724ecbc7" - integrity sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA== - -"@rollup/rollup-linux-arm-gnueabihf@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz#46193c498aa7902a8db89ac00128060320e84fef" - integrity sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g== - -"@rollup/rollup-linux-arm-musleabihf@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz#22d831fe239643c1d05c98906420325cee439d85" - integrity sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ== - -"@rollup/rollup-linux-arm64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz#19abd33695ec9d588b4a858d122631433084e4a3" - integrity sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ== - -"@rollup/rollup-linux-arm64-musl@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz#d60af8c0b9be424424ff96a0ba19fce65d26f6ab" - integrity sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ== - -"@rollup/rollup-linux-powerpc64le-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz#b1194e5ed6d138fdde0842d126fccde74a90f457" - integrity sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ== - -"@rollup/rollup-linux-riscv64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz#f5a635c017b9bff8b856b0221fbd5c0e3373b7ec" - integrity sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg== - -"@rollup/rollup-linux-s390x-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz#f1043d9f4026bf6995863cb3f8dd4732606e4baa" - integrity sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg== - -"@rollup/rollup-linux-x64-gnu@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz#1e781730be445119f06c9df5f185e193bc82c610" - integrity sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g== - -"@rollup/rollup-linux-x64-musl@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz#08f12e1965d6f27d6898ff932592121cca6abc4b" - integrity sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ== - -"@rollup/rollup-win32-arm64-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz#4a5dcbbe7af7d41cac92b09798e7c1831da1f599" - integrity sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g== - -"@rollup/rollup-win32-ia32-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz#075b0713de627843a73b4cf0e087c56b53e9d780" - integrity sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg== - -"@rollup/rollup-win32-x64-msvc@4.18.1": - version "4.18.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz#0cb240c147c0dfd0e3eaff4cc060a772d39e155c" - integrity sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw== +"@remix-run/router@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.2.tgz#0c896535473291cb41f152c180bedd5680a3b273" + integrity sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA== + +"@rollup/rollup-android-arm-eabi@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz#1661ff5ea9beb362795304cb916049aba7ac9c54" + integrity sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA== + +"@rollup/rollup-android-arm64@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz#2ffaa91f1b55a0082b8a722525741aadcbd3971e" + integrity sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA== + +"@rollup/rollup-darwin-arm64@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz#627007221b24b8cc3063703eee0b9177edf49c1f" + integrity sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA== + +"@rollup/rollup-darwin-x64@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz#0605506142b9e796c370d59c5984ae95b9758724" + integrity sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ== + +"@rollup/rollup-linux-arm-gnueabihf@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz#62dfd196d4b10c0c2db833897164d2d319ee0cbb" + integrity sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA== + +"@rollup/rollup-linux-arm-musleabihf@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz#53ce72aeb982f1f34b58b380baafaf6a240fddb3" + integrity sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw== + +"@rollup/rollup-linux-arm64-gnu@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz#1632990f62a75c74f43e4b14ab3597d7ed416496" + integrity sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA== + +"@rollup/rollup-linux-arm64-musl@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz#8c03a996efb41e257b414b2e0560b7a21f2d9065" + integrity sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw== + +"@rollup/rollup-linux-powerpc64le-gnu@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz#5b98729628d5bcc8f7f37b58b04d6845f85c7b5d" + integrity sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw== + +"@rollup/rollup-linux-riscv64-gnu@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz#48e42e41f4cabf3573cfefcb448599c512e22983" + integrity sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg== + +"@rollup/rollup-linux-s390x-gnu@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz#e0b4f9a966872cb7d3e21b9e412a4b7efd7f0b58" + integrity sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g== + +"@rollup/rollup-linux-x64-gnu@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz#78144741993100f47bd3da72fce215e077ae036b" + integrity sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A== + +"@rollup/rollup-linux-x64-musl@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz#d9fe32971883cd1bd858336bd33a1c3ca6146127" + integrity sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ== + +"@rollup/rollup-win32-arm64-msvc@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz#71fa3ea369316db703a909c790743972e98afae5" + integrity sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ== + +"@rollup/rollup-win32-ia32-msvc@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz#653f5989a60658e17d7576a3996deb3902e342e2" + integrity sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ== + +"@rollup/rollup-win32-x64-msvc@4.24.0": + version "4.24.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818" + integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@swc/core-darwin-arm64@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.6.13.tgz#dba8f8f747ad32fdb58d5b3aec4f740354d32d1b" - integrity sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ== - -"@swc/core-darwin-x64@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.6.13.tgz#c120207a9ced298f7382ff711bac10f6541c1c82" - integrity sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag== - -"@swc/core-linux-arm-gnueabihf@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.6.13.tgz#7b15a1fd32c18dfaf76706632cf8d19146df0d5f" - integrity sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg== - -"@swc/core-linux-arm64-gnu@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.6.13.tgz#066b6e3c805110edb98e5125a222e3d866bf8f68" - integrity sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg== - -"@swc/core-linux-arm64-musl@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.6.13.tgz#43a08bc118f117e485e8a9a23d3cb51fe8b4e301" - integrity sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg== - -"@swc/core-linux-x64-gnu@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.6.13.tgz#0f7358c95f566db6ed8a4249a190043497f41323" - integrity sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ== - -"@swc/core-linux-x64-musl@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.6.13.tgz#6e11994ccf858edb3e70d2e8d700a5b1907a68fb" - integrity sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA== - -"@swc/core-win32-arm64-msvc@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.6.13.tgz#b9744644f02eb6519b0fe09031080cbf32174fb1" - integrity sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg== - -"@swc/core-win32-ia32-msvc@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.6.13.tgz#047302065096883f52b90052d93f9c7e63cdc67b" - integrity sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA== - -"@swc/core-win32-x64-msvc@1.6.13": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.6.13.tgz#efd9706c38aa7dc3515acfa823b8ffa9f4a3c1a6" - integrity sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ== - -"@swc/core@^1.5.7": - version "1.6.13" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.6.13.tgz#a583f614203d2350e6bb7f7c3c9c36c0e6f2a1da" - integrity sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw== +"@swc/core-darwin-arm64@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.7.26.tgz#5f4096c00e71771ca1b18c824f0c92a052c70760" + integrity sha512-FF3CRYTg6a7ZVW4yT9mesxoVVZTrcSWtmZhxKCYJX9brH4CS/7PRPjAKNk6kzWgWuRoglP7hkjQcd6EpMcZEAw== + +"@swc/core-darwin-x64@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.7.26.tgz#867b7a4f094e6b64201090ca5fcbf3da7d0f3e22" + integrity sha512-az3cibZdsay2HNKmc4bjf62QVukuiMRh5sfM5kHR/JMTrLyS6vSw7Ihs3UTkZjUxkLTT8ro54LI6sV6sUQUbLQ== + +"@swc/core-linux-arm-gnueabihf@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.7.26.tgz#35bb43894def296d92aaa2cc9372d48042f37777" + integrity sha512-VYPFVJDO5zT5U3RpCdHE5v1gz4mmR8BfHecUZTmD2v1JeFY6fv9KArJUpjrHEEsjK/ucXkQFmJ0jaiWXmpOV9Q== + +"@swc/core-linux-arm64-gnu@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.7.26.tgz#8e2321cc4ec84cbfed8f8e16ff1ed7b854450443" + integrity sha512-YKevOV7abpjcAzXrhsl+W48Z9mZvgoVs2eP5nY+uoMAdP2b3GxC0Df1Co0I90o2lkzO4jYBpTMcZlmUXLdXn+Q== + +"@swc/core-linux-arm64-musl@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.7.26.tgz#b1c16e4b23ffa9ff19973eda6ffee35d2a7de7b0" + integrity sha512-3w8iZICMkQQON0uIcvz7+Q1MPOW6hJ4O5ETjA0LSP/tuKqx30hIniCGOgPDnv3UTMruLUnQbtBwVCZTBKR3Rkg== + +"@swc/core-linux-x64-gnu@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.7.26.tgz#388e2cc13a010cd28787aead2cecf31eb491836d" + integrity sha512-c+pp9Zkk2lqb06bNGkR2Looxrs7FtGDMA4/aHjZcCqATgp348hOKH5WPvNLBl+yPrISuWjbKDVn3NgAvfvpH4w== + +"@swc/core-linux-x64-musl@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.7.26.tgz#51e0ff30981f26d7a5b97a7a7b5b291bad050d1a" + integrity sha512-PgtyfHBF6xG87dUSSdTJHwZ3/8vWZfNIXQV2GlwEpslrOkGqy+WaiiyE7Of7z9AvDILfBBBcJvJ/r8u980wAfQ== + +"@swc/core-win32-arm64-msvc@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.7.26.tgz#a7fdcc4074c34ee6a026506b594d00323383c11f" + integrity sha512-9TNXPIJqFynlAOrRD6tUQjMq7KApSklK3R/tXgIxc7Qx+lWu8hlDQ/kVPLpU7PWvMMwC/3hKBW+p5f+Tms1hmA== + +"@swc/core-win32-ia32-msvc@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.7.26.tgz#ae7be6dde798eebee2000b8fd84e01a439b5bd6a" + integrity sha512-9YngxNcG3177GYdsTum4V98Re+TlCeJEP4kEwEg9EagT5s3YejYdKwVAkAsJszzkXuyRDdnHUpYbTrPG6FiXrQ== + +"@swc/core-win32-x64-msvc@1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.7.26.tgz#310d607004d7319085a4dec20c0c38c3405cc05b" + integrity sha512-VR+hzg9XqucgLjXxA13MtV5O3C0bK0ywtLIBw/+a+O+Oc6mxFWHtdUeXDbIi5AiPbn0fjgVJMqYnyjGyyX8u0w== + +"@swc/core@^1.7.26": + version "1.7.26" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.7.26.tgz#beda9b82063fcec7b56c958804a4d175aecf9a9d" + integrity sha512-f5uYFf+TmMQyYIoxkn/evWhNGuUzC730dFwAKGwBVHHVoPyak1/GvJUm6i1SKl+2Hrj9oN0i3WSoWWZ4pgI8lw== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.9" + "@swc/types" "^0.1.12" optionalDependencies: - "@swc/core-darwin-arm64" "1.6.13" - "@swc/core-darwin-x64" "1.6.13" - "@swc/core-linux-arm-gnueabihf" "1.6.13" - "@swc/core-linux-arm64-gnu" "1.6.13" - "@swc/core-linux-arm64-musl" "1.6.13" - "@swc/core-linux-x64-gnu" "1.6.13" - "@swc/core-linux-x64-musl" "1.6.13" - "@swc/core-win32-arm64-msvc" "1.6.13" - "@swc/core-win32-ia32-msvc" "1.6.13" - "@swc/core-win32-x64-msvc" "1.6.13" + "@swc/core-darwin-arm64" "1.7.26" + "@swc/core-darwin-x64" "1.7.26" + "@swc/core-linux-arm-gnueabihf" "1.7.26" + "@swc/core-linux-arm64-gnu" "1.7.26" + "@swc/core-linux-arm64-musl" "1.7.26" + "@swc/core-linux-x64-gnu" "1.7.26" + "@swc/core-linux-x64-musl" "1.7.26" + "@swc/core-win32-arm64-msvc" "1.7.26" + "@swc/core-win32-ia32-msvc" "1.7.26" + "@swc/core-win32-x64-msvc" "1.7.26" "@swc/counter@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== -"@swc/types@^0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.9.tgz#e67cdcc2e4dd74a3cef4474b465eb398e7ae83e2" - integrity sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg== +"@swc/types@^0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.12.tgz#7f632c06ab4092ce0ebd046ed77ff7557442282f" + integrity sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA== dependencies: "@swc/counter" "^0.1.3" -"@tanstack/query-core@5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.51.1.tgz#55049ef0252c7d29de05e8219fd19b679509270e" - integrity sha512-fJBMQMpo8/KSsWW5ratJR5+IFr7YNJ3K2kfP9l5XObYHsgfVy1w3FJUWU4FT2fj7+JMaEg33zOcNDBo0LMwHnw== +"@tanstack/query-core@5.59.0": + version "5.59.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.59.0.tgz#d8323f1c6eb0e573ab0aa85a7b7690d0c263818a" + integrity sha512-WGD8uIhX6/deH/tkZqPNcRyAhDUqs729bWKoByYHSogcshXfFbppOdTER5+qY7mFvu8KEFJwT0nxr8RfPTVh0Q== -"@tanstack/query-devtools@5.51.1": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.51.1.tgz#80fb2b16cc11896b808d17b23487c43db38d22a8" - integrity sha512-rehG0WmL3EXER6MAI2uHQia/n0b5c3ZROohpYm7u3G7yg4q+HsfQy6nuAo6uy40NzHUe3FmnfWCZQ0Vb/3lE6g== +"@tanstack/query-devtools@5.58.0": + version "5.58.0" + resolved "https://registry.yarnpkg.com/@tanstack/query-devtools/-/query-devtools-5.58.0.tgz#5c68ce90562e154004de4372bc0a28fcd94cdf31" + integrity sha512-iFdQEFXaYYxqgrv63ots+65FGI+tNp5ZS5PdMU1DWisxk3fez5HG3FyVlbUva+RdYS5hSLbxZ9aw3yEs97GNTw== "@tanstack/react-query-devtools@^5.32.0": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.51.1.tgz#08889d7a9db90e4ce7470805f61764d218e2ef79" - integrity sha512-bRShIVKGpUOHpwziGKT8Aq1Ty0lIlGmNI7E0KbGYtmyOaImErpdElTdxfES1bRaI7i/j+mf2hLy+E6q7SrCwPg== + version "5.59.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query-devtools/-/react-query-devtools-5.59.0.tgz#93d7f65ee4aa13c799e2cea1a21285866c01485d" + integrity sha512-Kz7577FQGU8qmJxROIT/aOwmkTcxfBqgTP6r1AIvuJxVMVHPkp8eQxWQ7BnfBsy/KTJHiV9vMtRVo1+R1tB3vg== dependencies: - "@tanstack/query-devtools" "5.51.1" + "@tanstack/query-devtools" "5.58.0" "@tanstack/react-query@^5.32.0": - version "5.51.1" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.51.1.tgz#e483b9c9011e079b89cf73ce447b2e06340b3f41" - integrity sha512-s47HKFnQ4HOJAHoIiXcpna/roMMPZJPy6fJ6p4ZNVn8+/onlLBEDd1+xc8OnDuwgvecqkZD7Z2mnSRbcWefrKw== + version "5.59.0" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.59.0.tgz#5dcc21cfb85ecad6dcb1bf2a616d2820c0b49754" + integrity sha512-YDXp3OORbYR+8HNQx+lf4F73NoiCmCcSvZvgxE29OifmQFk0sBlO26NWLHpcNERo92tVk3w+JQ53/vkcRUY1hA== dependencies: - "@tanstack/query-core" "5.51.1" + "@tanstack/query-core" "5.59.0" -"@types/estree@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/hoist-non-react-statics@^3.3.1": version "3.3.5" @@ -1187,16 +1204,16 @@ integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== "@types/node@^20.12.7": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== + version "20.16.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.11.tgz#9b544c3e716b1577ac12e70f9145193f32750b33" + integrity sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" "@types/prop-types@*": - version "15.7.12" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" - integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== + version "15.7.13" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.13.tgz#2af91918ee12d9d32914feb13f5326658461b451" + integrity sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== "@types/react-dom@^18.2.22": version "18.3.0" @@ -1206,9 +1223,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.2.66": - version "18.3.3" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.3.tgz#9679020895318b0915d7a3ab004d92d33375c45f" - integrity sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw== + version "18.3.11" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.11.tgz#9d530601ff843ee0d7030d4227ea4360236bd537" + integrity sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -1406,11 +1423,11 @@ integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@vitejs/plugin-react-swc@^3.5.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.0.tgz#e456c0a6d7f562268e1d231af9ac46b86ef47d88" - integrity sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA== + version "3.7.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-react-swc/-/plugin-react-swc-3.7.1.tgz#bc5af48ef35c525d623fa14177c912cbaa86a846" + integrity sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg== dependencies: - "@swc/core" "^1.5.7" + "@swc/core" "^1.7.26" abort-controller@^3.0.0: version "3.0.0" @@ -1429,13 +1446,6 @@ acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== -add-dom-event-listener@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz#6a92db3a0dd0abc254e095c0f1dc14acbbaae310" - integrity sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw== - dependencies: - object-assign "4.x" - ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -1471,9 +1481,9 @@ ansi-regex@^5.0.1: integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^2.2.1: version "2.2.1" @@ -1498,58 +1508,59 @@ ansi-styles@^6.1.0: integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== antd@^5.16.5: - version "5.19.1" - resolved "https://registry.yarnpkg.com/antd/-/antd-5.19.1.tgz#5bd5ddef96f7b529ce37310ba9997032160d3443" - integrity sha512-ogGEUPaamSZ2HFGvlyLBNfxZ0c4uX5aqEIwMtmqRTPNjcLY/k+qdMmdWrMMiY1CDJ3j1in5wjzQTvREG+do65g== + version "5.21.2" + resolved "https://registry.yarnpkg.com/antd/-/antd-5.21.2.tgz#6933c508d885d4be8f38b8aec874d0bd96b66600" + integrity sha512-ZcyykH58xRkNp5oxFqn255VxrjLj6qG6czHJQPoDHqRdR9roSfWQGTiqYVb4Omg77WZHNgu17QrWzvL4Hp6/FA== dependencies: "@ant-design/colors" "^7.1.0" - "@ant-design/cssinjs" "^1.21.0" - "@ant-design/icons" "^5.3.7" + "@ant-design/cssinjs" "^1.21.1" + "@ant-design/cssinjs-utils" "^1.1.0" + "@ant-design/icons" "^5.5.1" "@ant-design/react-slick" "~1.1.2" - "@babel/runtime" "^7.24.7" + "@babel/runtime" "^7.25.6" "@ctrl/tinycolor" "^3.6.1" - "@rc-component/color-picker" "~1.5.3" + "@rc-component/color-picker" "~2.0.1" "@rc-component/mutate-observer" "^1.1.0" "@rc-component/qrcode" "~1.0.0" - "@rc-component/tour" "~1.15.0" - "@rc-component/trigger" "^2.2.0" + "@rc-component/tour" "~1.15.1" + "@rc-component/trigger" "^2.2.3" classnames "^2.5.1" copy-to-clipboard "^3.3.3" dayjs "^1.11.11" - rc-cascader "~3.27.0" + rc-cascader "~3.28.1" rc-checkbox "~3.3.0" - rc-collapse "~3.7.3" - rc-dialog "~9.5.2" + rc-collapse "~3.8.0" + rc-dialog "~9.6.0" rc-drawer "~7.2.0" rc-dropdown "~4.2.0" - rc-field-form "~2.2.1" - rc-image "~7.9.0" - rc-input "~1.5.1" - rc-input-number "~9.1.0" - rc-mentions "~2.14.0" - rc-menu "~9.14.1" - rc-motion "^2.9.2" - rc-notification "~5.6.0" - rc-pagination "~4.2.0" - rc-picker "~4.6.7" + rc-field-form "~2.4.0" + rc-image "~7.11.0" + rc-input "~1.6.3" + rc-input-number "~9.2.0" + rc-mentions "~2.16.1" + rc-menu "~9.15.1" + rc-motion "^2.9.3" + rc-notification "~5.6.2" + rc-pagination "~4.3.0" + rc-picker "~4.6.15" rc-progress "~4.0.0" rc-rate "~2.13.0" rc-resize-observer "^1.4.0" - rc-segmented "~2.3.0" - rc-select "~14.15.0" - rc-slider "~10.6.2" + rc-segmented "~2.5.0" + rc-select "~14.15.2" + rc-slider "~11.1.6" rc-steps "~6.0.1" rc-switch "~4.1.0" - rc-table "~7.45.7" - rc-tabs "~15.1.1" - rc-textarea "~1.7.0" - rc-tooltip "~6.2.0" - rc-tree "~5.8.8" - rc-tree-select "~5.22.1" - rc-upload "~4.5.2" + rc-table "~7.47.5" + rc-tabs "~15.3.0" + rc-textarea "~1.8.2" + rc-tooltip "~6.2.1" + rc-tree "~5.9.0" + rc-tree-select "~5.23.0" + rc-upload "~4.8.1" rc-util "^5.43.0" scroll-into-view-if-needed "^3.1.0" - throttle-debounce "^5.0.0" + throttle-debounce "^5.0.2" any-promise@^1.0.0: version "1.3.0" @@ -1623,7 +1634,7 @@ array.prototype.findlast@^1.2.4: es-object-atoms "^1.0.0" es-shim-unscopables "^1.0.2" -array.prototype.findlastindex@^1.2.3: +array.prototype.findlastindex@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== @@ -1701,15 +1712,15 @@ asynckit@^0.4.0: integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== autoprefixer@^10.4.19: - version "10.4.19" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.19.tgz#ad25a856e82ee9d7898c59583c1afeb3fa65f89f" - integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - browserslist "^4.23.0" - caniuse-lite "^1.0.30001599" + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" postcss-value-parser "^4.2.0" available-typed-arrays@^1.0.7: @@ -1719,26 +1730,24 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axe-core@^4.9.1: - version "4.9.1" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.9.1.tgz#fcd0f4496dad09e0c899b44f6c4bb7848da912ae" - integrity sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw== +axe-core@^4.10.0: + version "4.10.0" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.0.tgz#d9e56ab0147278272739a000880196cdfe113b59" + integrity sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g== axios@^1.6.8: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + version "1.7.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" + integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.1.1.tgz#3b6e5c6d4e43ca7ba51c5babf99d22a9c68485e1" - integrity sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg== - dependencies: - deep-equal "^2.0.5" +axobject-query@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-4.1.0.tgz#28768c76d0e3cff21bc62a9e2d0b6ac30042a1ee" + integrity sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== balanced-match@^1.0.0: version "1.0.2" @@ -1787,14 +1796,14 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.23.0: - version "4.23.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" - integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== +browserslist@^4.23.3: + version "4.24.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" + integrity sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A== dependencies: - caniuse-lite "^1.0.30001640" - electron-to-chromium "^1.4.820" - node-releases "^2.0.14" + caniuse-lite "^1.0.30001663" + electron-to-chromium "^1.5.28" + node-releases "^2.0.18" update-browserslist-db "^1.1.0" call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7, call-bind@~1.0.2: @@ -1823,10 +1832,10 @@ camelcase@^1.0.2: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g== -caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001640: - version "1.0.30001641" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz#3572862cd18befae3f637f2a1101cc033c6782ac" - integrity sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA== +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001663: + version "1.0.30001667" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz#99fc5ea0d9c6e96897a104a8352604378377f949" + integrity sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw== center-align@^0.1.1: version "0.1.3" @@ -1855,7 +1864,7 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3: +chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -1870,6 +1879,13 @@ chalk@^4.0.0: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" + integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== + dependencies: + readdirp "^4.0.1" + classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.5.1.tgz#ba774c614be0f016da105c858e7159eae8e7687b" @@ -2095,11 +2111,6 @@ d3-shape@^3.2.0: resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== -d3-voronoi@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" - integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== - damerau-levenshtein@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" @@ -2132,16 +2143,11 @@ data-view-byte-offset@^1.0.0: es-errors "^1.3.0" is-data-view "^1.0.1" -dayjs@^1.11.10: +dayjs@^1.11.10, dayjs@^1.11.11: version "1.11.13" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== -dayjs@^1.11.11: - version "1.11.11" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.11.tgz#dfe0e9d54c5f8b68ccf8ca5f72ac603e7e5ed59e" - integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== - debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -2149,12 +2155,12 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: - ms "2.1.2" + ms "^2.1.3" decamelize@^1.0.0: version "1.2.0" @@ -2308,10 +2314,10 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-to-chromium@^1.4.820: - version "1.4.827" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz#76068ed1c71dd3963e1befc8ae815004b2da6a02" - integrity sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ== +electron-to-chromium@^1.5.28: + version "1.5.33" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.33.tgz#8f64698661240e70fdbc4b032e6085e391f05e09" + integrity sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA== emoji-regex@^8.0.0: version "8.0.0" @@ -2323,10 +2329,10 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enhanced-resolve@^5.12.0: - version "5.17.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz#d037603789dd9555b89aaec7eb78845c49089bc5" - integrity sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA== +enhanced-resolve@^5.15.0: + version "5.17.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15" + integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -2496,10 +2502,10 @@ esbuild@^0.21.3: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" -escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-string-regexp@^1.0.2: version "1.0.5" @@ -2552,59 +2558,62 @@ eslint-import-resolver-node@^0.3.9: resolve "^1.22.4" eslint-import-resolver-typescript@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa" - integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg== - dependencies: - debug "^4.3.4" - enhanced-resolve "^5.12.0" - eslint-module-utils "^2.7.4" - fast-glob "^3.3.1" - get-tsconfig "^4.5.0" - is-core-module "^2.11.0" + version "3.6.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz#bb8e388f6afc0f940ce5d2c5fd4a3d147f038d9e" + integrity sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA== + dependencies: + "@nolyfill/is-core-module" "1.0.39" + debug "^4.3.5" + enhanced-resolve "^5.15.0" + eslint-module-utils "^2.8.1" + fast-glob "^3.3.2" + get-tsconfig "^4.7.5" + is-bun-module "^1.0.2" is-glob "^4.0.3" -eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== +eslint-module-utils@^2.12.0, eslint-module-utils@^2.8.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" eslint-plugin-import@^2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" eslint-plugin-jsx-a11y@^6.8.0: - version "6.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz#67ab8ff460d4d3d6a0b4a570e9c1670a0a8245c8" - integrity sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g== + version "6.10.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.0.tgz#36fb9dead91cafd085ddbe3829602fb10ef28339" + integrity sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg== dependencies: aria-query "~5.1.3" array-includes "^3.1.8" array.prototype.flatmap "^1.3.2" ast-types-flow "^0.0.8" - axe-core "^4.9.1" - axobject-query "~3.1.1" + axe-core "^4.10.0" + axobject-query "^4.1.0" damerau-levenshtein "^1.0.8" emoji-regex "^9.2.2" es-iterator-helpers "^1.0.19" @@ -2617,12 +2626,12 @@ eslint-plugin-jsx-a11y@^6.8.0: string.prototype.includes "^2.0.0" eslint-plugin-prettier@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz#d1c8f972d8f60e414c25465c163d16f209411f95" + integrity sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" + synckit "^0.9.1" eslint-plugin-react-hooks@4.6.0: version "4.6.0" @@ -2630,9 +2639,9 @@ eslint-plugin-react-hooks@4.6.0: integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== eslint-plugin-react-refresh@^0.4.6: - version "0.4.8" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.8.tgz#3b1db9188844101213ca637f181e84a016e36732" - integrity sha512-MIKAclwaDFIiYtVBLzDdm16E+Ty4GwhB6wZlCAG1R3Ur+F9Qbo6PRxpA5DK7XtDgm+WlCoAY2WxAwqhmIDHg6Q== + version "0.4.12" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz#73d61c7fcbe3f7280edb6579380b4350d2f547ed" + integrity sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg== eslint-plugin-react@7.34.1: version "7.34.1" @@ -2716,15 +2725,15 @@ eslint@8.56.0: text-table "^0.2.0" eslint@^8.7.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -2817,7 +2826,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: +fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -2911,9 +2920,9 @@ fmin@^0.0.2: uglify-js "^2.6.2" follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" @@ -2923,9 +2932,9 @@ for-each@^0.3.3, for-each@~0.3.3: is-callable "^1.1.3" foreground-child@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7" - integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA== + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== dependencies: cross-spawn "^7.0.0" signal-exit "^4.0.1" @@ -2973,7 +2982,7 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: +function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== @@ -3008,14 +3017,14 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" -get-tsconfig@^4.5.0: - version "4.7.5" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.5.tgz#5e012498579e9a6947511ed0cd403272c7acbbaf" - integrity sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw== +get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.8.1.tgz#8995eb391ae6e1638d251118c7b56de7eb425471" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== dependencies: resolve-pkg-maps "^1.0.0" -gl-matrix@^3.1.0, gl-matrix@^3.3.0, gl-matrix@^3.4.3: +gl-matrix@^3.3.0, gl-matrix@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.4.3.tgz#fc1191e8320009fd4d20e9339595c6041ddc22c9" integrity sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA== @@ -3175,9 +3184,9 @@ hyphenate-style-name@^1.0.0: integrity sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw== i18next@^23.11.5: - version "23.11.5" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.11.5.tgz#d71eb717a7e65498d87d0594f2664237f9e361ef" - integrity sha512-41pvpVbW9rhZPk5xjCX2TPJi2861LEig/YRhUkY+1FQ2IQPS0bKUDYnEqY8XPPbB48h1uIwLnP9iiEfuSl20CA== + version "23.15.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.15.2.tgz#8a54f877ccbbc46696eacb5bd5b31d84f9ade7cb" + integrity sha512-zcPSWzCvw6uKnuYHIqs4W7hTuB9e3AFcSdZgvCWoPXIZsBjBd4djN2/2uOHIB+1DFFkQnMBXvhNg7J3WyCuywQ== dependencies: "@babel/runtime" "^7.23.2" @@ -3194,9 +3203,9 @@ idb-keyval@^6.2.0: integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immediate@~3.0.5: version "3.0.6" @@ -3209,9 +3218,9 @@ immer@^10.0.3: integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== immutable@^4.0.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.6.tgz#6a05f7858213238e587fb83586ffa3b4b27f0447" - integrity sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ== + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== import-fresh@^3.2.1: version "3.3.0" @@ -3313,15 +3322,22 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-bun-module@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-bun-module/-/is-bun-module-1.2.1.tgz#495e706f42e29f086fd5fe1ac3c51f106062b9fc" + integrity sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q== + dependencies: + semver "^7.6.3" + is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" - integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== +is-core-module@^2.13.0, is-core-module@^2.15.1: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== dependencies: hasown "^2.0.2" @@ -3479,9 +3495,9 @@ isexe@^2.0.0: integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iterator.prototype@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.2.tgz#5e29c8924f01916cb9335f1ff80619dcff22b0c0" - integrity sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w== + version "1.1.3" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.3.tgz#016c2abe0be3bbdb8319852884f60908ac62bf9c" + integrity sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ== dependencies: define-properties "^1.2.1" get-intrinsic "^1.2.1" @@ -3660,9 +3676,9 @@ loglevel-colored-level-prefix@^1.0.0: loglevel "^1.4.1" loglevel@^1.4.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" - integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== + version "1.9.2" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" + integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg== longest@^1.0.1: version "1.0.1" @@ -3699,9 +3715,9 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" @@ -3761,12 +3777,7 @@ mock-property@~1.0.0: hasown "^2.0.0" isarray "^2.0.5" -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -3797,10 +3808,10 @@ node-fetch@^2.6.7, node-fetch@^2.6.9: dependencies: whatwg-url "^5.0.0" -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -3826,7 +3837,7 @@ numbro@^2.5.0: dependencies: bignumber.js "^8 || ^9" -object-assign@4.x, object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -3888,7 +3899,7 @@ object.fromentries@^2.0.7, object.fromentries@^2.0.8: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.groupby@^1.0.1: +object.groupby@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== @@ -3906,7 +3917,7 @@ object.hasown@^1.1.3: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.values@^1.1.6, object.values@^1.1.7: +object.values@^1.1.6, object.values@^1.1.7, object.values@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== @@ -3959,9 +3970,9 @@ p-locate@^5.0.0: p-limit "^3.0.2" package-json-from-dist@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00" - integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw== + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parent-module@^1.0.0: version "1.0.1" @@ -4013,10 +4024,10 @@ pdfast@^0.2.0: resolved "https://registry.yarnpkg.com/pdfast/-/pdfast-0.2.0.tgz#8cbc556e1bf2522177787c0de2e0d4373ba885c9" integrity sha512-cq6TTu6qKSFUHwEahi68k/kqN2mfepjkGrG9Un70cgdRRKLKY6Rf8P8uvP2NvZktaQZNF3YE7agEkLj0vGK9bA== -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" + integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" @@ -4063,16 +4074,16 @@ postcss-load-config@^4.0.1: yaml "^2.3.4" postcss-nested@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.0.1.tgz#f83dc9846ca16d2f4fa864f16e9d9f7d0961662c" - integrity sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ== + version "6.2.0" + resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" + integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== dependencies: - postcss-selector-parser "^6.0.11" + postcss-selector-parser "^6.1.1" -postcss-selector-parser@^6.0.11: - version "6.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz#5be94b277b8955904476a2400260002ce6c56e38" - integrity sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg== +postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -4082,14 +4093,14 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^8.4.23, postcss@^8.4.38, postcss@^8.4.39: - version "8.4.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.39.tgz#aa3c94998b61d3a9c259efa51db4b392e1bde0e3" - integrity sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw== +postcss@^8.4.23, postcss@^8.4.38, postcss@^8.4.43: + version "8.4.47" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" + integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== dependencies: nanoid "^3.3.7" - picocolors "^1.0.1" - source-map-js "^1.2.0" + picocolors "^1.1.0" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" @@ -4127,9 +4138,9 @@ prettier@3.1.0: integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== prettier@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" - integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== pretty-format@^29.7.0: version "29.7.0" @@ -4140,7 +4151,7 @@ pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" -prop-types@^15.5.10, prop-types@^15.6.1, prop-types@^15.8.1: +prop-types@^15.6.1, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -4191,16 +4202,16 @@ rbush@^3.0.1: dependencies: quickselect "^2.0.0" -rc-cascader@~3.27.0: - version "3.27.0" - resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.27.0.tgz#efb1a3c20e0d834b5b0b0b5dd3a9abf16ffa3860" - integrity sha512-z5uq8VvQadFUBiuZJ7YF5UAUGNkZtdEtcEYiIA94N/Kc2MIKr6lEbN5HyVddvYSgwWlKqnL6pH5bFXFuIK3MNg== +rc-cascader@~3.28.1: + version "3.28.1" + resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-3.28.1.tgz#ea8a3de60521290096bab7e3fbe8ca097b976468" + integrity sha512-9+8oHIMWVLHxuaapDiqFNmD9KSyKN/P4bo9x/MBuDbyTqP8f2/POmmZxdXWBO3yq/uE3pKyQCXYNUxrNfHRv2A== dependencies: "@babel/runtime" "^7.12.5" array-tree-filter "^2.1.0" classnames "^2.3.1" rc-select "~14.15.0" - rc-tree "~5.8.1" + rc-tree "~5.9.0" rc-util "^5.37.0" rc-checkbox@~3.3.0: @@ -4212,20 +4223,20 @@ rc-checkbox@~3.3.0: classnames "^2.3.2" rc-util "^5.25.2" -rc-collapse@~3.7.3: - version "3.7.3" - resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.7.3.tgz#68161683d8fd1004bef4eb281fc106f3c8dc16eb" - integrity sha512-60FJcdTRn0X5sELF18TANwtVi7FtModq649H11mYF1jh83DniMoM4MqY627sEKRCTm4+WXfGDcB7hY5oW6xhyw== +rc-collapse@~3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/rc-collapse/-/rc-collapse-3.8.0.tgz#02bcf81e1601aa185cd3b9fab0ceefd8dc11aefb" + integrity sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-motion "^2.3.4" rc-util "^5.27.0" -rc-dialog@~9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.5.2.tgz#4cf7cca23aedb6fd3d9344ea8ffd14daa94ee3a0" - integrity sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw== +rc-dialog@~9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/rc-dialog/-/rc-dialog-9.6.0.tgz#dc7a255c6ad1cb56021c3a61c7de86ee88c7c371" + integrity sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/portal" "^1.0.0-8" @@ -4254,64 +4265,64 @@ rc-dropdown@~4.2.0: classnames "^2.2.6" rc-util "^5.17.0" -rc-field-form@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-2.2.1.tgz#0a8c76a0103535c229311dac7f91d32ea13cd3bc" - integrity sha512-uoNqDoR7A4tn4QTSqoWPAzrR7ZwOK5I+vuZ/qdcHtbKx+ZjEsTg7QXm2wk/jalDiSksAQmATxL0T5LJkRREdIA== +rc-field-form@~2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/rc-field-form/-/rc-field-form-2.4.0.tgz#26997160d12ae43a94c356c1290bfc011c69b3ca" + integrity sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg== dependencies: "@babel/runtime" "^7.18.0" "@rc-component/async-validator" "^5.0.3" rc-util "^5.32.2" -rc-image@~7.9.0: - version "7.9.0" - resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-7.9.0.tgz#2d700a5cf891bb3d0d800b7c38348927ebb9f49b" - integrity sha512-l4zqO5E0quuLMCtdKfBgj4Suv8tIS011F5k1zBBlK25iMjjiNHxA0VeTzGFtUZERSA45gvpXDg8/P6qNLjR25g== +rc-image@~7.11.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/rc-image/-/rc-image-7.11.0.tgz#18c77ea557a6fdbe26856c688a9aace1505c0e77" + integrity sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw== dependencies: "@babel/runtime" "^7.11.2" "@rc-component/portal" "^1.0.2" classnames "^2.2.6" - rc-dialog "~9.5.2" + rc-dialog "~9.6.0" rc-motion "^2.6.2" rc-util "^5.34.1" -rc-input-number@~9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-9.1.0.tgz#fd577db284b65548c156500322a2feaa04321565" - integrity sha512-NqJ6i25Xn/AgYfVxynlevIhX3FuKlMwIFpucGG1h98SlK32wQwDK0zhN9VY32McOmuaqzftduNYWWooWz8pXQA== +rc-input-number@~9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/rc-input-number/-/rc-input-number-9.2.0.tgz#7e9344ff054421d2bfff0eebd7c1b8ef22d12220" + integrity sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/mini-decimal" "^1.0.1" classnames "^2.2.5" - rc-input "~1.5.0" + rc-input "~1.6.0" rc-util "^5.40.1" -rc-input@~1.5.0, rc-input@~1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-1.5.1.tgz#36d37eb045f1fa17de7da1a3fab94edfa331ab92" - integrity sha512-+nOzQJDeIfIpNP/SgY45LXSKbuMlp4Yap2y8c+ZpU7XbLmNzUd6+d5/S75sA/52jsVE6S/AkhkkDEAOjIu7i6g== +rc-input@~1.6.0, rc-input@~1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/rc-input/-/rc-input-1.6.3.tgz#f1708fc3d5e68f95cb20faeb3eed1df8543cd444" + integrity sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-util "^5.18.1" -rc-mentions@~2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-2.14.0.tgz#7cad133de2e95b7478c0ebb5d2a4315dbe9bda29" - integrity sha512-qKR59FMuF8PK4ZqsbWX3UuA5P1M/snzyqV6Yt3y1DCFbCEdqUGIBgQp6vEfLCO6Z0RoRFlzXtCeSlBTcDDpg1A== +rc-mentions@~2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/rc-mentions/-/rc-mentions-2.16.1.tgz#5e54ebe3ce6cd79838846ff1c8cfaf2e7aa15cec" + integrity sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw== dependencies: "@babel/runtime" "^7.22.5" "@rc-component/trigger" "^2.0.0" classnames "^2.2.6" - rc-input "~1.5.0" - rc-menu "~9.14.0" - rc-textarea "~1.7.0" + rc-input "~1.6.0" + rc-menu "~9.15.1" + rc-textarea "~1.8.0" rc-util "^5.34.1" -rc-menu@~9.14.0, rc-menu@~9.14.1: - version "9.14.1" - resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.14.1.tgz#5c2aea72bdce421e9d50bf721ad8b76c154ae66f" - integrity sha512-5wlRb3M8S4yGlWhSoEYJ7ZVRElyScdcpUHxgiLxkeig1tEdyKrnED3B2fhpN0Rrpdp9jyhnmZR/Lwq2fH5VvDQ== +rc-menu@~9.15.1: + version "9.15.1" + resolved "https://registry.yarnpkg.com/rc-menu/-/rc-menu-9.15.1.tgz#d8b38ea534a7f596a8da063881519e7eaafca698" + integrity sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/trigger" "^2.0.0" @@ -4320,19 +4331,19 @@ rc-menu@~9.14.0, rc-menu@~9.14.1: rc-overflow "^1.3.1" rc-util "^5.27.0" -rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0, rc-motion@^2.9.2: - version "2.9.2" - resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.2.tgz#f7c6d480250df8a512d0cfdce07ff3da906958cf" - integrity sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw== +rc-motion@^2.0.0, rc-motion@^2.0.1, rc-motion@^2.3.0, rc-motion@^2.3.4, rc-motion@^2.4.3, rc-motion@^2.4.4, rc-motion@^2.6.1, rc-motion@^2.6.2, rc-motion@^2.9.0, rc-motion@^2.9.3: + version "2.9.3" + resolved "https://registry.yarnpkg.com/rc-motion/-/rc-motion-2.9.3.tgz#b1bdaf816f1ccb3e4b3b0c531c3037a59286379e" + integrity sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-util "^5.43.0" -rc-notification@~5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-5.6.0.tgz#1639aa30686d79ee4bb8ace05a698a5a104aaa74" - integrity sha512-TGQW5T7waOxLwgJG7fXcw8l7AQiFOjaZ7ISF5PrU526nunHRNcTMuzKihQHaF4E/h/KfOCDk3Mv8eqzbu2e28w== +rc-notification@~5.6.2: + version "5.6.2" + resolved "https://registry.yarnpkg.com/rc-notification/-/rc-notification-5.6.2.tgz#8525b32d49dd96ec974acae61d1d1eabde61463a" + integrity sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -4349,19 +4360,19 @@ rc-overflow@^1.3.1, rc-overflow@^1.3.2: rc-resize-observer "^1.0.0" rc-util "^5.37.0" -rc-pagination@~4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-4.2.0.tgz#b7222b429dec38f6c74e139a30ae7765e9a0b8a6" - integrity sha512-V6qeANJsT6tmOcZ4XiUmj8JXjRLbkusuufpuoBw2GiAn94fIixYjFLmbruD1Sbhn8fPLDnWawPp4CN37zQorvw== +rc-pagination@~4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/rc-pagination/-/rc-pagination-4.3.0.tgz#c6022f820aa3a45fd734ae33a2915d39597dce1d" + integrity sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.3.2" rc-util "^5.38.0" -rc-picker@~4.6.7: - version "4.6.9" - resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.6.9.tgz#b8bf0c648f50374e63d96b647a14580b6d7f9469" - integrity sha512-kwQq5xDNJ1VcX7pauLlVBiuQorpZGUwA/YczVJTO1e33YsTyDuVjaQkYAiAupXbEPUBCU3doGZo0J25HGq2ZOQ== +rc-picker@~4.6.15: + version "4.6.15" + resolved "https://registry.yarnpkg.com/rc-picker/-/rc-picker-4.6.15.tgz#1531c9c382a295e2d1f1f38440d6678b09cd0468" + integrity sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw== dependencies: "@babel/runtime" "^7.24.7" "@rc-component/trigger" "^2.0.0" @@ -4408,20 +4419,20 @@ rc-resize-observer@^1.0.0, rc-resize-observer@^1.1.0, rc-resize-observer@^1.3.1, rc-util "^5.38.0" resize-observer-polyfill "^1.5.1" -rc-segmented@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/rc-segmented/-/rc-segmented-2.3.0.tgz#b3fe080fb434a266c02e30bb62a47d2c6e094341" - integrity sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg== +rc-segmented@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/rc-segmented/-/rc-segmented-2.5.0.tgz#3b5423adf57459345c77c39c7581fde786a16c11" + integrity sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw== dependencies: "@babel/runtime" "^7.11.1" classnames "^2.2.1" rc-motion "^2.4.4" rc-util "^5.17.0" -rc-select@~14.15.0: - version "14.15.0" - resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.15.0.tgz#5f07ea130a337b7a6df3c6379031d7539d15fef0" - integrity sha512-BDqnDLhhm/8VyyyDlX7ju06S75k6ObJvbsN86zqZ4SY1Fu2ANQxeSWPo7pnwx5nwA5JgG+HcQevtddAgsdeBVQ== +rc-select@~14.15.0, rc-select@~14.15.2: + version "14.15.2" + resolved "https://registry.yarnpkg.com/rc-select/-/rc-select-14.15.2.tgz#d85fcf3a708bdf837b003feeed653347b8980ad0" + integrity sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/trigger" "^2.1.1" @@ -4431,10 +4442,10 @@ rc-select@~14.15.0: rc-util "^5.16.1" rc-virtual-list "^3.5.2" -rc-slider@~10.6.2: - version "10.6.2" - resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-10.6.2.tgz#8bd3b63b24f2f3682ea1bf86d021073189cf33eb" - integrity sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw== +rc-slider@~11.1.6: + version "11.1.7" + resolved "https://registry.yarnpkg.com/rc-slider/-/rc-slider-11.1.7.tgz#3de333b1ec84d53a7bda2f816bb4779423628f09" + integrity sha512-ytYbZei81TX7otdC0QvoYD72XSlxvTihNth5OeZ6PMXyEDq/vHdWFulQmfDGyXK1NwKwSlKgpvINOa88uT5g2A== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.5" @@ -4458,66 +4469,66 @@ rc-switch@~4.1.0: classnames "^2.2.1" rc-util "^5.30.0" -rc-table@~7.45.7: - version "7.45.7" - resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.45.7.tgz#f7c509e05c677a30ad5b212750122da6f5318004" - integrity sha512-wi9LetBL1t1csxyGkMB2p3mCiMt+NDexMlPbXHvQFmBBAsMxrgNSAPwUci2zDLUq9m8QdWc1Nh8suvrpy9mXrg== +rc-table@~7.47.5: + version "7.47.5" + resolved "https://registry.yarnpkg.com/rc-table/-/rc-table-7.47.5.tgz#3c530200baa82346c7e72fe9b1dbd47d4aa15838" + integrity sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ== dependencies: "@babel/runtime" "^7.10.1" "@rc-component/context" "^1.4.0" classnames "^2.2.5" rc-resize-observer "^1.1.0" - rc-util "^5.37.0" + rc-util "^5.41.0" rc-virtual-list "^3.14.2" -rc-tabs@~15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-15.1.1.tgz#99f4c7647e01d3e22216d94222d717e928ed98d0" - integrity sha512-Tc7bJvpEdkWIVCUL7yQrMNBJY3j44NcyWS48jF/UKMXuUlzaXK+Z/pEL5LjGcTadtPvVmNqA40yv7hmr+tCOAw== +rc-tabs@~15.3.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/rc-tabs/-/rc-tabs-15.3.0.tgz#3fcc332fbb9307d5eb147e0404daca871fb92a89" + integrity sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A== dependencies: "@babel/runtime" "^7.11.2" classnames "2.x" rc-dropdown "~4.2.0" - rc-menu "~9.14.0" + rc-menu "~9.15.1" rc-motion "^2.6.2" rc-resize-observer "^1.0.0" rc-util "^5.34.1" -rc-textarea@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-1.7.0.tgz#115c421359dddee58c601008ec2209b41cb8f8df" - integrity sha512-UxizYJkWkmxP3zofXgc487QiGyDmhhheDLLjIWbFtDmiru1ls30KpO8odDaPyqNUIy9ugj5djxTEuezIn6t3Jg== +rc-textarea@~1.8.0, rc-textarea@~1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/rc-textarea/-/rc-textarea-1.8.2.tgz#57a6847304551c1883fc3fb0c5076d587f70bf7f" + integrity sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw== dependencies: "@babel/runtime" "^7.10.1" classnames "^2.2.1" - rc-input "~1.5.0" + rc-input "~1.6.0" rc-resize-observer "^1.0.0" rc-util "^5.27.0" -rc-tooltip@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-6.2.0.tgz#4dd7575674137a5b14f118a5c16435d3f5e4a9c9" - integrity sha512-iS/3iOAvtDh9GIx1ulY7EFUXUtktFccNLsARo3NPgLf0QW9oT0w3dA9cYWlhqAKmD+uriEwdWz1kH0Qs4zk2Aw== +rc-tooltip@~6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/rc-tooltip/-/rc-tooltip-6.2.1.tgz#9a8f0335c86443a0c20c2557933205f645a381b7" + integrity sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg== dependencies: "@babel/runtime" "^7.11.2" "@rc-component/trigger" "^2.0.0" classnames "^2.3.1" -rc-tree-select@~5.22.1: - version "5.22.1" - resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.22.1.tgz#02daa09624378107f4c13d4deadcf6327c669cd8" - integrity sha512-b8mAK52xEpRgS+b2PTapCt29GoIrO5cO8jB7AfHttFsIJfcnynY9FCtnYzURsKXJkGHbFY6UzSEB2I3TETtdWg== +rc-tree-select@~5.23.0: + version "5.23.0" + resolved "https://registry.yarnpkg.com/rc-tree-select/-/rc-tree-select-5.23.0.tgz#e56da0923c7c11dea98d4e14bb76969283c94468" + integrity sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" rc-select "~14.15.0" - rc-tree "~5.8.1" + rc-tree "~5.9.0" rc-util "^5.16.1" -rc-tree@~5.8.1, rc-tree@~5.8.8: - version "5.8.8" - resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.8.8.tgz#650a13ec825a5a4feec6bbaf6a380465986ee0db" - integrity sha512-S+mCMWo91m5AJqjz3PdzKilGgbFm7fFJRFiTDOcoRbD7UfMOPnerXwMworiga0O2XIo383UoWuEfeHs1WOltag== +rc-tree@~5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/rc-tree/-/rc-tree-5.9.0.tgz#1835b2bef36cfeb4ec15d62e0319fc503aa485f1" + integrity sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg== dependencies: "@babel/runtime" "^7.10.1" classnames "2.x" @@ -4525,27 +4536,16 @@ rc-tree@~5.8.1, rc-tree@~5.8.8: rc-util "^5.16.1" rc-virtual-list "^3.5.1" -rc-upload@~4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.5.2.tgz#ea493fbaaf57d9369ee954b20e1d8bc35c818a1a" - integrity sha512-QO3ne77DwnAPKFn0bA5qJM81QBjQi0e0NHdkvpFyY73Bea2NfITiotqJqVjHgeYPOJu5lLVR32TNGP084aSoXA== +rc-upload@~4.8.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-4.8.1.tgz#ac55f2bc101b95b52a6e47f3c18f0f55b54e16d2" + integrity sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw== dependencies: "@babel/runtime" "^7.18.3" classnames "^2.2.5" rc-util "^5.2.0" -rc-util@^4.19.0: - version "4.21.1" - resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-4.21.1.tgz#88602d0c3185020aa1053d9a1e70eac161becb05" - integrity sha512-Z+vlkSQVc1l8O2UjR3WQ+XdWlhj5q9BMQNLk2iOBch75CqPfrJyGtcWMcnhRlNuDu0Ndtt4kLVO8JI8BrABobg== - dependencies: - add-dom-event-listener "^1.1.0" - prop-types "^15.5.10" - react-is "^16.12.0" - react-lifecycles-compat "^3.0.4" - shallowequal "^1.1.0" - -rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.4.0, rc-util@^5.40.1, rc-util@^5.43.0: +rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0, rc-util@^5.18.1, rc-util@^5.2.0, rc-util@^5.20.1, rc-util@^5.21.0, rc-util@^5.24.4, rc-util@^5.25.2, rc-util@^5.27.0, rc-util@^5.30.0, rc-util@^5.31.1, rc-util@^5.32.2, rc-util@^5.34.1, rc-util@^5.35.0, rc-util@^5.36.0, rc-util@^5.37.0, rc-util@^5.38.0, rc-util@^5.38.1, rc-util@^5.4.0, rc-util@^5.40.1, rc-util@^5.41.0, rc-util@^5.43.0: version "5.43.0" resolved "https://registry.yarnpkg.com/rc-util/-/rc-util-5.43.0.tgz#bba91fbef2c3e30ea2c236893746f3e9b05ecc4c" integrity sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw== @@ -4554,9 +4554,9 @@ rc-util@^5.0.0, rc-util@^5.0.1, rc-util@^5.0.6, rc-util@^5.16.1, rc-util@^5.17.0 react-is "^18.2.0" rc-virtual-list@^3.14.2, rc-virtual-list@^3.5.1, rc-virtual-list@^3.5.2: - version "3.14.5" - resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.14.5.tgz#593cd13fe05eabf4ad098329704a30c77701869e" - integrity sha512-ZMOnkCLv2wUN8Jz7yI4XiSLa9THlYvf00LuMhb1JlsQCewuU7ydPuHw1rGVPhe9VZYl/5UqODtNd7QKJ2DMGfg== + version "3.14.8" + resolved "https://registry.yarnpkg.com/rc-virtual-list/-/rc-virtual-list-3.14.8.tgz#abf6e8809b7f5c955aa7f59c2a9d57443e9942fd" + integrity sha512-8D0KfzpRYi6YZvlOWIxiOm9BGt4Wf2hQyEaM6RXlDDiY2NhLheuYI+RA+7ZaZj1lq+XQqy3KHlaeeXQfzI5fGg== dependencies: "@babel/runtime" "^7.20.0" classnames "^2.2.6" @@ -4582,19 +4582,19 @@ react-fast-marquee@^1.6.4: integrity sha512-swDnPqrT2XISAih0o74zQVE2wQJFMvkx+9VZXYYNSLb/CUcAzU9pNj637Ar2+hyRw6b4tP6xh4GQZip2ZCpQpg== react-i18next@^14.1.2: - version "14.1.2" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.2.tgz#cd57a755f25a32a5fcc3dbe546cf3cc62b4f3ebd" - integrity sha512-FSIcJy6oauJbGEXfhUgVeLzvWBhIBIS+/9c6Lj4niwKZyGaGb4V4vUbATXSlsHJDXXB+ociNxqFNiFuV1gmoqg== + version "14.1.3" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-14.1.3.tgz#85525c4294ef870ddd3f5d184e793cae362f47cb" + integrity sha512-wZnpfunU6UIAiJ+bxwOiTmBOAaB14ha97MjOEnLGac2RJ+h/maIYXZuTHlmyqQVX1UVHmU1YDTQ5vxLmwfXTjw== dependencies: "@babel/runtime" "^7.23.9" html-parse-stringify "^3.0.1" react-icons@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.2.1.tgz#28c2040917b2a2eda639b0f797bff1888e018e4a" - integrity sha512-zdbW5GstTzXaVKvGSyTaBalt7HSfuK5ovrzlpyiWHAFXndXTdd/1hdDHI4xBM1Mn7YriT6aqESucFl9kEXzrdw== + version "5.3.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.3.0.tgz#ccad07a30aebd40a89f8cfa7d82e466019203f1c" + integrity sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg== -react-is@^16.12.0, react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -4604,15 +4604,10 @@ react-is@^18.0.0, react-is@^18.2.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - react-native-svg@^15.2.0: - version "15.4.0" - resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-15.4.0.tgz#a4929deece1f438282e18d007b12af5e4f718fda" - integrity sha512-zkBEbme/Dba4yqreg/oI2P6/6LrLywWY7HhaSwpU7Pb5COpTd2fV6/ShsgZz8GRFFdidUPwWmx01FITUsjhkmw== + version "15.7.1" + resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-15.7.1.tgz#299bf5ff21fb355a0f4bedd4cb8f9f520725c4fe" + integrity sha512-Xc11L4t6/DtmUwrQqHR7S45Qy3cIWpcfGlmEatVeZ9c1N8eAK79heJmGRgCOVrXESrrLEHfP/AYGf0BGyrvV6A== dependencies: css-select "^5.1.0" css-tree "^1.1.3" @@ -4637,19 +4632,19 @@ react-responsive@^10.0.0: shallow-equal "^3.1.0" react-router-dom@^6.23.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.24.1.tgz#b1a22f7d6c5a1bfce30732bd370713f991ab4de4" - integrity sha512-U19KtXqooqw967Vw0Qcn5cOvrX5Ejo9ORmOtJMzYWtCT4/WOfFLIZGGsVLxcd9UkBO0mSTZtXqhZBsWlHr7+Sg== + version "6.26.2" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.26.2.tgz#a6e3b0cbd6bfd508e42b9342099d015a0ac59680" + integrity sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ== dependencies: - "@remix-run/router" "1.17.1" - react-router "6.24.1" + "@remix-run/router" "1.19.2" + react-router "6.26.2" -react-router@6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.24.1.tgz#5a3bbba0000afba68d42915456ca4c806f37a7de" - integrity sha512-PTXFXGK2pyXpHzVo3rR9H7ip4lSPZZc0bHG5CARmj65fTT6qG7sTngmb6lcYu1gf3y/8KxORoy9yn59pGpCnpg== +react-router@6.26.2: + version "6.26.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.26.2.tgz#2f0a68999168954431cdc29dd36cec3b6fa44a7e" + integrity sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A== dependencies: - "@remix-run/router" "1.17.1" + "@remix-run/router" "1.19.2" react-to-print@^2.15.1: version "2.15.1" @@ -4677,6 +4672,11 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4718,14 +4718,14 @@ regenerator-runtime@^0.14.0: integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.7" define-properties "^1.2.1" es-errors "^1.3.0" - set-function-name "^2.0.1" + set-function-name "^2.0.2" repeat-string@^1.5.2: version "1.6.1" @@ -4808,29 +4808,29 @@ rollup@^0.25.8: minimist "^1.2.0" source-map-support "^0.3.2" -rollup@^4.13.0: - version "4.18.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.18.1.tgz#18a606df5e76ca53b8a69f2d8eab256d69dda851" - integrity sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A== +rollup@^4.20.0: + version "4.24.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.24.0.tgz#c14a3576f20622ea6a5c9cad7caca5e6e9555d05" + integrity sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.6" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.18.1" - "@rollup/rollup-android-arm64" "4.18.1" - "@rollup/rollup-darwin-arm64" "4.18.1" - "@rollup/rollup-darwin-x64" "4.18.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.18.1" - "@rollup/rollup-linux-arm-musleabihf" "4.18.1" - "@rollup/rollup-linux-arm64-gnu" "4.18.1" - "@rollup/rollup-linux-arm64-musl" "4.18.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.18.1" - "@rollup/rollup-linux-riscv64-gnu" "4.18.1" - "@rollup/rollup-linux-s390x-gnu" "4.18.1" - "@rollup/rollup-linux-x64-gnu" "4.18.1" - "@rollup/rollup-linux-x64-musl" "4.18.1" - "@rollup/rollup-win32-arm64-msvc" "4.18.1" - "@rollup/rollup-win32-ia32-msvc" "4.18.1" - "@rollup/rollup-win32-x64-msvc" "4.18.1" + "@rollup/rollup-android-arm-eabi" "4.24.0" + "@rollup/rollup-android-arm64" "4.24.0" + "@rollup/rollup-darwin-arm64" "4.24.0" + "@rollup/rollup-darwin-x64" "4.24.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.24.0" + "@rollup/rollup-linux-arm-musleabihf" "4.24.0" + "@rollup/rollup-linux-arm64-gnu" "4.24.0" + "@rollup/rollup-linux-arm64-musl" "4.24.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.24.0" + "@rollup/rollup-linux-riscv64-gnu" "4.24.0" + "@rollup/rollup-linux-s390x-gnu" "4.24.0" + "@rollup/rollup-linux-x64-gnu" "4.24.0" + "@rollup/rollup-linux-x64-musl" "4.24.0" + "@rollup/rollup-win32-arm64-msvc" "4.24.0" + "@rollup/rollup-win32-ia32-msvc" "4.24.0" + "@rollup/rollup-win32-x64-msvc" "4.24.0" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -4875,11 +4875,11 @@ safe-stable-stringify@^2.4.3: integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sass@^1.75.0: - version "1.77.8" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.77.8.tgz#9f18b449ea401759ef7ec1752a16373e296b52bd" - integrity sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ== + version "1.79.4" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.79.4.tgz#f9c45af35fbeb53d2c386850ec842098d9935267" + integrity sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg== dependencies: - chokidar ">=3.0.0 <4.0.0" + chokidar "^4.0.0" immutable "^4.0.0" source-map-js ">=0.6.2 <2.0.0" @@ -4902,15 +4902,15 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.6, semver@^7.5.4: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.3.6, semver@^7.5.4, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== set-cookie-parser@^2.4.8: - version "2.6.0" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" - integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.0.tgz#ef5552b56dc01baae102acb5fc9fb8cd060c30f9" + integrity sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ== set-function-length@^1.2.1: version "1.2.2" @@ -4939,11 +4939,6 @@ shallow-equal@^3.1.0: resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-3.1.0.tgz#e7a54bac629c7f248eff6c2f5b63122ba4320bec" integrity sha512-pfVOw8QZIXpMbhBWvzBISicvToTiM5WBF1EeAUZDDSb5Dt29yl4AYbyywbJFSEsRUMr7gJaxqCdr4L3tQf9wVg== -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -4983,10 +4978,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== source-map-support@^0.3.2: version "0.3.3" @@ -5191,18 +5186,18 @@ swr@^2.0.0: client-only "^0.0.1" use-sync-external-store "^1.2.0" -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== +synckit@^0.9.1: + version "0.9.2" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62" + integrity sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw== dependencies: "@pkgr/core" "^0.1.0" tslib "^2.6.2" tailwindcss@^3.4.3: - version "3.4.4" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.4.tgz#351d932273e6abfa75ce7d226b5bf3a6cb257c05" - integrity sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A== + version "3.4.13" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.13.tgz#3d11e5510660f99df4f1bfb2d78434666cb8f831" + integrity sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" @@ -5294,7 +5289,7 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -throttle-debounce@^5.0.0: +throttle-debounce@^5.0.0, throttle-debounce@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz#ec5549d84e053f043c9fd0f2a6dd892ff84456b1" integrity sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A== @@ -5366,16 +5361,11 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.3, tslib@^2.6.2: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== -tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.3, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -5438,9 +5428,9 @@ typed-array-length@^1.0.6: possible-typed-array-names "^1.0.0" typescript@^5.2.2: - version "5.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.3.tgz#e1b0a3c394190838a0b168e771b0ad56a0af0faa" - integrity sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ== + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== uglify-js@^2.6.2: version "2.8.29" @@ -5467,10 +5457,10 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== universalify@^0.2.0: version "0.2.0" @@ -5478,12 +5468,12 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== update-browserslist-db@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.0" uri-js@^4.2.2: version "4.4.1" @@ -5500,12 +5490,7 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -use-sync-external-store@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== - -use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: +use-sync-external-store@1.2.2, use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== @@ -5516,13 +5501,13 @@ util-deprecate@^1.0.2: integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== vite@^5.2.0: - version "5.3.3" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.3.3.tgz#5265b1f0a825b3b6564c2d07524777c83e3c04c2" - integrity sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A== + version "5.4.8" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.8.tgz#af548ce1c211b2785478d3ba3e8da51e39a287e8" + integrity sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ== dependencies: esbuild "^0.21.3" - postcss "^8.4.39" - rollup "^4.13.0" + postcss "^8.4.43" + rollup "^4.20.0" optionalDependencies: fsevents "~2.3.3" @@ -5586,12 +5571,12 @@ which-boxed-primitive@^1.0.2: is-symbol "^1.0.3" which-builtin-type@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.3.tgz#b1b8443707cc58b6e9bf98d32110ff0c2cbd029b" - integrity sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw== + version "1.1.4" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.1.4.tgz#592796260602fc3514a1b5ee7fa29319b72380c3" + integrity sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w== dependencies: - function.prototype.name "^1.1.5" - has-tostringtag "^1.0.0" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" is-async-function "^2.0.0" is-date-object "^1.0.5" is-finalizationregistry "^1.0.2" @@ -5600,10 +5585,10 @@ which-builtin-type@^1.1.3: is-weakref "^1.0.2" isarray "^2.0.5" which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-collection "^1.0.2" + which-typed-array "^1.1.15" -which-collection@^1.0.1: +which-collection@^1.0.1, which-collection@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== @@ -5613,7 +5598,7 @@ which-collection@^1.0.1: is-weakmap "^2.0.2" is-weakset "^2.0.3" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== @@ -5675,9 +5660,9 @@ ws@^7.4.5: integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== yaml@^2.3.4: - version "2.4.5" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.5.tgz#60630b206dd6d84df97003d33fc1ddf6296cca5e" - integrity sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg== + version "2.5.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.5.1.tgz#c9772aacf62cb7494a95b0c4f1fb065b563db130" + integrity sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q== yargs@~3.10.0: version "3.10.0" @@ -5710,8 +5695,8 @@ zlibjs@^0.3.1: integrity sha512-+J9RrgTKOmlxFSDHo0pI1xM6BLVUv+o0ZT9ANtCxGkjIVCCUdx9alUF8Gm+dGLKbkkkidWIHFDZHDMpfITt4+w== zustand@^4.5.2: - version "4.5.4" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.4.tgz#63abdd81edfb190bc61e0bbae045cc4d52158a05" - integrity sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg== + version "4.5.5" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.5.tgz#f8c713041543715ec81a2adda0610e1dc82d4ad1" + integrity sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q== dependencies: - use-sync-external-store "1.2.0" + use-sync-external-store "1.2.2" From 00ce6fcdc02ba1b8fa6f6b695629f2df9229ac3b Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 9 Oct 2024 10:22:31 +0700 Subject: [PATCH 047/118] update dl 2 --- src/pages/login/LoginPage.tsx | 198 +++++++++++++++++----------------- 1 file changed, 102 insertions(+), 96 deletions(-) diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index bf0e4c7..28defe6 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -82,86 +82,92 @@ const LoginPage: React.FunctionComponent = () => { <> {contextHolder} - {t('auth.loginTitle')} - - {({ handleSubmit }) => ( -
    + {t('auth.loginTitle')} +
    + -
    -
    - -
    - - - -
    - -
    -
    - -
    - - -
    - -
    - { - setRemember(e.target.checked); - }} - > - {t('auth.rememberAtLogin')} - -
    - -
    - +
    +
    + +
    + + + +
    + +
    +
    + +
    + + +
    + +
    + { + setRemember(e.target.checked); + }} + > + {t('auth.rememberAtLogin')} + +
    + +
    + +
    + + )} + +
    +
    +
    +
    + {t('auth.noAccountYetAtLogin')}
    - - )} - -
    -
    - - {t('auth.noAccountYetAtLogin')} = () => { > {t('auth.SuggestCreateAcc')} - +
    +
    + + e.preventDefault()} // Ngăn chặn hành vi mặc định + onClick={(e) => { + e.preventDefault(); // Ngăn chặn hành vi mặc định + navigate('/auth/get-password'); + }} + > + {t('auth.forgotPasswordAtLogin')} + + +
    -
    - +
    +

    + 還沒收到信嗎? e.preventDefault()} // Ngăn chặn hành vi mặc định + className='text-[#1668dc]' + to='/auth/resend-email-register' + onMouseDown={(e) => e.preventDefault()} onClick={(e) => { - e.preventDefault(); // Ngăn chặn hành vi mặc định - navigate('/auth/get-password'); + e.preventDefault(); + navigate('/auth/resend-email-register'); }} > - {t('auth.forgotPasswordAtLogin')} + 重發 - +

    -
    -

    - 還沒收到信嗎? - e.preventDefault()} - onClick={(e) => { - e.preventDefault(); - navigate('/auth/resend-email-register'); - }} - > - 重發 - -

    -
    ); From 42039667ba1edb4f40a5907740ace6e771ba88ab Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 17 Oct 2024 11:03:55 +0700 Subject: [PATCH 048/118] proress function err --- src/I18n/TranslationTypes/components/auth.ts | 3 + src/I18n/ch/components/auth.ts | 49 ++++++++- src/I18n/en/components/auth.ts | 4 +- src/I18n/vi/components/auth.ts | 5 +- src/pages/login/LoginPage.tsx | 14 +-- src/pages/login/RegisterPage.tsx | 99 +++++++++-------- src/pages/login/components/GetPassword.tsx | 101 ++++++++++-------- .../login/components/ResendMailSignUp.tsx | 91 ++++++++-------- .../user/components/KycIdentityModal.tsx | 25 +++-- src/services/configServ.ts | 56 +++++----- src/services/kycAPI.ts | 24 +++++ 11 files changed, 286 insertions(+), 185 deletions(-) create mode 100644 src/services/kycAPI.ts diff --git a/src/I18n/TranslationTypes/components/auth.ts b/src/I18n/TranslationTypes/components/auth.ts index 0fc52cb..30a39e1 100644 --- a/src/I18n/TranslationTypes/components/auth.ts +++ b/src/I18n/TranslationTypes/components/auth.ts @@ -7,5 +7,8 @@ export type auth = { emailAtLogin: String; rememberAtLogin: String; noAccountYetAtLogin: String; + noEmailYet: String; + resend: String; logOutAtHeader: String; }; + \ No newline at end of file diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index 8ad56b6..76b7db0 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -1,16 +1,59 @@ +// ch auth const auth = { //loginPage: loginTitle: '登入', SuggestCreateAcc: '註冊', forgotPasswordAtLogin: '忘記密碼', - passwordAtLogin: '密碼', + passwordAtLoginAndSignUp: '密碼', loginButton: '發送', - emailAtLogin: '電子信箱', + emailAtLoginAndSignUp: '電子信箱', rememberAtLogin: '記住我', noAccountYetAtLogin: '還沒有帳戶? 前往', + noEmailYet: '還沒收到信嗎?', + resend: '重發', + validationEmailUserNameLogin: '請輸入電子信箱', + validationPasswordLogin: '請輸入密碼', //header handle logout and user_infor logOutAtHeader: '登出', - + // register Page: + register: '註冊', + name: '名字', + telephoneNumber: '電話號碼', + invitationCode: '邀請碼 (可選)', + readAndAgree: '我已閱讀並同意', + termsAndConditions: '條款和條件', + setPassword: '設置密碼', + confirmPassword: '確認密碼', + validationUserNameRegister1: '請輸入姓名', + validationUserNameRegister2: '名稱只能包含字母和數', + validiationCountryCodeRegister: '請選擇國碼', + validationUserPhone: '請輸入號碼', + validationEmailRegister1: '無效的電子郵件地址', + validationEmailRegister2: '請輸入電子郵件地址', + validaitonAgreeRegister: '您必須同意條款', + validaitionPasswordRegister1: '請輸入密碼', + validaitionPasswordRegister2: '密碼必須至少八個字符', + validaitionPasswordRegister3: '密碼必須包含至少一個小寫字母 (a-z)', + validaitionPasswordRegister4: '密碼必須包含至少一個大寫字母 (A-Z)', + validationPasswordRegister5: '密碼必須包含至少一個數字', + validiationConfirmPasswordRegister: '請確認密碼', + checkSamePasswordRegister: '兩次輸入的密碼不一致', + sentEmailAndCheckRegister: '電子郵件已發送。請確認電子郵件', + unknowErrorRegister: '發生了未知錯誤。', + // Resend Register Email: + CheckEmailSignUp: '查收郵件', + ResendEmailName: '重發郵件', + GotTheLetter: '收到電子郵件了嗎?', + LoginRightNow: '立即登入!', + // Get Password page: + validationGetPasswordAndMailResend: '無效的電子郵件地址', + validationGetPasswordAndMailResend2: '請輸入電子郵件地址', + pleaseCheckMail: '請檢查您的電子郵件。', + getPasswordTitle: '查收郵件', + getPasswordFormName: '忘記密碼', + sendMailGetPassword: '寄送郵件', + waitForSendOneMore: '請等待', + time: '秒', }; export default auth; diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index d88f9be..8804b15 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -3,9 +3,9 @@ const auth = { loginTitle: 'Login', SuggestCreateAcc: 'Register', forgotPasswordAtLogin: 'Forgot your password', - passwordAtLogin: 'Password', + passwordAtLoginAndSignUp: 'Password', loginButton: 'Send', - emailAtLogin: 'Email', + emailAtLoginAndSignUp: 'Email', rememberAtLogin: 'Remember Me', noAccountYetAtLogin: "Don't have an account? Go to", //header handle logout and user_infor diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts index 9b09c34..296cfe5 100644 --- a/src/I18n/vi/components/auth.ts +++ b/src/I18n/vi/components/auth.ts @@ -3,10 +3,9 @@ const auth = { loginTitle: 'Đăng nhập', SuggestCreateAcc: 'Đăng ký', forgotPasswordAtLogin: 'Quên mật khẩu', - 歡迎登入: 'Chào mừng đăng nhập', - passwordAtLogin: 'Mật khẩu', + passwordAtLoginAndSignUp: 'Mật khẩu', loginButton: 'Đăng nhập', - emailAtLogin: 'Email', + emailAtLoginAndSignUp: 'Email', rememberAtLogin: 'Ghi nhớ tôi', noAccountYetAtLogin: 'Chưa có tài khoản? Đi tới ', //header handle logout and user_infor diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index 28defe6..ebaed25 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -26,13 +26,13 @@ const LoginPage: React.FunctionComponent = () => { // Validation schema using Yup const validationSchema = Yup.object({ userName: Yup.string() - .required('請輸入電子信箱') + .required(t('auth.validationEmailUserNameLogin')) .test('is-email-or-username', 'Invalid email or username', (value) => { // Check if the value is a valid email format const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(value) || value.length > 0; }), - password: Yup.string().required('請輸入密碼'), + password: Yup.string().required(t('auth.validationPasswordLogin')), }); // Call POST API using adminServ @@ -88,7 +88,7 @@ const LoginPage: React.FunctionComponent = () => { flexDirection: 'column', alignItems: 'center', justifyContent: 'center', - padding:'15px' + padding: '15px', }} >
    @@ -107,7 +107,7 @@ const LoginPage: React.FunctionComponent = () => { >
    - +
    = () => {
    - +
    = () => {

    - 還沒收到信嗎? + {t('auth.noEmailYet')} = () => { navigate('/auth/resend-email-register'); }} > - 重發 + {t('auth.resend')}

    diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index d01fa6d..c9ad234 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -6,6 +6,7 @@ import * as Yup from 'yup'; import { authAPI } from '@/services/authAPI'; import { useNavigate } from 'react-router-dom'; import { AxiosError } from 'axios'; +import { useTranslation } from 'react-i18next'; interface FormValues { userName: string; @@ -29,6 +30,7 @@ const { Option } = Select; const RegisterPage: React.FC = () => { const [currentStep, setCurrentStep] = useState<'register' | 'setPassword'>('register'); const [userData, setUserData] = useState(null); + const { t } = useTranslation(); const okDaRegis = useNavigate(); const countryCodes = [ @@ -51,39 +53,39 @@ const RegisterPage: React.FC = () => { const validationSchemaSetPassword = Yup.object().shape({ password: Yup.string() - .required('請輸入密碼') - .min(8, '密碼必須至少八個字符') - .test('has-lowercase', '密碼必須包含至少一個小寫字母 (a-z)', (value) => { + .required(t('auth.validaitionPasswordRegister1')) + .min(8, t('auth.validaitionPasswordRegister2')) + .test('has-lowercase', t('auth.validaitionPasswordRegister3'), (value) => { return /[a-z]/.test(value || ''); }) - .test('has-uppercase', '密碼必須包含至少一個大寫字母 (A-Z)', (value) => { + .test('has-uppercase', t('auth.validaitionPasswordRegister4'), (value) => { return /[A-Z]/.test(value || ''); }) - .test('has-number', '密碼必須包含至少一個數字', (value) => { + .test('has-number', t('validationasswordRegister5'), (value) => { return /\d/.test(value || ''); - }) - .test('all-required', '密碼必須至少八個字元,並包含一個大寫字母、一個小寫字母和一個數字', function (value) { - const { createError } = this; - if (!value) { - return createError({ path: 'password', message: '請輸入密碼' }); - } - if (value.length < 8) { - return createError({ path: 'password', message: '密碼必須至少八個字符' }); - } - if (!/[a-z]/.test(value)) { - return createError({ path: 'password', message: '密碼必須包含至少 một ký tự chữ thường (a-z)' }); - } - if (!/[A-Z]/.test(value)) { - return createError({ path: 'password', message: '密碼必須包含至少 một ký tự chữ hoa (A-Z)' }); - } - if (!/\d/.test(value)) { - return createError({ path: 'password', message: '密碼必須包含至少 một số' }); - } - return true; }), + // .test('all-required', '密碼必須至少八個字元,並包含一個大寫字母、一個小寫字母和一個數字', function (value) { + // const { createError } = this; + // if (!value) { + // return createError({ path: 'password', message: '請輸入密碼' }); + // } + // if (value.length < 8) { + // return createError({ path: 'password', message: '密碼必須至少八個字符' }); + // } + // if (!/[a-z]/.test(value)) { + // return createError({ path: 'password', message: '密碼必須包含至少 một ký tự chữ thường (a-z)' }); + // } + // if (!/[A-Z]/.test(value)) { + // return createError({ path: 'password', message: '密碼必須包含至少 một ký tự chữ hoa (A-Z)' }); + // } + // if (!/\d/.test(value)) { + // return createError({ path: 'password', message: '密碼必須包含至少 một số' }); + // } + // return true; + // }), confirmPassword: Yup.string() - .required('請確認密碼') - .oneOf([Yup.ref('password')], '兩次輸入的密碼不一致'), + .required(t('auth.validiationConfirmPasswordRegister')) + .oneOf([Yup.ref('password')], t('auth.checkSamePasswordRegister')), }); const handleNextStep = (values: FormValues) => { @@ -109,7 +111,7 @@ const RegisterPage: React.FC = () => { const response = await authAPI.register(data); console.log('Email has been sent', response.data); - message.success('Email has been sent. Please confirm email'); + message.success(t('auth.sentEmailAndCheckRegister')); setTimeout(() => { okDaRegis('/auth/loginPage'); }, 1500); @@ -129,11 +131,13 @@ const RegisterPage: React.FC = () => { } else if (title) { message.error(title); } else { - message.error('Đã xảy ra lỗi không xác định.'); + message.error(t('auth.unknowErrorRegister')); } } else { - message.error('Đã xảy ra lỗi không xác định.'); + message.error(t('auth.unknowErrorRegister')); } + // Back register Steps + setCurrentStep('register'); } }; @@ -142,7 +146,7 @@ const RegisterPage: React.FC = () => {
    {currentStep === 'register' && ( <> - 註冊 + {t('auth.register')} initialValues={{ userName: userData?.userName || '', @@ -158,7 +162,7 @@ const RegisterPage: React.FC = () => { {({}) => ( - + {({ field }: any) => ( { />
    - +
    @@ -214,7 +218,7 @@ const RegisterPage: React.FC = () => {
    - + {({ field }: any) => ( { /> - + {({ field }: any) => ( { type='checkbox' /> {

    - 還沒收到信嗎? + {t('auth.noEmailYet')} { {currentStep === 'setPassword' && ( <> - 設置密碼 + {t('auth.setPassword')} { > - + {({ field }: any) => ( { /> - + {({ field }: any) => ( { className='text-start text-xs text-red-500 mt-1' /> - +

    + +
    diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index 7d2910b..9c36eca 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -4,6 +4,7 @@ import * as Yup from 'yup'; import { message } from 'antd'; import { useThemeStore } from '@/store'; // Import useThemeStore import { authAPI } from '@/services/authAPI'; +import { useTranslation } from 'react-i18next'; interface GetPassFormValues { email: string; @@ -14,16 +15,36 @@ const GetPassword: React.FC = () => { const initialValues: GetPassFormValues = { email: '' }; const [canResend, setCanResend] = useState(true); const [waitTime, setWaitTime] = useState(40); // wait time: 40s + const { t } = useTranslation(); const validationSchema = Yup.object({ - email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), + email: Yup.string() + .email(t('auth.validationGetPasswordAndMailResend')) + .required(t('auth.validationGetPasswordAndMailResend2')), }); const handleSubmit = async (values: GetPassFormValues) => { + if (!canResend) return; // Không cho phép gửi lại nếu thời gian chờ chưa kết thúc + try { - const response = await authAPI.sendMailConfirmResetPassword(values.email); // use service - message.success(`${response.data.message}Please check your email`); + const response = await authAPI.resendEmail(values.email); // Dùng service gửi email + message.success(`${response.data.message}${t('auth.pleaseCheckMail')}`); console.log('Response:', response.data); + + setCanResend(false); // Đặt cờ không cho gửi tiếp + setWaitTime(40); // Đặt lại thời gian chờ + + // Đếm ngược thời gian chờ + const timer = setInterval(() => { + setWaitTime((prev) => { + if (prev <= 1) { + clearInterval(timer); + setCanResend(true); // Cho phép gửi lại sau khi hết thời gian chờ + return 40; // Đặt lại thời gian chờ + } + return prev - 1; // Giảm 1 giây + }); + }, 1000); } catch (error) { console.error('Error sending email:', error); } @@ -37,34 +58,36 @@ const GetPassword: React.FC = () => { // console.error('Error sending email:', error); // } // }; - const handleResend = async () => { - if (!canResend) return; - setCanResend(false); - setWaitTime(40); // Đặt lại thời gian chờ - try { - const response = await authAPI.resendEmail(initialValues.email); - message.success(`${response.data.message}Please check your email`); - console.log('Response:', response.data); - } catch (error) { - console.error('Error sending email:', error); - } + // const handleResend = async () => { + // if (!canResend) return; + // setCanResend(false); + // setWaitTime(40); // Đặt lại thời gian chờ + // try { + // const response = await authAPI.resendEmail(initialValues.email); + // message.success(`${response.data.message} ${t('auth.pleaseCheckMail')}`); + // console.log('Response:', response.data); + // } catch (error) { + // console.error('Error sending email:', error); + // } - const timer = setInterval(() => { - setWaitTime((prev) => { - if (prev <= 1) { - clearInterval(timer); - setCanResend(true); - return 40; // Đặt lại thời gian chờ - } - return prev - 1; // Giảm 1 giây - }); - }, 1000); - }; + // const timer = setInterval(() => { + // setWaitTime((prev) => { + // if (prev <= 1) { + // clearInterval(timer); + // setCanResend(true); + // return 40; // Đặt lại thời gian chờ + // } + // return prev - 1; // Giảm 1 giây + // }); + // }, 1000); + // }; return ( <>
    -

    查收郵件

    +

    + {t('auth.getPasswordTitle')} +

    { htmlFor='email' className={`block text-sm text-start font-medium ${isDark ? 'text-white' : 'text-black'}`} > - 電子郵件 + {t('auth.getPasswordFormName')} {
    )} -
    -

    還沒有收到電子郵件嗎?

    -
    -
    - +

    check

    -
    +
    */}
    ); diff --git a/src/pages/login/components/ResendMailSignUp.tsx b/src/pages/login/components/ResendMailSignUp.tsx index 23602c5..9eac7f4 100644 --- a/src/pages/login/components/ResendMailSignUp.tsx +++ b/src/pages/login/components/ResendMailSignUp.tsx @@ -4,6 +4,8 @@ import * as Yup from 'yup'; import { message } from 'antd'; import { authAPI } from '@/services/authAPI'; // Import service import { useThemeStore } from '@/store'; // Import useThemeStore +import { useTranslation } from 'react-i18next'; +import { Link, useNavigate } from 'react-router-dom'; interface ResendMailSignUpFormValues { email: string; @@ -13,57 +15,56 @@ const ResendMailSignUp: React.FC = () => { const { isDark } = useThemeStore(); // Get themes status const [canResend, setCanResend] = useState(true); const [waitTime, setWaitTime] = useState(40); // wait time: 40s + const { t } = useTranslation(); + const loginNow = useNavigate(); const initialValues: ResendMailSignUpFormValues = { email: '', }; const validationSchema = Yup.object({ - email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), + email: Yup.string() + .email(t('auth.validationGetPasswordAndMailResend')) + .required(t('auth.validationGetPasswordAndMailResend2')), }); const handleSubmit = async (values: ResendMailSignUpFormValues) => { - try { - const response = await authAPI.sendMailConfirmResetPassword(values.email); //use service - message.success(`${response.data.message}Please check your email`); - console.log('Response:', response.data); - } catch (error) { - console.error('Error sending email:', error); - } - }; + if (!canResend) return; // Không cho phép gửi lại nếu thời gian chờ chưa kết thúc - const handleResend = async () => { - if (!canResend) return; - setCanResend(false); - setWaitTime(40); // Đặt lại thời gian chờ try { - const response = await authAPI.resendEmail(initialValues.email); - message.success(`${response.data.message}Please check your email`); + const response = await authAPI.resendEmail(values.email); // Dùng service gửi email + message.success(`${response.data.message}${t('auth.pleaseCheckMail')}`); console.log('Response:', response.data); + + setCanResend(false); // Đặt cờ không cho gửi tiếp + setWaitTime(40); // Đặt lại thời gian chờ + + // Đếm ngược thời gian chờ + const timer = setInterval(() => { + setWaitTime((prev) => { + if (prev <= 1) { + clearInterval(timer); + setCanResend(true); // Cho phép gửi lại sau khi hết thời gian chờ + return 40; // Đặt lại thời gian chờ + } + return prev - 1; // Giảm 1 giây + }); + }, 1000); } catch (error) { console.error('Error sending email:', error); } - - const timer = setInterval(() => { - setWaitTime((prev) => { - if (prev <= 1) { - clearInterval(timer); - setCanResend(true); - return 40; // Đặt lại thời gian chờ - } - return prev - 1; // Giảm 1 giây - }); - }, 1000); }; return ( <>
    -

    查收郵件

    +

    + {t('auth.CheckEmailSignUp')} +

    {() => (
    @@ -72,7 +73,7 @@ const ResendMailSignUp: React.FC = () => { htmlFor='email' className={`block text-sm text-start font-medium ${isDark ? 'text-white' : 'text-black'}`} > - 重發郵件 + {t('auth.ResendEmailName')} {
    )} +
    -
    -

    還沒有收到電子郵件嗎?

    -
    - +

    + {t('auth.GotTheLetter')} + e.preventDefault()} + onClick={(e) => { + e.preventDefault(); + loginNow('/auth/loginPage'); + }} + // className='mx-1' + > + {t('auth.LoginRightNow')} + +

    diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 0f8045f..adb7cea 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -20,6 +20,8 @@ import KycIdentityResult from './KycIdentityResult'; import { api } from '@/services/configServ'; import { useSelector } from 'react-redux'; import { RootState } from '@/redux/configStore'; +import { KYCData, kycAPI } from '@/services/kycAPI'; +// import { KYCData, kycAPI } from '@/services/kycAPI'; // import Tesseract from 'tesseract.js'; interface IKycIdentityModalProps { @@ -97,14 +99,14 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const handleApiCall = async (kycData: any) => { try { - const response = await api.post('/v1.0/kyc/upload-data', { kycData }); + const response = await kycAPI.kycUserInfor(kycData); console.log('API Response:', response.data); message.success('KYC data submitted successfully!'); return true; // Indicate success } catch (error: any) { console.error('Error submitting KYC data:', error); if (error.response && error.response.data && error.response.data.errors) { - message.error(error.response.data.errors.KycData); + message.error(error.response.data.errors.title); console.log(kycData); } else { message.error('An unknown error occurred'); @@ -114,7 +116,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope }; const waitTime = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - const uploadFile = async ( + const uploadImageFile = async ( file: File | Blob, imageType: keyof UploadfilesState, onSuccess?: (data: any) => void, @@ -162,7 +164,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } }; - const handleFinish = async () => { + const handleFinishImageStep = async () => { // Check if all required files are uploaded const allFilesUploaded = Object.values(uploadFileStatus).every((file) => file); if (!allFilesUploaded) { @@ -368,7 +370,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { // message.success('所有图片已成功上传并保存'); @@ -400,7 +402,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onError?.(new Error('文件類型無效')); return; } - await uploadFile(file, 'IDFront', onSuccess, onError); + await uploadImageFile(file, 'IDFront', onSuccess, onError); }, // customRequest: async ({ file, onSuccess, onError }) => { // const formData = new FormData(); @@ -435,7 +437,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onError?.(new Error('文件類型無效')); return; } - await uploadFile(file, 'IDBack', onSuccess, onError); + await uploadImageFile(file, 'IDBack', onSuccess, onError); }, // customRequest: async ({ file, onSuccess, onError }) => { // const formData = new FormData(); @@ -474,7 +476,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onError?.(new Error('文件類型無效')); return; } - await uploadFile(file, 'SecondaryIDFront', onSuccess, onError); + await uploadImageFile(file, 'SecondaryIDFront', onSuccess, onError); }, // customRequest: async ({ file, onSuccess, onError }) => { // const formData = new FormData(); @@ -508,7 +510,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onError?.(new Error('文件類型無效')); return; } - await uploadFile(file, 'SecondaryIDBack', onSuccess, onError); + await uploadImageFile(file, 'SecondaryIDBack', onSuccess, onError); }, // customRequest: async ({ file, onSuccess, onError }) => { // const formData = new FormData(); @@ -547,7 +549,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onError?.(new Error('文件類型無效')); return; } - await uploadFile(file, 'SelfieWithID', onSuccess, onError); + await uploadImageFile(file, 'SelfieWithID', onSuccess, onError); }, // customRequest: async ({ file, onSuccess, onError }) => { // const formData = new FormData(); @@ -585,7 +587,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onError?.(new Error('文件類型無效')); return; } - await uploadFile(file, 'AddressProof', onSuccess, onError); + await uploadImageFile(file, 'AddressProof', onSuccess, onError); }, // customRequest: async ({ file, onSuccess, onError }) => { // const formData = new FormData(); @@ -608,6 +610,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope + { api.interceptors.request.use( (config) => { @@ -49,7 +49,6 @@ export const setupInterceptor = () => { ); paymentApi.interceptors.request.use( (config) => { - const token = localStorage.getItem('token'); if (token) { config.headers['Authorization'] = `Bearer ${token}`; @@ -58,32 +57,7 @@ export const setupInterceptor = () => { }, (error) => { return Promise.reject(error); - } - ); - paymentApi.interceptors.response.use( - (response) => { - return response; }, - async (error) => { - if (error.response && error.response.status === 401) { - // Example: Logout user if token is invalid or expired - // store.dispatch(logout()); - } - return Promise.reject(error); - } - ); - paymentApi.interceptors.request.use( - (config) => { - - const token = localStorage.getItem('token'); - if (token) { - config.headers['Authorization'] = `Bearer ${token}`; - } - return config; - }, - (error) => { - return Promise.reject(error); - } ); paymentApi.interceptors.response.use( (response) => { @@ -95,8 +69,32 @@ export const setupInterceptor = () => { // store.dispatch(logout()); } return Promise.reject(error); - } + }, ); + // paymentApi.interceptors.request.use( + // (config) => { + // const token = localStorage.getItem('token'); + // if (token) { + // config.headers['Authorization'] = `Bearer ${token}`; + // } + // return config; + // }, + // (error) => { + // return Promise.reject(error); + // }, + // ); + // paymentApi.interceptors.response.use( + // (response) => { + // return response; + // }, + // async (error) => { + // if (error.response && error.response.status === 401) { + // // Example: Logout user if token is invalid or expired + // // store.dispatch(logout()); + // } + // return Promise.reject(error); + // }, + // ); }; https.interceptors.request.use((config) => { diff --git a/src/services/kycAPI.ts b/src/services/kycAPI.ts new file mode 100644 index 0000000..5a7e7ff --- /dev/null +++ b/src/services/kycAPI.ts @@ -0,0 +1,24 @@ +import { api } from './configServ'; +// interface +export interface KYCData { + FullName: string; + IDNumber: string; + DateOfBirth: string; + IDAddress: string; + ResidentialAddress: string; + PhoneNumber: string; + SecondaryFullName: string; + SecondaryIDNumber?: string; +} + +export const kycAPI = { + kycUserInfor: (kycData: KYCData) => { + return api.post('/v1.0/kyc/upload-data', { kycData }); + }, + // kycUploadImage: (data) => { + // return api.post('/v1.0/kyc/upload-image', data); + // }, + // kycReview: (data) => { + // return api.post('/v1.0/kyc/review', data); + // }, +}; From 8f71e4e2ddde71de4334e4f223eb7c2d7734aa60 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 17 Oct 2024 13:01:31 +0700 Subject: [PATCH 049/118] update mt account and translate --- src/I18n/ch/components/account.ts | 41 +++++++++++++++++++----------- src/I18n/en/components/account.ts | 41 +++++++++++++++++++----------- src/I18n/vi/components/account.ts | 42 ++++++++++++++++++++----------- src/components/AddAccount.tsx | 29 ++++++++++----------- 4 files changed, 96 insertions(+), 57 deletions(-) diff --git a/src/I18n/ch/components/account.ts b/src/I18n/ch/components/account.ts index 72476ce..00121f0 100644 --- a/src/I18n/ch/components/account.ts +++ b/src/I18n/ch/components/account.ts @@ -1,17 +1,30 @@ const account = { - 帳戶管理: '帳戶管理', - 我的帳戶: '我的帳戶', - 新增帳戶: '新增帳戶', - 取消: '取消', - 選擇交易平台: '選擇交易平台', - 選擇帳戶類型: '選擇帳戶類型', - 真實帳戶: '真實帳戶', - 虛擬帳戶: '虛擬帳戶', - 設定帳戶密碼: '設定帳戶密碼', - 輸入: '輸入', - 確認: '確認', - 前往: '前往', - PasswordInvestor: "Set password investor", + 帳戶管理: '帳戶管理', + 我的帳戶: '我的帳戶', + 新增帳戶: '新增帳戶', + 取消: '取消', + 選擇交易平台: '選擇交易平台', + 選擇帳戶類型: '選擇帳戶類型', + 真實帳戶: '真實帳戶', + 虛擬帳戶: '虛擬帳戶', + 輸入: '輸入', + 確認: '確認', + 前往: '前往', + // test form signUp MT4 account: + errorPassword: '密碼不匹配', + pickPlatform: '平台類型為必填項', + MT4SetPassword: '設定帳戶密碼', + MT4ConfirmPassword: '確認密碼', + passwordInvestor: '設定密碼投資者', + confirmPasswordInvester: '確認密碼投資者', + MT4Placeholder1: '輸入密碼', + MT4Placeholder2: '確認密碼', + MT4Placeholder3: '輸入密碼', + MT4Placeholder4: '確認密碼', + validaitonMT4Password1: '請輸入密碼', + validaitonMT4Password2: '請確認密碼', + validaitonMT4Password3: '請輸入密碼', + validaitonMT4Password4: '請確認密碼', }; -export default account; \ No newline at end of file +export default account; diff --git a/src/I18n/en/components/account.ts b/src/I18n/en/components/account.ts index 72476ce..e48389e 100644 --- a/src/I18n/en/components/account.ts +++ b/src/I18n/en/components/account.ts @@ -1,17 +1,30 @@ const account = { - 帳戶管理: '帳戶管理', - 我的帳戶: '我的帳戶', - 新增帳戶: '新增帳戶', - 取消: '取消', - 選擇交易平台: '選擇交易平台', - 選擇帳戶類型: '選擇帳戶類型', - 真實帳戶: '真實帳戶', - 虛擬帳戶: '虛擬帳戶', - 設定帳戶密碼: '設定帳戶密碼', - 輸入: '輸入', - 確認: '確認', - 前往: '前往', - PasswordInvestor: "Set password investor", + 帳戶管理: 'Account Management', + 我的帳戶: 'My Account', + 新增帳戶: 'Add Account', + 取消: 'Cancel', + 選擇交易平台: 'Select Trading Platform', + 選擇帳戶類型: 'Select Account Type', + 真實帳戶: 'Real Account', + 虛擬帳戶: 'Virtual Account', + 輸入: 'Input', + 確認: 'Confirm', + 前往: 'Go to', + // test form signUp MT4 account: + errorPassword: 'Passwords do not match', + pickPlatform: 'Platform type is required', + MT4SetPassword: 'Set Account Password', + MT4ConfirmPassword: 'Confirm Password', + passwordInvestor: 'Set Investor Password', + confirmPasswordInvester: 'Confirm Investor Password', + MT4Placeholder1: 'Enter Password', + MT4Placeholder2: 'Confirm Password', + MT4Placeholder3: 'Enter Password', + MT4Placeholder4: 'Confirm Password', + validaitonMT4Password1: 'Please enter password', + validaitonMT4Password2: 'Please confirm password', + validaitonMT4Password3: 'Please enter password', + validaitonMT4Password4: 'Please confirm password', }; -export default account; \ No newline at end of file +export default account; diff --git a/src/I18n/vi/components/account.ts b/src/I18n/vi/components/account.ts index 154aea3..ed274b0 100644 --- a/src/I18n/vi/components/account.ts +++ b/src/I18n/vi/components/account.ts @@ -1,18 +1,30 @@ const account = { - 帳戶管理: 'Quản lý tài khoản', - 我的帳戶: 'Tài khoản của tôi', - 新增帳戶: 'Thêm tài khoản mới', - 取消: 'Hủy bỏ', - 選擇交易平台: 'Chọn sàn giao dịch', - 選擇帳戶類型: 'Chọn loại tài khoản', - 真實帳戶: 'Tài khoản thực', - 虛擬帳戶: 'Tài khoản ảo', - 設定帳戶密碼: 'Cài đặt mật khẩu tài khoản', - 輸入: 'Nhập', - 確認: 'Xác nhận', - 前往: 'Đi tiếp', - PasswordInvestor: "Nhap mật khẩu investor", - + 帳戶管理: 'Quản lý Tài khoản', + 我的帳戶: 'Tài khoản của tôi', + 新增帳戶: 'Thêm Tài khoản', + 取消: 'Hủy', + 選擇交易平台: 'Chọn Nền tảng Giao dịch', + 選擇帳戶類型: 'Chọn Loại Tài khoản', + 真實帳戶: 'Tài khoản Thật', + 虛擬帳戶: 'Tài khoản Ảo', + 輸入: 'Nhập', + 確認: 'Xác nhận', + 前往: 'Đi đến', + // test form signUp MT4 account: + errorPassword: 'Mật khẩu không khớp', + pickPlatform: 'Loại nền tảng là bắt buộc', + MT4SetPassword: 'Đặt Mật khẩu Tài khoản', + MT4ConfirmPassword: 'Xác nhận Mật khẩu', + passwordInvestor: 'Đặt Mật khẩu Nhà đầu tư', + confirmPasswordInvester: 'Xác nhận Mật khẩu Nhà đầu tư', + MT4Placeholder1: 'Nhập Mật khẩu', + MT4Placeholder2: 'Xác nhận Mật khẩu', + MT4Placeholder3: 'Nhập Mật khẩu', + MT4Placeholder4: 'Xác nhận Mật khẩu', + validaitonMT4Password1: 'Vui lòng nhập mật khẩu', + validaitonMT4Password2: 'Vui lòng xác nhận mật khẩu', + validaitonMT4Password3: 'Vui lòng nhập mật khẩu', + validaitonMT4Password4: 'Vui lòng xác nhận mật khẩu', }; -export default account; \ No newline at end of file +export default account; diff --git a/src/components/AddAccount.tsx b/src/components/AddAccount.tsx index 72e23bb..50d7ba9 100644 --- a/src/components/AddAccount.tsx +++ b/src/components/AddAccount.tsx @@ -30,7 +30,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib if (!value || form.getFieldValue('password') === value) { return Promise.resolve(); } - return Promise.reject(new Error(t('account.password_not_match'))); + return Promise.reject(new Error(t('account.errorPassword'))); }; // Validator for investor password matching @@ -63,7 +63,7 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib void }> = ({ visib title: 'MetaTrader 5', value: 'MetaTrader 5', avatar: Mt4, + disabled: true, description: , }, ]} @@ -103,54 +104,54 @@ const AddAccount: React.FC<{ visible: boolean; onClose: () => void }> = ({ visib {/* Password Fields */} {/* Investor Password Fields */} From 31e32a63da637fef9d65d657338592eb4abc6ea2 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Fri, 18 Oct 2024 14:21:06 +0700 Subject: [PATCH 050/118] refact kyc --- src/I18n/ch/components/auth.ts | 35 ++++++ .../user/components/KycIdentityModal.tsx | 109 +++++++++++------- 2 files changed, 100 insertions(+), 44 deletions(-) diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index 76b7db0..39f0c00 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -54,6 +54,41 @@ const auth = { sendMailGetPassword: '寄送郵件', waitForSendOneMore: '請等待', time: '秒', + + // kycModal: + kycModalTitle: '實名驗證', + kycModalDescription: '通過實名認證', + goBackSteps: '返回', + proceedSteps: '繼續', + titleStep1: '證件類型', + primaryDocLabel: '第一證件', + secondaryDocLabel: '第二證件', + idCardTitle:'身分證', + passportTitle: '護照', + driverLicense: '駕照', + residencePermit: '居留證', + titleStep2: '上傳圖片', + remindStep2: '避免模糊 / 显示完整文字信息', + remindBrStep2: '勿使用经过编辑的图片', + image1Label: '第一證件 正面', + image2Label: '第一證件 反面', + image3Label: '第二證件 正面', + image4Label: '第二證件 反面', + image5Label: '本人手持證件照片', + image6Label: '居住地证明', + imageAllTitle: '上傳', + titleStep3: '身份信息', + remindStep3: '務必確保輸入的資料,與身分證件資訊一致', + labelUserinfo1: '第一證件姓名', + labelUserinfo2: '第一證件號碼', + labelUserinfo3: '第二證件姓名', + labelUserinfo4: '第二證件號碼', + labelUserinfo5: '出生日期', + labelUserinfo6: '身分證地址', + labelUserinfo7: '居住地址同身分證地址', + labelUserinfo8: '居住地址', + labelUserinfo9: '電話號碼', + validaitonAllLabelUser: '此項為必填項,請勿留空', }; export default auth; diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index adb7cea..87cbe03 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -1,5 +1,5 @@ import { IdcardOutlined } from '@ant-design/icons'; -import { Form } from 'antd'; +import { Button, Form } from 'antd'; import { CheckCard, ProForm, @@ -265,6 +265,25 @@ const KycIdentityModal: React.FunctionComponent = ({ ope required: '必填', }, }} + submitter={{ + render: (props) => { + return [ + , + , + ]; + }, + }} stepsFormRender={(dom, submitter) => ( = ({ ope className='tight' level={3} > - 实名验证 + {t('auth.kycModalTitle')} - {t('assets.通过实名认证')} + {t('auth.kycModalDescription')}
    } open={open} @@ -290,7 +309,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope > { // Kiểm tra values.primaryDocument if (!values.primaryDocument) { @@ -331,34 +350,34 @@ const KycIdentityModal: React.FunctionComponent = ({ ope > } /> , }, { - title: '驾照', + title: t('auth.driverLicense'), value: 'driverLicense', avatar: , }, { - title: '居留证', + title: t('auth.residencePermit'), value: 'residencePermit', avatar: , }, @@ -369,7 +388,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope { @@ -381,8 +400,8 @@ const KycIdentityModal: React.FunctionComponent = ({ ope - 避免模糊 / 显示完整文字信息 /
    - 勿使用经过编辑的图片 + {t('auth.remindStep2')} /
    + {t('auth.remindBrStep2')} } > @@ -391,8 +410,8 @@ const KycIdentityModal: React.FunctionComponent = ({ ope = ({ ope = ({ ope = ({ ope = ({ ope = ({ ope = ({ ope name='personalInfo' // formKey={form} form={form} - title='身份信息' + title={t('auth.titleStep3')} onFinish={async (values) => { // Collect data for the API call @@ -643,55 +662,57 @@ const KycIdentityModal: React.FunctionComponent = ({ ope }} > 务必确保输入的资料,与身份证件信息一致} + title={ + {t('auth.remindStep3')} + } > {/* use later */} {countryCode !== 'US' && ( <> )} {/* Checkbox: Copy ID Address to Residential Address */} { const checked = e.target.checked; @@ -712,12 +733,12 @@ const KycIdentityModal: React.FunctionComponent = ({ ope {countryCalling !== null && countryCode !== null && ( - +
    {t('report.寶泰帳戶')}, title: '寶泰帳戶', - options: [{ label: 寶泰帳戶-email@qq.com, value: '寶泰帳戶-email@qq.com' }], + options: [{ label: {`寶泰帳戶-${me?.email}`}, value: 'Baotai' }], }, { label: MT4 帳戶, title: 'MT4 帳戶', - options: [ - { label: MT4 帳戶-3000000015, value: 'MT4 帳戶-3000000015' }, - { label: MT4 帳戶-3000000016, value: 'MT4 帳戶-3000000016' }, - ], + options: getMT4Options(), }, ]} dropdownRender={(menu) => ( @@ -55,7 +69,7 @@ const SelectAccount: React.FunctionComponent = () => { title={t('account.新增帳戶')} open={showAddAccount} onCancel={() => setShowAddAccount(false)} - footer={null} // 不顯示底部按鈕 + footer={null} > { path='history' element={} /> + } + /> } diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 9954f85..98fd958 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -35,6 +35,9 @@ import { RootState } from '@/redux/configStore'; import { useDispatch } from 'react-redux'; import { logoutUser } from '@/redux/slice/adminSlice'; import { useNavigate } from 'react-router-dom'; +import { useAccountStore } from '@/store/useAccountStore'; +import { useClientHubStore } from '@/store/hubs/useClientHubStore'; +import { useMarketDataHubStore } from '@/store/useMarketDataStore'; interface IPublicLayoutProps { } @@ -58,6 +61,10 @@ const PublicLayout: React.FunctionComponent = () => { const dispatch = useDispatch(); const navigate = useNavigate(); + + const { connectHub: connectClientHub } = useClientHubStore(); + const { connectHub: connectMarketDataHub } = useMarketDataHubStore(); + const handleLogout = () => { dispatch(logoutUser()); navigate('/auth/loginPage'); @@ -74,6 +81,7 @@ const PublicLayout: React.FunctionComponent = () => { const { language, setLanguage } = useI18nStore(); const [OpenCsChat, setOpenCsChat] = useState(false); + const { me, fetchMe, fetchKyc, fetchBank } = useAccountStore(); const oldChangeLanguage = useCallback( (language: any) => { @@ -84,7 +92,13 @@ const PublicLayout: React.FunctionComponent = () => { useEffect(() => { oldChangeLanguage(language); }, [language, oldChangeLanguage]); - + useEffect(() => { + fetchMe(); + fetchKyc(); + fetchBank(); + connectClientHub(); + connectMarketDataHub(); + }, []) const handleCollapse = (collapsed: boolean) => { setCollapsed(collapsed); setMenuOpen(!collapsed); @@ -338,7 +352,7 @@ const PublicLayout: React.FunctionComponent = () => { }} trigger={['click']} > -
    $ 400,000.00
    +
    $ {me?.wallet.balance}
    diff --git a/src/pages/Realtime/ClientHub.tsx b/src/pages/Realtime/ClientHub.tsx index 360c990..82f1c6e 100644 --- a/src/pages/Realtime/ClientHub.tsx +++ b/src/pages/Realtime/ClientHub.tsx @@ -1,7 +1,7 @@ /* eslint-disable */ import { useEffect, useState } from "react"; import * as signalR from "@microsoft/signalr"; -import { NotifyMT4TransferToClientDto } from "./types"; +import { NotifyCompletedDepositOrderDto, NotifyMT4TransferToClientDto, NotifyPendingDepositOrderDto } from "./types"; const url = "https://demoApi.rushprofit.uk/hubs/clientHub"; // const url = "http://localhost:5000/hubs/clientHub"; @@ -40,7 +40,18 @@ export const ClientHub = () => { console.log("NotifyMT4Transfer: ", message); } ); - + connection.on( + "NotifyPendingDeposit", + (message: NotifyPendingDepositOrderDto) => { + console.log("NotifyPendingDeposit: ", message); + } + ); + connection.on( + "NotifyCompletedOrder", + (message: NotifyCompletedDepositOrderDto) => { + console.log("NotifyCompletedOrder: ", message); + } + ); return () => { connection.stop(); }; diff --git a/src/pages/Realtime/MarketDataHub.tsx b/src/pages/Realtime/MarketDataHub.tsx index f138343..61bf5fd 100644 --- a/src/pages/Realtime/MarketDataHub.tsx +++ b/src/pages/Realtime/MarketDataHub.tsx @@ -4,7 +4,7 @@ import * as signalR from '@microsoft/signalr'; import { MarketDataDto } from "./types"; // const url = "https://demoApi.rushprofit.uk/hubs/marketData"; -const url = "http://demoApi.rushprofit.uk/hubs/marketData"; +const url = "https://demoApi.rushprofit.uk/hubs/marketData"; export const MarketDataHub = () => { const [token, setToken] = useState(""); diff --git a/src/pages/Realtime/types.ts b/src/pages/Realtime/types.ts index 0475f84..9bfd956 100644 --- a/src/pages/Realtime/types.ts +++ b/src/pages/Realtime/types.ts @@ -31,7 +31,24 @@ export interface NotifyMT4TransferToClientDto { Order: string; CreatedAt: Date; } +export interface NotifyPendingDepositOrderDto { + SysDate: Date; // Represents the date and time of the system + Payee_BankName: string; // Name of the bank + Payee_BankAccount: string; // Payee bank account + RequestedAmt: number; // Requested amount + Order_ID: string; // Order ID + Order_Key: string; // Order key + DirectPay: string; // Direct payment information + OrderId: number; // Order ID number + UserId: string; +} +export interface NotifyCompletedDepositOrderDto { + Order_Number: string; // Your System's unique transaction order number + Amount: number; // The amount that BVAC recognizes + Complete_Date: string; // The date the transaction was committed + UserId: string; +} export interface NotifyMT4TransferDto extends NotifyMT4TransferToClientDto { OwnerUserId: string; OwnerName: string; diff --git a/src/pages/account/index.tsx b/src/pages/account/index.tsx index 2d67753..a66e0e5 100644 --- a/src/pages/account/index.tsx +++ b/src/pages/account/index.tsx @@ -24,6 +24,7 @@ const Account = () => { }, []) + const platformMenu = ( @@ -108,9 +109,8 @@ const Account = () => { ]}> -
    結餘 {item.balance}
    )} /> diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index fa1e3b0..45be8d4 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -1,116 +1,120 @@ -import { Button, Form, Input, InputNumber, Space, message } from 'antd'; +import { Button, Form, InputNumber, Space, message } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; import DepositUsdtTrc20 from './components/DepositUsdtTrc20'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; -import PayChannel from './components/PayChannel'; import { api } from '@/services/configServ'; +import { useAccountStore } from '@/store/useAccountStore'; +import { useClientHubStore } from '@/store/hubs/useClientHubStore'; +import PayChannel from './components/PayChannel'; -interface IDepositProps {} +interface IDepositProps { } const Deposit: React.FunctionComponent = (props) => { const { t } = useTranslation(); - const {} = props || {}; const [OpenDepositUsdtTrc20, setOpenDepositUsdtTrc20] = useState(false); + const balance = useAccountStore((state) => state.me?.wallet.balance); const [form] = Form.useForm(); const onReset = () => { form.resetFields(); }; + React.useEffect(() => { + form.setFieldValue('depositAccount', 'Baotai'); + form.setFieldValue('channel', 105); + }, []) + const orders = useClientHubStore((state) => state.pendingDepositMessage); + const checkVerify = async () => { try { const response = await api.get('/v1.0/kyc/my'); - if (response.status === 200) { - console.log(response.data); const { status } = response.data; - console.log(status); - const checkMoney = form.getFieldValue('我要存入'); // Lấy giá trị số từ InputNumber + const checkMoney = form.getFieldValue('amount'); // Lấy giá trị số từ InputNumber - // Nếu checkMoney <= 2000, thì setOpenDepositUsdtTrc20 là true if (checkMoney <= 2000) { setOpenDepositUsdtTrc20(true); - return; // Dừng lại vì đã thực hiện điều kiện này + return; } - // Kiểm tra điều kiện với status và giá trị deposit if ([1, 2, 4, 5].includes(status)) { - // Ngăn chặn DepositUsdtTrc20 và hiển thị thông báo setOpenDepositUsdtTrc20(false); - - if (status === 1) { - message.warning('您的身份尚未驗證。只能存入少於2,000美元'); - } else if (status === 2) { - message.warning('您的身份正在驗證中。只能存入少於2,000美元'); - } else if (status === 4) { - message.warning('您的身份正在驗證中。只能存入少於2,000美元'); - } else if (status === 5) { - message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); - } - - return; // Dừng lại và không thực hiện DepositUsdtTrc20 + message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); + return; } - // Nếu status = 3 thì cho phép DepositUsdtTrc20 hoạt động bình thường if (status === 3) { setOpenDepositUsdtTrc20(true); } - - console.log(response.data); - } else { - console.log(`Unexpected response status: ${response.status}`); } } catch (error) { - if (error.response) { - // Server responded with a status other than 2xx - console.log(`Error: ${error.response.status} - ${error.response.data.message}`); - } else if (error.request) { - // Request was made but no response received - console.log('Error: No response received from the server'); - } else { - // Something else caused the error - console.log('Error:', error.message); - } + console.log(error); } }; + const depositAsync = async (values: any) => { + if (values.depositAccount === 'Baotai') { + const { channel, amount } = values; + + + try { + const response = await api.post("/v1.0/client/deposit/crypto", { channel, amount }) + if (response.status == 200 || response.status == 204) { + message.success("Order succesfully created"); + return; + } + } + catch (e) { + message.success("Error occured while creating the order"); + return; + } + } + //MT4 + else { + + console.log(values) + return; + } + } return (
    { + await checkVerify(); + await depositAsync(values); + }} > - - + + form.setFieldsValue({ channel: value })} // Handling onChange to update the form state + /> - - + {/* Pass value and onChange props to SelectAccount */} + + form.setFieldsValue({ depositAccount: value })} // Passing onChange handler to update the form + /> + {t('assets.超過限額')} - @@ -118,41 +122,18 @@ const Deposit: React.FunctionComponent = (props) => { }, ]} > - + + - - - setOpenDepositUsdtTrc20(false)} - /> + setOpenDepositUsdtTrc20(false)} />
    ); }; diff --git a/src/pages/property/MT4Deposit.tsx b/src/pages/property/MT4Deposit.tsx new file mode 100644 index 0000000..5e7b4e7 --- /dev/null +++ b/src/pages/property/MT4Deposit.tsx @@ -0,0 +1,158 @@ +import { Button, Form, Input, InputNumber, Space, message } from 'antd'; +import * as React from 'react'; +import SelectAccount from '@/components/SelectAccount'; +import PendingDepositModal from './components/DepositUsdtTrc20'; +import { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import PayChannel from './components/PayChannel'; +import { api } from '@/services/configServ'; + +interface IDepositProps { } + +const MT4Deposit: React.FunctionComponent = (props) => { + const { t } = useTranslation(); + + const { } = props || {}; + const [OpenDepositUsdtTrc20, setOpenDepositUsdtTrc20] = useState(false); + + const [form] = Form.useForm(); + const onReset = () => { + form.resetFields(); + }; + const checkVerify = async () => { + try { + const response = await api.get('/v1.0/kyc/my'); + + if (response.status === 200) { + const { status } = response.data; + const checkMoney = form.getFieldValue('我要存入'); // Lấy giá trị số từ InputNumber + + // Nếu checkMoney <= 2000, thì setOpenDepositUsdtTrc20 là true + if (checkMoney <= 2000) { + setOpenDepositUsdtTrc20(true); + return; // Dừng lại vì đã thực hiện điều kiện này + } + + // Kiểm tra điều kiện với status và giá trị deposit + if ([1, 2, 4, 5].includes(status)) { + // Ngăn chặn DepositUsdtTrc20 và hiển thị thông báo + setOpenDepositUsdtTrc20(false); + + if (status === 1) { + message.warning('您的身份尚未驗證。只能存入少於2,000美元'); + } else if (status === 2) { + message.warning('您的身份正在驗證中。只能存入少於2,000美元'); + } else if (status === 4) { + message.warning('您的身份正在驗證中。只能存入少於2,000美元'); + } else if (status === 5) { + message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); + } + + return; // Dừng lại và không thực hiện DepositUsdtTrc20 + } + + // Nếu status = 3 thì cho phép DepositUsdtTrc20 hoạt động bình thường + if (status === 3) { + setOpenDepositUsdtTrc20(true); + } + + console.log(response.data); + } else { + console.log(`Unexpected response status: ${response.status}`); + } + } catch (error: any) { + if (error.response) { + // Server responded with a status other than 2xx + console.log(`Error: ${error.response.status} - ${error.response.data.message}`); + } else if (error.request) { + // Request was made but no response received + console.log('Error: No response received from the server'); + } else { + // Something else caused the error + console.log('Error:', error.message); + } + } + }; + + return ( +
    +
    + + + + + + + + + {t('assets.超過限額')} + + + ), + }, + ]} + > + + + + + + + + +
    + setOpenDepositUsdtTrc20(false)} + /> +
    + ); +}; + +export default MT4Deposit; diff --git a/src/pages/property/Transfer.tsx b/src/pages/property/Transfer.tsx index e830c8e..0175c22 100644 --- a/src/pages/property/Transfer.tsx +++ b/src/pages/property/Transfer.tsx @@ -4,39 +4,46 @@ import SelectAccount from '@/components/SelectAccount'; import SafetyVerification from './components/SafetyVerification'; import { useTranslation } from 'react-i18next'; -interface ITransferProps {} +interface ITransferProps { } const Transfer: React.FunctionComponent = (props) => { - const {} = props || {}; + const { } = props || {}; const { t } = useTranslation(); const [openTransfer, setOpenTransfer] = React.useState(false); - const [currentStep, setCurrentStep] = React.useState('login'); - const [withdrawal, setWithdrawal] = React.useState('transfer'); + const [currentStep, setCurrentStep] = React.useState('confirm-order'); const [form] = Form.useForm(); + const onReset = () => { form.resetFields(); }; + const handleNextStep = () => { setOpenTransfer(true); }; + // Handle form submission + const onFinish = (values: any) => { + console.log('Form values:', values); // Print all fields on submit + }; + return (
    = (props) => {
    @@ -77,13 +84,10 @@ const Transfer: React.FunctionComponent = (props) => { open={openTransfer} onCancel={() => { setOpenTransfer(false); - setCurrentStep('login'); - setWithdrawal('transfer') + setCurrentStep('confirm-transfer-order'); }} currentStep={currentStep} setCurrentStep={setCurrentStep} - withdrawal={withdrawal} - setWithdrawal={setWithdrawal} />
    ); diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 379f2c4..1c54dcd 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -4,6 +4,9 @@ import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; import SafetyVerification from './components/SafetyVerification'; import { useTranslation } from 'react-i18next'; import PayChannel from './components/PayChannel'; +import { useAccountStore } from '@/store/useAccountStore'; +import { useMarketDataHubStore } from '@/store/useMarketDataStore'; +import { bankAPI } from '@/services/bankAPI'; interface IWithdrawProps { } @@ -14,31 +17,42 @@ const Withdraw: React.FunctionComponent = (props) => { const { Text } = Typography; const [form] = Form.useForm(); const [openSafetyVerification, setOpenSafetyVerification] = React.useState(false); - const [currentStep, setCurrentStep] = React.useState('login'); - const [withdrawal, setWithdrawal] = React.useState('USDT-TRC20'); - + const [currentStep, setCurrentStep] = React.useState('confirm-order'); + const { me } = useAccountStore(state => ({ + me: state.me, + })); + const [banks, setBanks] = React.useState([]); + const { marketDataMessage } = useMarketDataHubStore(); const onReset = () => { form.resetFields(); }; + React.useEffect(() => { + console.log(marketDataMessage) + }, [marketDataMessage]) + React.useEffect(() => { + bankAPI.myBankAccount().then(res => setBanks(res.data)); + }, []) const handleNextStep = () => { setOpenSafetyVerification(true); }; - const selectAfter = ; return (
    { + console.log("Form ", values) + }} > - 宝泰帳戶 - {'email@qq.com'} + 宝泰帳戶 - {me?.email} @@ -53,27 +67,30 @@ const Withdraw: React.FunctionComponent = (props) => {
    $ 0.00
    - + + form.setFieldValue("Channel", value)} value={form.getFieldValue("Channel")} /> + + } placeholder={t('account.輸入')} />
    - + = (props) => { {/* 判斷法幣通道 */} = (props) => { } /> {/* 判斷USDT通道 */} - = (props) => { icon={} /> } - /> + /> */} @@ -135,13 +153,12 @@ const Withdraw: React.FunctionComponent = (props) => { { + console.log("test") setOpenSafetyVerification(false); - setCurrentStep('login'); + setCurrentStep('confirm-order'); }} currentStep={currentStep} setCurrentStep={setCurrentStep} - withdrawal={withdrawal} - setWithdrawal={setWithdrawal} />
    ); diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index f8d48ca..fcddccc 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -1,8 +1,9 @@ -import { Avatar, Button, Collapse, CollapseProps, Divider, Flex, Form, List, Modal, QRCode, Space, Typography } from 'antd'; +import { Avatar, Button, Collapse, CollapseProps, Divider, Flex, Form, List, Modal, QRCode, Space, Typography, Spin, message } from 'antd'; import * as React from 'react'; import K100U_logo from '../../../assets/k100u_logo.png'; -import USDTLoading from './USDTLoading'; import { useTranslation } from 'react-i18next'; +import { useClientHubStore } from '@/store/hubs/useClientHubStore'; +import { api } from '@/services/configServ'; interface IDepositUsdtTrc20Props { open: boolean; @@ -11,9 +12,32 @@ interface IDepositUsdtTrc20Props { const DepositUsdtTrc20: React.FunctionComponent = ({ open, onCancel }) => { const { t } = useTranslation(); - const { Title, Text } = Typography; - const Trc20Address = 'Te48192as1d6qwd84q9w8d49q8wnoas4'; + const [form] = Form.useForm(); // Create form instance + const { pendingDepositMessage } = useClientHubStore(); + const [loading, setLoading] = React.useState(false); // Loading state + + // Handle payment completion + const handlePaymentCompletion = async () => { + try { + setLoading(true); + const values = await form.validateFields(); + // Call API with form data + var response = await api.post("/v1.0/client/deposit/confirm", { + orderId: pendingDepositMessage?.orderId, + }); + + if (response.status == 200 && response.data.success) { + message.success(t('assets.付款已确认')); + } + setLoading(false); + onCancel(); + } catch (error) { + message.error(t('assets.确认付款时出错')); + setLoading(false); + } + }; + const items: CollapseProps['items'] = [ { key: '1', @@ -28,6 +52,7 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope ), }, ]; + const data = [ { icon: K100U_logo, @@ -36,132 +61,169 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope }, ]; - const [loading, setLoading] = React.useState(false); // 加載狀態 - const [paymentCompleted, setPaymentCompleted] = React.useState(false); // 付款完成狀態 + if (!pendingDepositMessage) { + return ( + {t('assets.支付USDT-TRC20')}} + open={open} + destroyOnClose + width={480} + footer={null} + > + + + {t('assets.等待中...')} + + + ); + } - const handlePaymentCompletion = () => { - setLoading(true); - setTimeout(() => { - setLoading(false); - setPaymentCompleted(true); - }, 3000); + return ( + + + 支付USDT-TRC20 + + + {t('assets.流水號')} + {pendingDepositMessage?.orderId} + +
    + } + open={open} + destroyOnClose + width={480} + footer={ + + + + {t('assets.沒有加密貨幣錢包嗎')} + + {t('assets.選擇下列平台')} + ( + + } + title={item.title} + description={item.description} + /> + + )} + /> + + } + > + + + + + {t('assets.收款地址')} + + + + {pendingDepositMessage?.payee_BankAccount} + + + + + + {t('assets.剩餘支付時間')} + + + + + + + {/* ({pendingDepositMessage?.payee_BankName}) */} + + {t('assets.我需支付')} : + + + + + {pendingDepositMessage?.requestedAmt} + + + + + + + + ); +}; + +export default DepositUsdtTrc20; + +interface CountdownProps { + expirationTime: string; // Expecting a date string +} + +const Countdown: React.FC = ({ expirationTime }) => { + const [timeLeft, setTimeLeft] = React.useState(0); + + React.useEffect(() => { + const calculateTimeLeft = () => { + const currentTime = new Date().getTime(); + const expirationDate = new Date(expirationTime).getTime(); + const distance = expirationDate - currentTime; + + setTimeLeft(distance > 0 ? distance : 0); + }; + + calculateTimeLeft(); + + const timer = setInterval(() => { + calculateTimeLeft(); + }, 1000); + + // Clear the interval once timeLeft reaches 0 + if (timeLeft === 0) { + clearInterval(timer); + } + + return () => clearInterval(timer); // Cleanup the interval on unmount + }, [expirationTime, timeLeft]); + + // Convert time left into hours, minutes, and seconds + const getTimeComponents = () => { + const seconds = Math.floor((timeLeft / 1000) % 60); + const minutes = Math.floor((timeLeft / 1000 / 60) % 60); + const hours = Math.floor((timeLeft / 1000 / 3600) % 24); + return { hours, minutes, seconds }; }; + const { hours, minutes, seconds } = getTimeComponents(); + return ( - <> - {paymentCompleted ? ( - +
    + {timeLeft > 0 ? ( + + {minutes}m {seconds}s + ) : ( - - - 支付USDT-TRC20 - - - {t('assets.流水號')}: - in000000000000001 - -
    - } - open={open} - destroyOnClose - width={480} - footer={ - - - - - {t('assets.沒有加密貨幣錢包嗎')} - - {t('assets.選擇下列平台')} - ( - - } - title={item.title} - description={item.description} - /> - - )} - /> - - } - > -
    - - - {t('assets.收款地址')} - - - {Trc20Address} - - - - - - 59:43 - - - - USDT-TRC20{' '} - - 100.00 - - - - - -
    - + Time Expired )} - +
    ); }; - -export default DepositUsdtTrc20; diff --git a/src/pages/property/components/PayChannel.tsx b/src/pages/property/components/PayChannel.tsx index b22c4eb..cf1db4a 100644 --- a/src/pages/property/components/PayChannel.tsx +++ b/src/pages/property/components/PayChannel.tsx @@ -4,41 +4,55 @@ import usdt from '../../../assets/usdt.png'; import cny from '../../../assets/cny.png'; import twd from '../../../assets/twd.png'; -interface IPayChannelProps {} +interface IPayChannelProps { + onChange: (values: any) => void, + value: any +} -const PayChannel: React.FunctionComponent = () => { +const PayChannel: React.FunctionComponent = ({ onChange, value }) => { // 支付通道 const payChannel = [ { label: 'USDT-TRC20', currencyIcon: usdt, - value: 'USDT-TRC20_bvac', + value: 105, + channelName: 'BVAC', + }, + { + label: 'USDT-ERC20', + currencyIcon: usdt, + value: 3, channelName: 'BVAC', }, { label: 'CNY', currencyIcon: cny, + disabled: true, value: 'CNY_k100u', channelName: 'K100U', }, { label: 'CNY', currencyIcon: cny, + disabled: true, value: 'CNY_u28', channelName: 'U28 Exchange', }, { label: 'TWD', currencyIcon: twd, + disabled: true, value: 'TWD_u28', channelName: 'U28 Exchange', }, ]; return ( - - - - -
    - - -
    - - - + {currentStep === 'confirm-order' && ( + )} - {currentStep === 'verify' && ( - - - {t('auth.驗證電子信箱')} - - 已發送驗證碼至您的電子信箱 -
    - } - open={open} - destroyOnClose - width={480} - footer={null} - > - -
    - - setVerificationCode(e.target.value)} - /> - - {verificationCode ? ( - - - - ) : ( - - - - )} -
    -
    - + {currentStep === 'confirm-transfer-order' && ( + )} - {currentStep === withdrawal && ( - - - 確認出金 - -
    - } - open={open} - destroyOnClose - width={480} - footer={null} - > - -
    - 出金帳戶: - gmail -
    -
    - 帳戶可用現金: - gmail -
    -
    - 出金金額: - gmail -
    -
    - {t('assets.手續費')}: - gmail -
    -
    - {t('assets.提取為')}: - gmail -
    -
    - {t('assets.出金匯率')}: - gmail -
    -
    - {t('assets.提取至')}
    -
    -
    - {withdrawal} -
    -
    - 錢包地址: - gmail -
    -
    - 銀行戶名: - gmail -
    -
    - 銀行帳號: - gmail -
    -
    - 銀行名稱: - gmail -
    -
    - 開戶行: - gmail -
    -
    - - -
    -
    - + {currentStep === 'email' && ( + )} - {currentStep === 'getTransfer' && ( - - - 確認轉帳 - -
    - } + + {currentStep === 'verify-email-code' && ( + - -
    - 從: - gmail -
    -
    - 轉帳金額: - gmail -
    -
    - {t('assets.手續費')}: - gmail -
    -
    - 轉至: - gmail -
    -
    - - -
    -
    - + onCancel={onCancel} + handleVerificationSubmit={handleVerificationSubmit} + verificationCode={verificationCode} + setVerificationCode={setVerificationCode} + disabled={disabled} + countdown={countdown} + handleClick={handleClick} + t={t} + /> )} - {currentStep === 'UseLoading' && } - {currentStep === 'TransferLoading' && } - {currentStep === 'getPassword' && {}} />} - {currentStep === 'ChangeBank' && } + {currentStep === 'pending-order' && } + {currentStep === 'transfer' && } + {/* {currentStep === 'getPassword' && { }} />} + {currentStep === 'ChangeBank' && } */}
    ); }; +const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( + + 確認出金 +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + 出金帳戶:gmail +
    +
    + 帳戶可用現金:gmail +
    +
    + 出金金額:gmail +
    +
    + {t('assets.手續費')}:gmail +
    +
    + {t('assets.提取為')}:gmail +
    +
    + {t('assets.出金匯率')}:gmail +
    +
    + 錢包地址:gmail +
    +
    + 銀行戶名:gmail +
    +
    + 銀行帳號:gmail +
    +
    + 銀行名稱:gmail +
    +
    + 開戶行:gmail +
    +
    + + +
    +
    + +); +const ConfirmTransferModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( + + Confirm Transfer +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + 出金帳戶:gmail +
    +
    + 帳戶可用現金:gmail +
    +
    + 出金金額:gmail +
    +
    + {t('assets.手續費')}:gmail +
    +
    + {t('assets.提取為')}:gmail +
    +
    + {t('assets.出金匯率')}:gmail +
    +
    + + +
    +
    + +); +export const EmailModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( + + 安全驗證 + 為保證資金安全,請輸入寶泰會員的登入資訊 +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + + + + + +
    + + +
    +
    +
    + +); + +export const VerifyEmailCodeModal: React.FC = ({ + open, + onCancel, + handleVerificationSubmit, + verificationCode, + setVerificationCode, + disabled, + countdown, + handleClick, + t, +}) => ( + + {t('auth.驗證電子信箱')} + 已發送驗證碼至您的電子信箱 + + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + setVerificationCode(e.target.value)} + /> + + {verificationCode ? ( + + + + ) : ( + + + + )} +
    + {countdown} + +
    +
    +
    +
    +); + export default SafetyVerification; diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx index 720b1e1..894a11b 100644 --- a/src/pages/property/components/UseLoading.tsx +++ b/src/pages/property/components/UseLoading.tsx @@ -1,11 +1,11 @@ import { useState, useEffect } from 'react'; import { Modal, Typography, Spin, Space, message, Button } from 'antd'; -import { LoadingOutlined, CopyOutlined } from '@ant-design/icons'; +import { LoadingOutlined, CopyOutlined, FileDoneOutlined } from '@ant-design/icons'; import copy from 'copy-to-clipboard'; import CsChat from '../../PublicLayout/CsChat'; import { useTranslation } from 'react-i18next'; -const UseLoading = () => { +const UseLoading = ({ onCancel }) => { const [open, setOpen] = useState(true); const [OpenCsChat, setOpenCsChat] = useState(false); @@ -27,9 +27,7 @@ const UseLoading = () => { setTimeout(() => setOpen(true), 0); }; - const onCancel = () => { - setOpen(false); - }; + const copyToClipboard = (text: any) => { copy(text); @@ -74,6 +72,7 @@ const UseLoading = () => { size='large' indicator={} /> + 預計到帳時間 30分鐘 diff --git a/src/pages/user/components/KycBankModal.tsx b/src/pages/user/components/KycBankModal.tsx index 207a822..75efe12 100644 --- a/src/pages/user/components/KycBankModal.tsx +++ b/src/pages/user/components/KycBankModal.tsx @@ -1,8 +1,13 @@ -import { ProForm, ProFormText, ProFormUploadButton, StepsForm } from '@ant-design/pro-components'; -import { Button, Modal, Typography, message } from 'antd'; +import { ProForm, ProFormText, StepsForm } from '@ant-design/pro-components'; +import { Button, Modal, Typography, message, Spin } from 'antd'; import * as React from 'react'; import KycResult from './KycBankResult'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; +import { useAccountStore } from '@/store/useAccountStore'; +import { useForm } from 'antd/es/form/Form'; +import { LoadingOutlined } from '@ant-design/icons'; +import { bankAPI } from '@/services/bankAPI'; +import { AxiosError } from 'axios'; interface IKycBankModalProps { open: boolean; @@ -11,6 +16,9 @@ interface IKycBankModalProps { const KycBankModal: React.FunctionComponent = ({ open, onCancel }) => { const [OpenKycBankResult, setOpenKycBankResult] = useState(false); + const name = useAccountStore(state => state.kyc?.details)?.find(detail => detail.fieldName == 'FullName')?.fieldValue; + const [loading, setLoading] = useState(true); + const waitTime = (time: number = 100) => { return new Promise((resolve) => { setTimeout(() => { @@ -18,19 +26,45 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan }, time); }); }; + + useEffect(() => { + // Check if the name has been loaded + if (name) { + setLoading(false); + } + }, [name]); + + const [form] = useForm(); + + if (loading) { + // Show a loading spinner if `name` is not yet initialized + return ( + } + tip="Loading..." + /> + ); + } + const handleSubmitBank = async (values: any) => { + await waitTime(1000); + try { + await bankAPI.addBank(values); + setOpenKycBankResult(true); + message.success('Bank account added succesfully'); + } catch (e: any) { + message.error('Error: ' + e.response.error.title); + } + } return (
    { - console.log(values); - await waitTime(1000); - message.success('完成提交'); - }} + onFinish={handleSubmitBank} formProps={{ validateMessages: { required: '必填', }, }} + stepsRender={() => (<>)} stepsFormRender={(dom, submitter) => { return ( = ({ open, onCan onCancel={onCancel} title={
    - + 銀行驗證 - 銀行驗證 + 銀行驗證
    } open={open} @@ -56,66 +87,27 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan ); }} > - + 務必確保輸入的資料,與銀行帳戶資訊一致} + title={務必確保輸入的資料,與銀行帳戶資訊一致} > - - - - - - - 避免模糊 / 顯示完整文字資訊 /
    - 勿使用經過編輯的圖片 - - } - > - + + +
    -
    - {/* 模擬提交後 */} - + +
    diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 5383f04..9276c69 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -7,18 +7,18 @@ import { ProFormUploadButton, StepsForm, } from '@ant-design/pro-components'; -import { Button, Checkbox, Col, Modal, Row, Select, Typography, message } from 'antd'; +import { Col, Modal, Row, Select, Typography, message } from 'antd'; import { useTranslation } from 'react-i18next'; import * as React from 'react'; import { FaPassport } from 'react-icons/fa'; -import { GiKeyCard, GiVikingLonghouse } from 'react-icons/gi'; +import { GiKeyCard } from 'react-icons/gi'; import { RiUserLocationFill } from 'react-icons/ri'; import { useState } from 'react'; import KycIdentityResult from './KycIdentityResult'; -import axios from 'axios'; import { api } from '@/services/configServ'; -import { useDispatch, useSelector } from 'react-redux'; +import { useSelector } from 'react-redux'; import { RootState } from '@/redux/configStore'; +import { useAccountStore } from '@/store/useAccountStore'; interface IKycIdentityModalProps { open: boolean; @@ -30,31 +30,11 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần const userName = useSelector((state: RootState) => state.admin.user?.userName); const { t } = useTranslation(); - const [openKycIdentityResult, setOpenKycIdentityResult] = useState(false); const [countryCode, setCountryCode] = useState(null); const [countryCalling, setCountryCalling] = useState(null); - // State to hold the form data - // const [formData, setFormData] = useState({ - // fullName: userName || '', - // primaryIdNumber: '', - // secondaryFullName: '', - // secondaryIdNumber: '', - // dateOfBirth: null, - // idAddress: '', - // residentialAddress: '', - // phoneNumber: '', - // }); - // const handleInputChange = (changedValues: any) => { - // setFormData((prevData) => ({ - // ...prevData, - // ...changedValues, - // })); - // }; - React.useEffect(() => { - console.log(countryCalling); - console.log(countryCode); - }, [countryCalling, countryCode]); + const banks = useAccountStore(state => state.banks); + const waitTime = (time: number = 100) => { return new Promise((resolve) => { setTimeout(() => { @@ -188,11 +168,11 @@ const KycIdentityModal: React.FunctionComponent = ({ ope name='uploadImages' title='上传图片' onFinish={handleUrField} - // onFinish={async () => { - // message.success('所有图片已成功上传并保存'); - // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) - // return true; - // }} + // onFinish={async () => { + // message.success('所有图片已成功上传并保存'); + // // Proceed to the next step or perform any final action (e.g., calling /v1.0/kyc/review API) + // return true; + // }} > = ({ ope + { + banks.length == 0 && + + } - setOpenKycIdentityResult(false)} - /> ); }; diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index d488aa4..0b4d5ff 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -1,15 +1,24 @@ import { FileSearchOutlined } from '@ant-design/icons'; -import { Result, Button, Typography } from 'antd'; +import { Result, Button, Typography, message, notification } from 'antd'; import * as React from 'react'; import { useState } from 'react'; import { Link } from 'react-router-dom'; import KycBankModal from './KycBankModal'; +import { useAccountStore } from '@/store/useAccountStore'; -interface IKycIdentityResultProps {} +interface IKycIdentityResultProps { } const KycIdentityResult: React.FunctionComponent = () => { const [OpenKycBankModal, setOpenKycBankModal] = useState(false); + const kycStatus = useAccountStore(state => state.kyc?.status); + const handleClick = () => { + if (kycStatus != 3) { + notification.error({ message: "You need to verify KYC first before you can add bank accounts", placement: "bottomRight" }); + return; + } + setOpenKycBankModal(true) + } return (
    = () = , , diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 6f6584e..6a9fa0d 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,285 +1,194 @@ -import { CheckOutlined, UserOutlined } from '@ant-design/icons'; -import { ProCard } from '@ant-design/pro-components'; -import { DescriptionsProps, Descriptions, Button, Collapse, CollapseProps, Space, Tag, Flex, Divider } from 'antd'; -import * as React from 'react'; +import { + CheckOutlined, + UserOutlined +} from '@ant-design/icons'; +import { + ProCard +} from '@ant-design/pro-components'; +import { + Descriptions, + Button, + Collapse, + Space, + Tag, + Divider, + DescriptionsProps +} from 'antd'; +import React, { + useState, + useEffect +} from 'react'; import logo from '../../assets/PTFintech_logo.png'; import KYCIdentityModal from './components/KycIdentityModal'; -import { useState, useEffect } from 'react'; import EditBank from '@/pages/user/components/EditBank'; -import { useTranslation } from 'react-i18next'; -import { useSelector } from 'react-redux'; -// import { authAPI } from '@/services/clientServ'; // Đảm bảo đường dẫn đúng -import { RootState } from '@/redux/configStore'; -import { api } from '@/services/configServ'; import UpdateCountryForm from './components/UpdateCountry'; - -interface IUserProps {} - -const User: React.FunctionComponent = (props) => { - const {} = props || {}; - const [OpenUpdateCountryForm, setOpenUpdateCountryForm] = useState(false); - const [OpenKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); - const [OpenBank, setOpenBank] = useState(false); +import { + useTranslation +} from 'react-i18next'; +import { + useSelector +} from 'react-redux'; +import { + RootState +} from '@/redux/configStore'; +import { + api +} from '@/services/configServ'; +import { kycAPI } from '@/services/kycAPI'; +import { bankAPI } from '@/services/bankAPI'; + +const User: React.FC = () => { + const [openUpdateCountryForm, setOpenUpdateCountryForm] = useState(false); + const [openKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); + const [openBank, setOpenBank] = useState(false); const [userInfo, setUserInfo] = useState([]); - const [personalInfo_China, setPersonalInfo_China] = useState([]); - const [bankInfo_China, setBankInfo_China] = useState([]); - const [kycStatus, setKycStatus] = useState(1); // Holds KYC status (as a number) + const [personalInfoChina, setPersonalInfoChina] = useState([]); + const [bankInfoChina, setBankInfoChina] = useState([]); + const [kycStatus, setKycStatus] = useState(1); const { t } = useTranslation(); - // const [invitationCode, setInvitationCode] = useState(null); - - // Lấy token từ Redux store - const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần - const handleChangeCountry = () => { - console.log('Button clicked: changing country'); - setOpenUpdateCountryForm(true); + const token = useSelector((state: RootState) => state.admin.user?.token); + + const fetchUserData = async () => { + try { + const response = await api.get('/v1.0/client/me'); + const data = response.data; + setUserInfo([ + { key: '用戶名稱', label: '用戶名稱', children: data.userName || '未提供' }, + { key: '電子信箱', label: '電子信箱', children: data.email || '未提供' }, + { key: '手機號碼', label: '手機號碼', children: data.phoneNumber || '未提供' }, + { key: '國家代碼', label: '國家代碼', children: data.countryCode || '未提供' }, + { key: '國家撥號代碼', label: '國家撥號代碼', children: data.countryCallingCode || '未提供' }, + { key: '平台名稱', label: '平台名稱', children: data.platformName || '未提供' }, + { key: '我的邀請碼', label: '我的邀請碼', children: data.myInvitationCode || '未提供' }, + { key: 'invitationCode', label: '', children: } + ]); + } catch (error) { + console.error('Error fetching user data:', error); + } }; - // const fetchInvitationCode = async () => { - // try { - // const response = await authAPI.getClientInfo(token!); // Gọi API - // setInvitationCode(response.data.myInvitationCode); // Lưu mã mời vào state - // console.log(response.data); - // } catch (error) { - // console.error('Failed to fetch invitation code:', error); - // // Xử lý lỗi nếu cần - // } - // }; - - // Effect to fetch user data + const fetchKYCData = async () => { + try { + const response = await kycAPI.my(); + const data = response.data; + setKycStatus(data.status || 1); + setPersonalInfoChina([ + { key: '姓名', label: '姓名', children: data.details.find(detail => detail.fieldName === 'FullName')?.fieldValue || '未提供' }, + { key: '出生日期', label: '出生日期', children: data.details.find(detail => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供' }, + { key: '第一證件號碼', label: '第一證件號碼', children: data.details.find(detail => detail.fieldName === 'IDNumber')?.fieldValue || '未提供' }, + { key: '第二證件號碼', label: '第二證件號碼', children: data.details.find(detail => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供' }, + { key: '證件地址', label: '證件地址', children: data.details.find(detail => detail.fieldName === 'IDAddress')?.fieldValue || '未提供' }, + { key: '居住地址', label: '居住地址', children: data.details.find(detail => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供' } + ]); + } catch (error) { + console.error('Error fetching KYC data:', error); + } + }; + const fetchBankData = async () => { + try { + const response = await bankAPI.myBankAccount(); + const data = response.data; + setBankInfoChina( + data.map((bank) => ([ + { key: '銀行戶名', label: '銀行戶名', children: bank.accountHolder || '未提供' }, + { key: '銀行帳號', label: '銀行帳號', children: bank.accountNumber || '未提供' }, + { key: '銀行名稱', label: '銀行名稱', children: bank.bankName || '未提供' } + ])) + ); + } catch (error) { + console.error('Error fetching Bank data:', error); + } + } useEffect(() => { - const fetchUserData = async () => { - try { - const response = await api.get('/v1.0/client/me'); - const data = response.data; - console.log(data); - - // Mapping response fields to userInfo state - setUserInfo([ - { key: '用戶名稱', label: '用戶名稱', children: data.userName || '未提供' }, - { key: '電子信箱', label: '電子信箱', children: data.email || '未提供' }, - { key: '手機號碼', label: '手機號碼', children: data.phoneNumber || '未提供' }, - { key: '國家代碼', label: '國家代碼', children: data.countryCode || '未提供' }, - { key: '國家撥號代碼', label: '國家撥號代碼', children: data.countryCallingCode || '未提供' }, - { key: '平台名稱', label: '平台名稱', children: data.platformName || '未提供' }, - { key: '我的邀請碼', label: '我的邀請碼', children: data.myInvitationCode || '未提供' }, - // { - // key: 'invitationCode', - // label: '', - // children: ( - // - // ), - // } - { - key: 'invitationCode', - label: '', - children: , - }, - ]); - - // Update KYC status based on the response - } catch (error) { - console.error('Error fetching user data:', error); - } - }; - fetchUserData(); - }, []); - - // Effect to fetch KYC data - useEffect(() => { - const fetchKYCData = async () => { - try { - const response = await api.get('/v1.0/kyc/my'); - const data = response.data; - console.log(data); - setKycStatus(data.status || 1); - - setPersonalInfo_China([ - { - key: '姓名', - label: '姓名', - children: data.details.find((detail: any) => detail.fieldName === 'FullName')?.fieldValue || '未提供', - }, - { - key: '出生日期', - label: '出生日期', - children: data.details.find((detail: any) => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供', - }, - { - key: '第一證件號碼', - label: '第一證件號碼', - children: data.details.find((detail: any) => detail.fieldName === 'IDNumber')?.fieldValue || '未提供', - }, - { - key: '第二證件號碼', - label: '第二證件號碼', - children: - data.details.find((detail: any) => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供', - }, - { - key: '證件地址', - label: '證件地址', - children: data.details.find((detail: any) => detail.fieldName === 'IDAddress')?.fieldValue || '未提供', - }, - { - key: '居住地址', - label: '居住地址', - children: - data.details.find((detail: any) => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供', - }, - ]); - - setBankInfo_China([ - { key: '銀行戶名', label: '銀行戶名', children: data.bankName || '未提供' }, - { key: '銀行帳號', label: '銀行帳號', children: data.bankAccount || '未提供' }, - { key: '銀行名稱', label: '銀行名稱', children: data.bank || '未提供' }, - ]); - } catch (error) { - console.error('Error fetching KYC data:', error); - } - }; - fetchKYCData(); + fetchBankData(); }, []); - const genExtra = () => ( -
    { - event.stopPropagation(); - }} - > - {/* Show the button only for statuses 1 and 5 */} - {(kycStatus === 1 || kycStatus === 5) && ( - - )} -
    - ); - const getKycStatusColor = (status: number) => { switch (status) { case 1: case 5: - return 'warning'; // Not verified or needs re-upload + return 'warning'; case 2: - return 'processing'; // Verifying + return 'processing'; case 3: - return 'success'; // Verified + return 'success'; case 4: - return 'error'; // Rejected + return 'error'; default: return 'default'; } }; - const KYCCollapse: CollapseProps['items'] = [ + const kycStatusTag = ( + }> + {t( + `assets.${kycStatus === 1 + ? '未驗證' + : kycStatus === 2 + ? '驗證中' + : kycStatus === 3 + ? '已通過' + : kycStatus === 4 + ? '已拒絕' + : '需要重新上傳' + }` + )} + + ); + + const kycCollapse = [ { key: '實名驗證', label: (
    實名驗證
    - } - > - {t( - `assets.${ - kycStatus === 1 - ? '未驗證' - : kycStatus === 2 - ? '驗證中' - : kycStatus === 3 - ? '已通過' - : kycStatus === 4 - ? '已拒絕' - : '需要重新上傳' - }`, - )} - + {kycStatusTag}
    ), children: ( - - + <> + - setOpenBank(true)} - danger - size='small' - > - 變更 - - } - items={bankInfo_China} - size='small' - /> - + { + + bankInfoChina.map(bankFields => { + return ( + ({ + key: bank.key, + label: bank.label, + children: bank.children + }))} + extra={} + /> + ) + }) + } + + ), - extra: genExtra(), - }, + extra: (kycStatus === 1 || kycStatus === 5) && ( + + ) + } ]; return ( -
    -
    - - -
    用戶名稱
    - - } - headerBordered - bodyStyle={{ position: 'relative' }} - > - - -
    - -
    - setOpenKYCIdentityModal(false)} - onFinish={() => { - setKycStatus(2); - setOpenKYCIdentityModal(false); - }} - /> - setOpenBank(false)} - /> - setOpenUpdateCountryForm(false)} - /> +
    +
    用戶名稱
    } headerBordered bodyStyle={{ position: 'relative' }}> + + logo +
    + + setOpenKYCIdentityModal(false)} onFinish={() => { setKycStatus(2); setOpenKYCIdentityModal(false); }} /> + setOpenBank(false)} /> + setOpenUpdateCountryForm(false)} />
    ); }; diff --git a/src/pages/user/type.ts b/src/pages/user/type.ts new file mode 100644 index 0000000..34ee45a --- /dev/null +++ b/src/pages/user/type.ts @@ -0,0 +1,35 @@ +interface AddBankInfo { + bankName: string, + branch: string, + accountNumber: string, + accountHolder: string +} +interface BankAccount { + id: number; + bankName: string; + branch: string; + accountNumber: string; + accountHolder: string; + isActive: boolean; + createdAt: string; // or Date if you prefer using Date objects + updatedAt: string; // or Date if you prefer using Date objects +} + +interface KycDetail { + id: number; + fieldName: string; + fieldValue: string; + isVerified: boolean; + remark: string | null; + type: number; +} + +interface UserKycData { + countryCode: string; + countryCallingCode: number; + registerPhoneNumber: string; + status: number; + createdAt: string; + updatedAt: string; + details: KycDetail[]; +} diff --git a/src/services/bankAPI.ts b/src/services/bankAPI.ts new file mode 100644 index 0000000..070f193 --- /dev/null +++ b/src/services/bankAPI.ts @@ -0,0 +1,7 @@ +import { api } from "./configServ"; + +export const bankAPI = { + addBank: (bankInfo: AddBankInfo) => api.post("/v1.0/bank/add", bankInfo), + myBankAccount: () => api.get("/v1.0/bank/my"), + deleteBank: (bankId: number) => api.delete(`/v1.0/bank/my/${bankId}`) +} \ No newline at end of file diff --git a/src/services/configServ.ts b/src/services/configServ.ts index 77eb377..825594e 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -9,6 +9,7 @@ const https = axios.create({ timeout: 15000, headers: { 'Content-Type': 'application/json', + 'Accept-Language': 'en-US' }, }); @@ -16,7 +17,10 @@ const https = axios.create({ let host = (import.meta.env.VITE_HTTP_ROOT); export const api = axios.create({ withCredentials: true, - baseURL: host + baseURL: host, + headers: { + 'Accept-Language': 'en-US' + }, }); export const paymentApi = axios.create({ diff --git a/src/services/kycAPI.ts b/src/services/kycAPI.ts new file mode 100644 index 0000000..65006b7 --- /dev/null +++ b/src/services/kycAPI.ts @@ -0,0 +1,5 @@ +import { api } from "./configServ"; + +export const kycAPI = { + my: () => api.get('/v1.0/kyc/my') +} \ No newline at end of file diff --git a/src/services/walletApi.ts b/src/services/walletApi.ts new file mode 100644 index 0000000..e2d30d8 --- /dev/null +++ b/src/services/walletApi.ts @@ -0,0 +1,14 @@ +import { api } from "./configServ" + +export const walletApi = { + depositViaBank: async () => { + return api.post("/v1.0/client/deposit/bank") + }, + depositViaCryptoWallet: async () => { + return api.post("/v1.0/client/deposit/crypto") + }, + confirmDepositOrder: async () => { + return api.post("/v1.0/client/deposit/confirm"); + } + +} \ No newline at end of file diff --git a/src/store/hubs/types.ts b/src/store/hubs/types.ts new file mode 100644 index 0000000..975c17c --- /dev/null +++ b/src/store/hubs/types.ts @@ -0,0 +1,125 @@ +enum TransactionType { + MT4Deposit = 1, // CRM -> MT4 + MT4Withdrawal, // MT4 -> CRM + MT4CreditIn, + MT4CreditOut, +} + +enum TransactionStatus { + Pending = 1, // 交易處理 + Completed, // 交易已完成 + Failed, // 交易失敗 +} + +export interface UserDto { + UserId: string; + UserName: string; +} + +export interface MarketDataDto { + Symbol: string; + Bid: string; // 買入價格 + Ask: string; // 賣出價格 + LastTime: Date; +} + +export interface NotifyMT4TransferToClientDto { + Amount: number; + Type: TransactionType; + Status: TransactionStatus; + Login: number; + Order: string; + CreatedAt: Date; +} +export interface NotifyPendingDepositOrderDto { + sysDate: string; + payee_BankName: string; + payee_BankAccount: string; + requestedAmt: number; + order_ID: string; + order_Key: string; + directPay: string; + orderId: number; + userId: string; + expiredAt: string; +} + +export interface NotifyCompletedDepositOrderDto { + Order_Number: string; // Your System's unique transaction order number + Amount: number; // The amount that BVAC recognizes + Complete_Date: string; // The date the transaction was committed + UserId: string; +} +export interface NotifyMT4TransferDto extends NotifyMT4TransferToClientDto { + OwnerUserId: string; + OwnerName: string; + OperatorName: string; +} +export interface MT4MarkDataDto { + Symbol: string; // The symbol of the market data (e.g., "EUR/USD") + Bid: string; // The bid price for the symbol (e.g., "1.2345") + Ask: string; // The ask price for the symbol (e.g., "1.2347") + LastTime: Date; // The last time the market data was updated +} +export interface NotifyTradeDto { + Login: number; // MT4 account + Order: number; // MT4 order number + Symbol: string; + Volume: number; // 交易數量 + State: number; // --- trade record state + OpenTime: Date; // 開倉時間 + CloseTime: Date; // 平倉時間 + Expiration: Date; // 過期時間 + OpenPrice: number; // 開倉價格 + ClosePrice: number; // 平倉價格 + SL: number; // 止損價格 + TP: number; // 止盈價格 + Commission: number; // 佣金 + CommissionAgent: number; // 代理佣金 + Storage: number; // 過夜利息 + MarginRate: number; // 保證金比率 + Profit: number; // 利潤 + Taxes: number; // 稅金 + Comment: string; // 評論 + GwVolume: number; // 網關交易量 + GwOrder: number; // 外部交易訂單 + GwOpenPrice: number; // 外部開倉價格 + GwClosePrice: number; // 外不平倉價格 +} + +export interface NotifyMarginCallDto { + userId: string; + userName: string; + login: number; + group: string; + equity: number; + balance: number; + credit: number; + levelType: number; // --- margin level type + marginType: number; // --- margin controlling type + marginLevelValue: number; + marginFree: number; // 未使用保證金 + margin: number; // 以使用保證金 + volume: number; // 未平倉的頭寸 +} + +//========================// +// MT4 data // +//========================// + +//--- trade record state +// enum { +// TS_OPEN_NORMAL, // The trade is open in normal state +// TS_OPEN_REMAND, // The trade is open and remanded (held for some reason) +// TS_OPEN_RESTORED, // The trade is open and has been restored +// TS_CLOSED_NORMAL, // The trade is closed in a normal state +// TS_CLOSED_PART, // The trade is partially closed +// TS_CLOSED_BY, // The trade is closed by another trade +// TS_DELETED // The trade has been deleted +// }; + +//--- margin level type +// enum { MARGINLEVEL_OK=0, MARGINLEVEL_MARGINCALL, MARGINLEVEL_STOPOUT }; + +//--- margin controlling type +// { MARGIN_TYPE_PERCENT, MARGIN_TYPE_CURRENCY } diff --git a/src/store/hubs/useClientHubStore.ts b/src/store/hubs/useClientHubStore.ts new file mode 100644 index 0000000..d658526 --- /dev/null +++ b/src/store/hubs/useClientHubStore.ts @@ -0,0 +1,89 @@ +import { create } from "zustand"; +import * as signalR from "@microsoft/signalr"; +import { + NotifyCompletedDepositOrderDto, + NotifyMT4TransferToClientDto, + NotifyPendingDepositOrderDto, +} from "./types"; + +const url = "https://demoApi.rushprofit.uk/hubs/clientHub"; + +interface ClientHubState { + shouldInitConnection: boolean; + hubConnection: signalR.HubConnection | null; + mt4TransferMessage: NotifyMT4TransferToClientDto | null; + pendingDepositMessage: NotifyPendingDepositOrderDto | null; + completedOrderMessage: NotifyCompletedDepositOrderDto | null; + connectHub: () => void; + disconnectHub: () => void; +} + +export const useClientHubStore = create((set, get) => ({ + shouldInitConnection: true, + hubConnection: null, + mt4TransferMessage: null, + pendingDepositMessage: null, + completedOrderMessage: null, + + connectHub: () => { + const { shouldInitConnection } = get(); + + if (!shouldInitConnection) { + return; + } + + const connection = new signalR.HubConnectionBuilder() + .withUrl(url, { + accessTokenFactory: () => localStorage.getItem("token") || "", // Get token from localStorage + }) + .withAutomaticReconnect() + .build(); + + connection + .start() + .then(() => { + console.log("Connection started!"); + set({ hubConnection: connection }); + }) + .catch((err) => console.log("Error while establishing connection :( ", err)); + + connection.on("NotifyMT4Transfer", (message: NotifyMT4TransferToClientDto) => { + console.log("NotifyMT4Transfer: ", message); + + set((state) => ({ + ...state, // Retain other state properties + mt4TransferMessage: message, + })); + }); + + connection.on("NotifyPendingDeposit", (message: NotifyPendingDepositOrderDto) => { + console.log("NotifyPendingDeposit: ", message); + + set((state) => ({ + ...state, // Retain other state properties + pendingDepositMessage: message, + })); + }); + + connection.on("NotifyCompletedOrder", (message: NotifyCompletedDepositOrderDto) => { + console.log("NotifyCompletedOrder: ", message); + set((state) => ({ + ...state, // Retain other state properties + completedOrderMessage: message, + })); + }); + + return () => { + connection.stop(); + set({ hubConnection: null }); + }; + }, + + disconnectHub: () => { + const { hubConnection } = get(); + if (hubConnection) { + hubConnection.stop(); + set({ hubConnection: null }); + } + }, +})); diff --git a/src/store/useAccountStore.ts b/src/store/useAccountStore.ts index 6ff8f5d..828741d 100644 --- a/src/store/useAccountStore.ts +++ b/src/store/useAccountStore.ts @@ -1,6 +1,25 @@ +import { bankAPI } from '@/services/bankAPI'; import { api } from '@/services/configServ'; import { create } from 'zustand'; +interface KYCDetail { + id: number; + fieldName: string; + fieldValue: string; + isVerified: boolean; + remark: string | null; + type: number; +} + +interface KYCData { + countryCode: string; + countryCallingCode: number; + registerPhoneNumber: string; + status: number; + createdAt: string; + updatedAt: string; + details: KYCDetail[]; +} // Define the structure for an account interface Account { userId: string; @@ -48,6 +67,7 @@ interface Balance { amount: string; } + // Define the structure for an order history entry interface OrderHistory { orderId: string; @@ -86,11 +106,15 @@ interface AccountStoreOptions { balances: Balance[]; // New field for storing balances orderHistories: OrderHistory[]; // New field for storing order histories me: Me | null; + kyc: KYCData | null; + banks: BankAccount[]; setMT4Accounts: (accounts: Account[]) => void; setBalances: (balances: Balance[]) => void; setOrderHistories: (orderHistories: OrderHistory[]) => void; fetchMe: () => Promise; fetchMT4Accounts: () => Promise; + fetchKyc: () => Promise; + fetchBank: () => Promise; } // Create the Zustand store @@ -100,15 +124,24 @@ const useAccountStore = create((set) => ({ balances: [], // Initialize empty balances orderHistories: [], // Initialize empty order histories me: null, + kyc: null, + banks: [], fetchMT4Accounts: async () => { const { items: accounts } = await api.get("/v1.0/client/my/mt4/account?PageNumber=1&PageSize=50").then(res => res.data); set(() => ({ MT4Accounts: accounts })); }, fetchMe: async () => { const me = await api.get("/v1.0/client/me").then(res => res.data); - console.log(me) set(() => ({ me })); }, + fetchKyc: async () => { + const kyc = await api.get("/v1.0/kyc/my").then(res => res.data); + set(() => ({ kyc })); + }, + fetchBank: async () => { + const banks = await bankAPI.myBankAccount().then(res => res.data); + set(() => ({ banks })); + }, // Method to set MT4 accounts setMT4Accounts: (accounts) => { set(() => ({ MT4Accounts: accounts })); diff --git a/src/store/useMarketDataStore.ts b/src/store/useMarketDataStore.ts new file mode 100644 index 0000000..ee6fc4f --- /dev/null +++ b/src/store/useMarketDataStore.ts @@ -0,0 +1,60 @@ +import { create } from "zustand"; +import * as signalR from "@microsoft/signalr"; +import { MT4MarkDataDto } from "./hubs/types"; + +const url = "https://demoApi.rushprofit.uk/hubs/marketData"; + +interface MarketDataHubState { + shouldInitConnection: boolean; + hubConnection: signalR.HubConnection | null; + marketDataMessage: MT4MarkDataDto | null; + connectHub: () => void; + disconnectHub: () => void; +} + +export const useMarketDataHubStore = create((set, get) => ({ + shouldInitConnection: true, + hubConnection: null, + marketDataMessage: null, + + connectHub: () => { + const { shouldInitConnection } = get(); + if (!shouldInitConnection) { + return; + } + + const connection = new signalR.HubConnectionBuilder() + .withUrl(url, { + accessTokenFactory: () => localStorage.getItem("token") || "", + }) + .withAutomaticReconnect() + .build(); + + connection + .start() + .then(() => { + console.log("Connection started!"); + set({ hubConnection: connection }); + }) + .catch((err) => console.log("Error while establishing connection :( ", err)); + + // market data subscription + connection.on("BidAskUpdate", (message: MT4MarkDataDto) => { + console.log("BidAskUpdate: ", message); + set({ marketDataMessage: message }); + }); + + // Cleanup on disconnect + return () => { + connection.stop(); + set({ hubConnection: null }); + }; + }, + disconnectHub: () => { + const { hubConnection } = get(); + if (hubConnection) { + hubConnection.stop(); + set({ hubConnection: null }); + } + }, +})); From 360186bfceae6debf34bf3c20aceaf499c782c9d Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Mon, 21 Oct 2024 10:31:31 +0700 Subject: [PATCH 052/118] Exclude mt4 from deposit --- src/components/SelectAccount.tsx | 34 +++++++++++-------- src/pages/AppRouter.tsx | 2 +- src/pages/property/Deposit.tsx | 3 +- .../user/components/KycIdentityModal.tsx | 7 ---- src/pages/user/index.tsx | 2 -- 5 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 495debf..9d410aa 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -8,9 +8,10 @@ import { useAccountStore } from '@/store/useAccountStore'; interface ISelectAccountProps { value?: string; // The value prop for the form onChange?: (value: string) => void; // The onChange prop to update the form's state + includeMT4?: boolean } -const SelectAccount: React.FunctionComponent = ({ value, onChange }) => { +const SelectAccount: React.FunctionComponent = ({ value, onChange, includeMT4 = true }) => { const { t } = useTranslation(); const [showAddAccount, setShowAddAccount] = useState(false); const { MT4Accounts, fetchMT4Accounts, fetchMe, me } = useAccountStore(); @@ -38,31 +39,34 @@ const SelectAccount: React.FunctionComponent = ({ value, on })); }; + let options = [ + { + label: {t('report.寶泰帳戶')}, + title: '寶泰帳戶', + options: [{ label: {`寶泰帳戶-${me?.email}`}, value: 'Baotai' }], + } + ] + if (includeMT4) { + options.push({ + label: MT4 帳戶, + title: 'MT4 帳戶', + options: getMT4Options(), + }) + } return (
    form.setFieldValue("Channel", value)} value={form.getFieldValue("Channel")} /> } + onChange={UpdatePrice} placeholder={t('account.輸入')} />
    - + {/* 判斷法幣通道 */} = (props) => { } /> */} + @@ -150,15 +197,15 @@ const Withdraw: React.FunctionComponent = (props) => { + { - console.log("test") setOpenSafetyVerification(false); - setCurrentStep('confirm-order'); + setCurrentStep('idle'); }} - currentStep={currentStep} - setCurrentStep={setCurrentStep} + currentStep={data.currentStep} + handleVerificationSubmit={handleVerificationSubmit} />
    ); diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index 7ddc422..f58d2e1 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -1,32 +1,88 @@ -import React, { useEffect, useState } from 'react'; +import React, { createContext, useContext, useEffect, useState } from 'react'; import { Button, Form, Input, Modal, Space, Typography } from 'antd'; import { useTranslation } from 'react-i18next'; import UseLoading from './UseLoading'; import TransferLoading from './TransferLoading'; +import { useAccountStore } from '@/store/useAccountStore'; const { Title, Text } = Typography; +// Define the shape of the context data +interface IVerificationData { + [key: string]: any; // Flexible data structure for each step + currentStep: string; +} + +// Define the shape of the context value +interface IVerificationContext { + data: IVerificationData; + setData: (step: string, data: any) => void; + setCurrentStep: (step: string) => void; +} + +// Create the context with a default value +const VerificationContext = createContext(undefined); + +// Create a Provider component +export const VerificationProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [data, setVerificationData] = useState({ + currentStep: 'idle', // Default step + }); + + + useEffect(() => { + console.log("data changed: ", data) + }, [data]) + // Function to update data for each step + const setData = (step: string, newData: any) => { + setVerificationData((prevData) => ({ + ...prevData, + [step]: newData, + })); + }; + + // Function to update the current step + const setCurrentStep = (step: string) => { + setVerificationData((prevData) => ({ + ...prevData, + currentStep: step, + })); + }; + + return ( + + {children} + + ); +}; + +// Hook to use the Verification context +export const useVerification = () => { + const context = useContext(VerificationContext); + if (!context) { + throw new Error('useVerification must be used within a VerificationProvider'); + } + return context; +}; interface ISafetyVerificationProps { open: boolean; onCancel: () => void; currentStep: string; - setCurrentStep: (step: string) => void; + handleVerificationSubmit: () => void } const SafetyVerification: React.FunctionComponent = ({ open, onCancel, currentStep, - setCurrentStep, + handleVerificationSubmit }) => { const [disabled, setDisabled] = useState(false); const [countdown, setCountdown] = useState('3:00'); const [verificationCode, setVerificationCode] = useState(''); const { t } = useTranslation(); - useEffect(() => { - console.log("Current step: ", currentStep); - }, [currentStep]); + const handleClick = () => { setDisabled(true); @@ -45,25 +101,6 @@ const SafetyVerification: React.FunctionComponent = ({ }, 1000); }; - const handleVerificationSubmit = () => { - switch (currentStep) { - case 'confirm-order': - setCurrentStep('email'); - break; - case 'email': - setCurrentStep('verify-email-code'); - break; - case 'verify-email-code': - setCurrentStep('pending-order'); - break; - case 'pending-order': - setCurrentStep('completed-order'); - break; - default: - setCurrentStep('email'); - break; - } - }; return (
    @@ -98,63 +135,75 @@ const SafetyVerification: React.FunctionComponent = ({ ); }; -const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( - - 確認出金 -
    - } - open={open} - destroyOnClose - width={480} - footer={null} - > - -
    - 出金帳戶:gmail -
    -
    - 帳戶可用現金:gmail -
    -
    - 出金金額:gmail -
    -
    - {t('assets.手續費')}:gmail -
    -
    - {t('assets.提取為')}:gmail -
    -
    - {t('assets.出金匯率')}:gmail -
    -
    - 錢包地址:gmail -
    -
    - 銀行戶名:gmail -
    -
    - 銀行帳號:gmail -
    -
    - 銀行名稱:gmail -
    -
    - 開戶行:gmail -
    -
    - - -
    -
    - -); +const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => { + + + const { data } = useVerification() + const me = useAccountStore(state => state.me); + useEffect(() => { + console.log(data[data.currentStep]) + }, []) + return ( + + 確認出金 +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + 出金帳戶:{me?.email} +
    +
    + 帳戶可用現金:{me?.wallet.balance} +
    +
    + 出金金額:{data[data.currentStep]["withdrawAmount"]} +
    +
    + {t('assets.手續費')}:0 +
    +
    + Withdraw as:USD +
    + {/*
    + Exchange Rate:gmail +
    */} +
    + Receive:{data[data.currentStep]["receiveAmount"]} +
    + {/*
    + Wallet Address:gmail +
    */} +
    + Bank Name:{data[data.currentStep]["bank"].split(" | ")[0]} +
    +
    + Bank Account Holder:{data[data.currentStep]["bank"].split(" | ")[1]} +
    +
    + Bank Account Number:{data[data.currentStep]["bank"].split(" | ")[2]} +
    +
    + Branch:{data[data.currentStep]["bank"].split(" | ")[3]} +
    +
    + + +
    +
    + + ); +} const ConfirmTransferModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( { tab={t('assets.出金')} key='出金' > - + + + + Date: Mon, 21 Oct 2024 16:43:04 +0700 Subject: [PATCH 057/118] withdraw wallet balance --- src/pages/property/Withdraw.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 1277369..686bf73 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -112,7 +112,7 @@ const Withdraw: React.FunctionComponent = (props) => { name='Balance' style={{ color: '#F39D1B' }} > -
    $ 0.00
    +
    $ {me?.wallet.balance}
    Date: Mon, 21 Oct 2024 17:39:34 +0700 Subject: [PATCH 058/118] rafact translate all KYC --- src/I18n/ch/components/auth.ts | 18 ++- src/I18n/ch/components/layout.ts | 11 ++ src/I18n/en/components/auth.ts | 101 ++++++++++++++++- src/I18n/en/components/layout.ts | 11 ++ src/I18n/vi/components/auth.ts | 101 ++++++++++++++++- src/I18n/vi/components/layout.ts | 11 ++ src/pages/user/components/KycBankModal.tsx | 103 +++++++++++++----- .../user/components/KycIdentityResult.tsx | 31 +++--- 8 files changed, 338 insertions(+), 49 deletions(-) diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index 39f0c00..e62cc42 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -63,7 +63,7 @@ const auth = { titleStep1: '證件類型', primaryDocLabel: '第一證件', secondaryDocLabel: '第二證件', - idCardTitle:'身分證', + idCardTitle: '身分證', passportTitle: '護照', driverLicense: '駕照', residencePermit: '居留證', @@ -89,6 +89,22 @@ const auth = { labelUserinfo8: '居住地址', labelUserinfo9: '電話號碼', validaitonAllLabelUser: '此項為必填項,請勿留空', + + // kyc Bank modal + + bankModalTitle: '銀行驗證', + bankModalWarning: '務必確保輸入的資料,與銀行帳戶資訊一致', + bankModalLabel1: '銀行戶名', + bankModalLabel2: '銀行帳號', + bankModalLabel3: '銀行名稱', + bankModalLabel4: '分行', + bankModelPlaceHolder: '請輸入', + branchPlaceholder: '選填', + accountNumberValidaiton: '銀行帳號為必填項', + bankNameValidaiton: '銀行名稱為必填項', + kycBankModalSubmit: '提 交', + addbankSuccesMessage: '銀行帳戶添加成功', + unknowErrors: '發生未知錯誤', }; export default auth; diff --git a/src/I18n/ch/components/layout.ts b/src/I18n/ch/components/layout.ts index e235252..43c2aa7 100644 --- a/src/I18n/ch/components/layout.ts +++ b/src/I18n/ch/components/layout.ts @@ -21,6 +21,17 @@ const layout = { 隱私和法規: '隱私和法規', 通知入金成功: '通知-入金成功', 通知出金成功: '通知-出金成功', + + // 身分驗證等待介面 跟 銀行驗證等待介面 + waitKycTitle: '驗證中', + introduceWaitKyc1: '我們會盡快為您驗證,驗證完成後您將收到通知', + introduceWaitKyc2: '您可繼續驗證銀行資訊,以開通', + introduceWaitKyc3: '功能', + colorTextIntroduce: '出金', + backHomeButtonWaitKYC: '回主頁', + openKYCbankButton: '驗證銀行資訊', + sendMoneyWhenWaitKYC: '等候驗證期間,不妨先存入資金!', + goSendMoney: '前往', }; export default layout; diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index 8804b15..ef4c429 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -2,14 +2,107 @@ const auth = { //loginPage: loginTitle: 'Login', SuggestCreateAcc: 'Register', - forgotPasswordAtLogin: 'Forgot your password', + forgotPasswordAtLogin: 'Forgot Password', passwordAtLoginAndSignUp: 'Password', loginButton: 'Send', emailAtLoginAndSignUp: 'Email', rememberAtLogin: 'Remember Me', noAccountYetAtLogin: "Don't have an account? Go to", - //header handle logout and user_infor - logOutAtHeader: 'LogOut', -}; + noEmailYet: "Haven't received an email yet?", + resend: 'Resend', + validationEmailUserNameLogin: 'Please enter your email', + validationPasswordLogin: 'Please enter your password', + //header handle logout and user_info + logOutAtHeader: 'Logout', + // register Page: + register: 'Register', + name: 'Name', + telephoneNumber: 'Phone Number', + invitationCode: 'Invitation Code (Optional)', + readAndAgree: 'I have read and agree to', + termsAndConditions: 'Terms and Conditions', + setPassword: 'Set Password', + confirmPassword: 'Confirm Password', + validationUserNameRegister1: 'Please enter your name', + validationUserNameRegister2: 'Name can only contain letters and numbers', + validiationCountryCodeRegister: 'Please select a country code', + validationUserPhone: 'Please enter your number', + validationEmailRegister1: 'Invalid email address', + validationEmailRegister2: 'Please enter your email address', + validaitonAgreeRegister: 'You must agree to the terms', + validaitionPasswordRegister1: 'Please enter your password', + validaitionPasswordRegister2: 'Password must be at least eight characters', + validaitionPasswordRegister3: 'Password must contain at least one lowercase letter (a-z)', + validaitionPasswordRegister4: 'Password must contain at least one uppercase letter (A-Z)', + validationPasswordRegister5: 'Password must contain at least one number', + validiationConfirmPasswordRegister: 'Please confirm your password', + checkSamePasswordRegister: 'The two passwords entered do not match', + sentEmailAndCheckRegister: 'Email sent. Please check your email', + unknowErrorRegister: 'An unknown error occurred.', + // Resend Register Email: + CheckEmailSignUp: 'Check your email', + ResendEmailName: 'Resend Email', + GotTheLetter: 'Did you receive the email?', + LoginRightNow: 'Login Now!', + // Get Password page: + validationGetPasswordAndMailResend: 'Invalid email address', + validationGetPasswordAndMailResend2: 'Please enter your email address', + pleaseCheckMail: 'Please check your email.', + getPasswordTitle: 'Check Your Email', + getPasswordFormName: 'Forgot Password', + sendMailGetPassword: 'Send Email', + waitForSendOneMore: 'Please wait', + time: 'seconds', + + // kycModal: + kycModalTitle: 'Identity Verification', + kycModalDescription: 'Through real-name verification', + goBackSteps: 'Go Back', + proceedSteps: 'Continue', + titleStep1: 'Document Type', + primaryDocLabel: 'Primary Document', + secondaryDocLabel: 'Secondary Document', + idCardTitle: 'ID Card', + passportTitle: 'Passport', + driverLicense: "Driver's License", + residencePermit: 'Residence Permit', + titleStep2: 'Upload Images', + remindStep2: 'Avoid blurriness / Show complete text information', + remindBrStep2: 'Do not use edited images', + image1Label: 'Primary Document Front', + image2Label: 'Primary Document Back', + image3Label: 'Secondary Document Front', + image4Label: 'Secondary Document Back', + image5Label: 'Photo of Yourself Holding Document', + image6Label: 'Proof of Residence', + imageAllTitle: 'Upload', + titleStep3: 'Identity Information', + remindStep3: 'Ensure that the entered information matches the ID document information', + labelUserinfo1: 'Primary Document Name', + labelUserinfo2: 'Primary Document Number', + labelUserinfo3: 'Secondary Document Name', + labelUserinfo4: 'Secondary Document Number', + labelUserinfo5: 'Date of Birth', + labelUserinfo6: 'ID Address', + labelUserinfo7: 'Residence Address Same as ID Address', + labelUserinfo8: 'Residence Address', + labelUserinfo9: 'Phone Number', + validaitonAllLabelUser: 'This field is required, please do not leave it empty', + // kyc Bank modal + + bankModalTitle: 'Bank Verification', + bankModalWarning: 'Ensure that the entered information matches the bank account information', + bankModalLabel1: 'Bank Account Name', + bankModalLabel2: 'Bank Account Number', + bankModalLabel3: 'Bank Name', + bankModalLabel4: 'Branch', + bankModelPlaceHolder: 'Please enter', + branchPlaceholder: 'Optional', + accountNumberValidaiton: 'Bank account number is required', + bankNameValidaiton: 'Bank name is required', + kycBankModalSubmit: 'Submit', + addbankSuccesMessage: 'Bank account added successfully', + unknowErrors: 'An unknown error occurred', +}; export default auth; diff --git a/src/I18n/en/components/layout.ts b/src/I18n/en/components/layout.ts index 7e86459..dc30232 100644 --- a/src/I18n/en/components/layout.ts +++ b/src/I18n/en/components/layout.ts @@ -21,6 +21,17 @@ const layout = { 隱私和法規: 'Privacy and Regulations', 通知入金成功: 'Notification - Deposit Successful', 通知出金成功: 'Notification - Withdrawal Successful', + // Identity verification waiting interface and bank verification waiting interface + waitKycTitle: 'Verifying', + introduceWaitKyc1: + 'We will verify your information as soon as possible, and you will be notified once the verification is complete.', + introduceWaitKyc2: 'You can continue to verify your bank information to activate', + introduceWaitKyc3: 'features', + colorTextIntroduce: 'Withdrawals', + backHomeButtonWaitKYC: 'Back to Home', + openKYCbankButton: 'Verify Bank Information', + sendMoneyWhenWaitKYC: 'During the verification period, feel free to deposit funds!', + goSendMoney: 'Go to Deposit', }; export default layout; diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts index 296cfe5..ccb123a 100644 --- a/src/I18n/vi/components/auth.ts +++ b/src/I18n/vi/components/auth.ts @@ -4,12 +4,105 @@ const auth = { SuggestCreateAcc: 'Đăng ký', forgotPasswordAtLogin: 'Quên mật khẩu', passwordAtLoginAndSignUp: 'Mật khẩu', - loginButton: 'Đăng nhập', + loginButton: 'Gửi', emailAtLoginAndSignUp: 'Email', rememberAtLogin: 'Ghi nhớ tôi', - noAccountYetAtLogin: 'Chưa có tài khoản? Đi tới ', - //header handle logout and user_infor + noAccountYetAtLogin: 'Chưa có tài khoản? Đi tới', + noEmailYet: 'Chưa nhận được email?', + resend: 'Gửi lại', + validationEmailUserNameLogin: 'Vui lòng nhập email', + validationPasswordLogin: 'Vui lòng nhập mật khẩu', + //header handle logout and user_info logOutAtHeader: 'Đăng xuất', -}; + // register Page: + register: 'Đăng ký', + name: 'Tên', + telephoneNumber: 'Số điện thoại', + invitationCode: 'Mã mời (Tùy chọn)', + readAndAgree: 'Tôi đã đọc và đồng ý với', + termsAndConditions: 'Điều khoản và điều kiện', + setPassword: 'Đặt mật khẩu', + confirmPassword: 'Xác nhận mật khẩu', + validationUserNameRegister1: 'Vui lòng nhập tên', + validationUserNameRegister2: 'Tên chỉ có thể chứa chữ cái và số', + validiationCountryCodeRegister: 'Vui lòng chọn mã quốc gia', + validationUserPhone: 'Vui lòng nhập số', + validationEmailRegister1: 'Địa chỉ email không hợp lệ', + validationEmailRegister2: 'Vui lòng nhập địa chỉ email', + validaitonAgreeRegister: 'Bạn phải đồng ý với các điều khoản', + validaitionPasswordRegister1: 'Vui lòng nhập mật khẩu', + validaitionPasswordRegister2: 'Mật khẩu phải có ít nhất tám ký tự', + validaitionPasswordRegister3: 'Mật khẩu phải chứa ít nhất một chữ cái viết thường (a-z)', + validaitionPasswordRegister4: 'Mật khẩu phải chứa ít nhất một chữ cái viết hoa (A-Z)', + validationPasswordRegister5: 'Mật khẩu phải chứa ít nhất một số', + validiationConfirmPasswordRegister: 'Vui lòng xác nhận mật khẩu', + checkSamePasswordRegister: 'Hai lần nhập mật khẩu không khớp', + sentEmailAndCheckRegister: 'Email đã được gửi. Vui lòng kiểm tra email', + unknowErrorRegister: 'Đã xảy ra lỗi không xác định.', + // Resend Register Email: + CheckEmailSignUp: 'Kiểm tra email', + ResendEmailName: 'Gửi lại email', + GotTheLetter: 'Bạn đã nhận được email chưa?', + LoginRightNow: 'Đăng nhập ngay!', + // Get Password page: + validationGetPasswordAndMailResend: 'Địa chỉ email không hợp lệ', + validationGetPasswordAndMailResend2: 'Vui lòng nhập địa chỉ email', + pleaseCheckMail: 'Vui lòng kiểm tra email của bạn.', + getPasswordTitle: 'Kiểm tra email', + getPasswordFormName: 'Quên mật khẩu', + sendMailGetPassword: 'Gửi email', + waitForSendOneMore: 'Vui lòng chờ', + time: 'giây', + + // kycModal: + kycModalTitle: 'Xác minh danh tính', + kycModalDescription: 'Thông qua xác thực danh tính', + goBackSteps: 'Quay lại', + proceedSteps: 'Tiếp tục', + titleStep1: 'Loại tài liệu', + primaryDocLabel: 'Tài liệu chính', + secondaryDocLabel: 'Tài liệu phụ', + idCardTitle: 'Thẻ căn cước', + passportTitle: 'Hộ chiếu', + driverLicense: 'Giấy phép lái xe', + residencePermit: 'Giấy phép cư trú', + titleStep2: 'Tải lên hình ảnh', + remindStep2: 'Tránh mờ / Hiển thị thông tin văn bản đầy đủ', + remindBrStep2: 'Không sử dụng hình ảnh đã chỉnh sửa', + image1Label: 'Mặt trước tài liệu chính', + image2Label: 'Mặt sau tài liệu chính', + image3Label: 'Mặt trước tài liệu phụ', + image4Label: 'Mặt sau tài liệu phụ', + image5Label: 'Ảnh của bạn cầm tài liệu', + image6Label: 'Chứng minh nơi cư trú', + imageAllTitle: 'Tải lên', + titleStep3: 'Thông tin danh tính', + remindStep3: 'Đảm bảo rằng thông tin nhập vào khớp với thông tin trên tài liệu', + labelUserinfo1: 'Tên trên tài liệu chính', + labelUserinfo2: 'Số trên tài liệu chính', + labelUserinfo3: 'Tên trên tài liệu phụ', + labelUserinfo4: 'Số trên tài liệu phụ', + labelUserinfo5: 'Ngày sinh', + labelUserinfo6: 'Địa chỉ ID', + labelUserinfo7: 'Địa chỉ cư trú giống với địa chỉ ID', + labelUserinfo8: 'Địa chỉ cư trú', + labelUserinfo9: 'Số điện thoại', + validaitonAllLabelUser: 'Trường này là bắt buộc, vui lòng không để trống', + // kyc Bank modal + + bankModalTitle: 'Xác minh ngân hàng', + bankModalWarning: 'Đảm bảo rằng thông tin nhập vào khớp với thông tin tài khoản ngân hàng', + bankModalLabel1: 'Tên tài khoản ngân hàng', + bankModalLabel2: 'Số tài khoản ngân hàng', + bankModalLabel3: 'Tên ngân hàng', + bankModalLabel4: 'Chi nhánh', + bankModelPlaceHolder: 'Vui lòng nhập', + branchPlaceholder: 'Tùy chọn', + accountNumberValidaiton: 'Số tài khoản ngân hàng là bắt buộc', + bankNameValidaiton: 'Tên ngân hàng là bắt buộc', + kycBankModalSubmit: 'Gửi', + addbankSuccesMessage: 'Tài khoản ngân hàng đã được thêm thành công', + unknowErrors: 'Đã xảy ra lỗi không xác định', +}; export default auth; diff --git a/src/I18n/vi/components/layout.ts b/src/I18n/vi/components/layout.ts index 12b4451..9dfc1ad 100644 --- a/src/I18n/vi/components/layout.ts +++ b/src/I18n/vi/components/layout.ts @@ -21,6 +21,17 @@ const layout = { 隱私和法規: 'Quyền riêng tư và quy định', 通知入金成功: 'Thông báo- Nạp tiền thành công', 通知出金成功: 'Thông báo- Rút tiền thành công', + // Giao diện chờ xác minh danh tính và giao diện chờ xác minh ngân hàng + waitKycTitle: 'Đang xác minh', + introduceWaitKyc1: + 'Chúng tôi sẽ xác minh thông tin của bạn trong thời gian sớm nhất có thể, bạn sẽ nhận được thông báo khi xác minh hoàn tất.', + introduceWaitKyc2: 'Bạn có thể tiếp tục xác minh thông tin ngân hàng để kích hoạt', + introduceWaitKyc3: 'các tính năng', + colorTextIntroduce: 'Rút tiền', + backHomeButtonWaitKYC: 'Quay lại trang chủ', + openKYCbankButton: 'Xác minh thông tin ngân hàng', + sendMoneyWhenWaitKYC: 'Trong thời gian chờ xác minh, bạn có thể gửi tiền!', + goSendMoney: 'Đi tới gửi tiền', }; export default layout; diff --git a/src/pages/user/components/KycBankModal.tsx b/src/pages/user/components/KycBankModal.tsx index 75efe12..0dd6e65 100644 --- a/src/pages/user/components/KycBankModal.tsx +++ b/src/pages/user/components/KycBankModal.tsx @@ -7,7 +7,9 @@ import { useAccountStore } from '@/store/useAccountStore'; import { useForm } from 'antd/es/form/Form'; import { LoadingOutlined } from '@ant-design/icons'; import { bankAPI } from '@/services/bankAPI'; -import { AxiosError } from 'axios'; +// import { AxiosError } from 'axios'; +import { t } from 'i18next'; +// import { error } from 'console'; interface IKycBankModalProps { open: boolean; @@ -16,7 +18,8 @@ interface IKycBankModalProps { const KycBankModal: React.FunctionComponent = ({ open, onCancel }) => { const [OpenKycBankResult, setOpenKycBankResult] = useState(false); - const name = useAccountStore(state => state.kyc?.details)?.find(detail => detail.fieldName == 'FullName')?.fieldValue; + const name = useAccountStore((state) => state.kyc?.details)?.find((detail) => detail.fieldName == 'FullName') + ?.fieldValue; const [loading, setLoading] = useState(true); const waitTime = (time: number = 100) => { @@ -40,8 +43,13 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan // Show a loading spinner if `name` is not yet initialized return ( } - tip="Loading..." + indicator={ + + } + tip='Loading...' /> ); } @@ -50,11 +58,25 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan try { await bankAPI.addBank(values); setOpenKycBankResult(true); - message.success('Bank account added succesfully'); + message.success(`${t('auth.addbankSuccesMessage')}`); } catch (e: any) { - message.error('Error: ' + e.response.error.title); + const errorResponse = e.response?.data?.errors; + + if (errorResponse) { + // Loop through all error fields in errors object + for (const field in errorResponse) { + if (errorResponse.hasOwnProperty(field)) { + // Display all error messages for each field (if it is an array, iterate through the array) + errorResponse[field].forEach((errorMsg: string) => { + message.error(`${field}: ${errorMsg}`); + }); + } + } + } else { + message.error(`${t('auth.unknowErrors')}`); + } } - } + }; return (
    = ({ open, onCan required: '必填', }, }} - stepsRender={() => (<>)} + stepsRender={() => <>} stepsFormRender={(dom, submitter) => { return ( = ({ open, onCan onCancel={onCancel} title={
    - - 銀行驗證 + + {t('auth.bankModalTitle')} - 銀行驗證
    } open={open} - footer={submitter} + footer={[ + , + ]} destroyOnClose > {dom} @@ -87,27 +119,48 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan ); }} > - - 務必確保輸入的資料,與銀行帳戶資訊一致} - > + + {t('auth.bankModalWarning')}}> + + + - - -
    - +
    diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index 0b4d5ff..e657906 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -5,49 +5,50 @@ import { useState } from 'react'; import { Link } from 'react-router-dom'; import KycBankModal from './KycBankModal'; import { useAccountStore } from '@/store/useAccountStore'; +import { t } from 'i18next'; -interface IKycIdentityResultProps { } +interface IKycIdentityResultProps {} const KycIdentityResult: React.FunctionComponent = () => { const [OpenKycBankModal, setOpenKycBankModal] = useState(false); - const kycStatus = useAccountStore(state => state.kyc?.status); + const kycStatus = useAccountStore((state) => state.kyc?.status); const handleClick = () => { - if (kycStatus != 3) { - notification.error({ message: "You need to verify KYC first before you can add bank accounts", placement: "bottomRight" }); - return; - } - setOpenKycBankModal(true) - } + // if (kycStatus != 3) { + // notification.error({ message: "You need to verify KYC first before you can add bank accounts", placement: "bottomRight" }); + // return; + // } + setOpenKycBankModal(true); + }; return (
    } - title='驗證中' + title={t('layout.waitKycTitle')} subTitle={
    - 我們會盡快為您驗證,驗證完成後您將收到通知 + {t('layout.introduceWaitKyc1')}
    - 您可繼續驗證銀行資訊,以開通 - 出金功能 + {t('layout.introduceWaitKyc2')} + {t('layout.colorTextIntroduce')} {t('layout.introduceWaitKyc3')}
    } extra={[ - + , , ]} > - 等候驗證期間,不妨先存入資金! 前往 > + {t('layout.sendMoneyWhenWaitKYC')} {t('layout.goSendMoney')} >
    From 14d3af84e406b16a1d0e86683be3f76141c2aea3 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Tue, 22 Oct 2024 06:55:17 +0700 Subject: [PATCH 059/118] fix bug useVerification --- src/pages/property/Transfer.tsx | 35 +++++++++++++++++---- src/pages/property/Withdraw.tsx | 54 +++++++++++++++++++++++---------- src/pages/property/index.tsx | 4 ++- 3 files changed, 70 insertions(+), 23 deletions(-) diff --git a/src/pages/property/Transfer.tsx b/src/pages/property/Transfer.tsx index 0175c22..c32db0f 100644 --- a/src/pages/property/Transfer.tsx +++ b/src/pages/property/Transfer.tsx @@ -1,7 +1,7 @@ import { Button, Form, Input, Space } from 'antd'; import * as React from 'react'; import SelectAccount from '@/components/SelectAccount'; -import SafetyVerification from './components/SafetyVerification'; +import SafetyVerification, { useVerification } from './components/SafetyVerification'; import { useTranslation } from 'react-i18next'; interface ITransferProps { } @@ -11,7 +11,8 @@ const Transfer: React.FunctionComponent = (props) => { const { t } = useTranslation(); const [openTransfer, setOpenTransfer] = React.useState(false); - const [currentStep, setCurrentStep] = React.useState('confirm-order'); + const { data, setCurrentStep, setData } = useVerification(); + const [form] = Form.useForm(); const onReset = () => { @@ -26,7 +27,29 @@ const Transfer: React.FunctionComponent = (props) => { const onFinish = (values: any) => { console.log('Form values:', values); // Print all fields on submit }; - + const handleVerificationSubmit = () => { + switch (data.currentStep) { + case 'idle': + setData('confirm-order', form.getFieldsValue()) + setCurrentStep('confirm-order'); + break; + case 'confirm-order': + setCurrentStep('email'); + break; + case 'email': + setCurrentStep('verify-email-code'); + break; + case 'verify-email-code': + setCurrentStep('pending-order'); + break; + case 'pending-order': + setCurrentStep('completed-order'); + break; + default: + setCurrentStep('idle'); + break; + } + }; return (
    = (props) => { open={openTransfer} onCancel={() => { setOpenTransfer(false); - setCurrentStep('confirm-transfer-order'); + setCurrentStep('idle'); }} - currentStep={currentStep} - setCurrentStep={setCurrentStep} + currentStep={data.currentStep} + handleVerificationSubmit={handleVerificationSubmit} />
    ); diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 686bf73..21c0f6e 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -1,4 +1,4 @@ -import { Button, Form, Input, Space, Tooltip, Typography } from 'antd'; +import { Button, Form, Input, InputNumber, Space, Tooltip, Typography } from 'antd'; import * as React from 'react'; import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; import SafetyVerification, { useVerification, VerificationProvider } from './components/SafetyVerification'; @@ -51,11 +51,9 @@ const Withdraw: React.FunctionComponent = (props) => { }; - const UpdatePrice = (e: any) => { - console.log(e.target.value); - let value = e.target.value; - form.setFieldValue("withdrawAmount", value); - form.setFieldValue("receiveAmount", value); + const UpdatePrice = (values: any) => { + form.setFieldValue("withdrawAmount", values); + form.setFieldValue("receiveAmount", values); } const handleVerificationSubmit = () => { switch (data.currentStep) { @@ -118,26 +116,50 @@ const Withdraw: React.FunctionComponent = (props) => { - - + - form.setFieldValue("Channel", value)} value={form.getFieldValue("Channel")} /> + + form.setFieldValue('Channel', value)} + value={form.getFieldValue('Channel')} + /> } + value={form.getFieldValue("withdrawAmount")} onChange={UpdatePrice} - placeholder={t('account.輸入')} + placeholder="Enter amount" + style={{ width: '100%' }} + // Only allows numbers with commas and dots for thousands and decimals + formatter={(value) => + `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',') + } + parser={(value) => value!.replace(/\$\s?|(,*)/g, '')} // Parses the value back without commas + precision={3} // Limit precision to 3 decimal places />
    - - + `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} + parser={(value) => value!.replace(/\$\s?|(,*)/g, '')} + precision={3} />
    diff --git a/src/pages/property/index.tsx b/src/pages/property/index.tsx index 7cd1544..3e14e92 100644 --- a/src/pages/property/index.tsx +++ b/src/pages/property/index.tsx @@ -49,7 +49,9 @@ const Property = () => { tab={t('assets.轉帳')} key='轉帳' > - + + + Date: Tue, 22 Oct 2024 16:46:22 +0700 Subject: [PATCH 060/118] withdraw email verification --- src/pages/property/Withdraw.tsx | 2 + .../property/components/DepositUsdtTrc20.tsx | 1 + .../components/SafetyVerification.tsx | 350 +++++++++++++----- src/pages/property/components/UseLoading.tsx | 85 ++++- src/services/walletApi.ts | 12 + src/store/hubs/types.ts | 6 + src/store/hubs/useClientHubStore.ts | 46 ++- 7 files changed, 398 insertions(+), 104 deletions(-) diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 21c0f6e..748203f 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -47,6 +47,7 @@ const Withdraw: React.FunctionComponent = (props) => { } }, [banks]) const handleNextStep = () => { + setCurrentStep("idle"); setOpenSafetyVerification(true); }; @@ -65,6 +66,7 @@ const Withdraw: React.FunctionComponent = (props) => { setCurrentStep('email'); break; case 'email': + setData('verify-email-code', { orderId: data['email']['orderId'] }) setCurrentStep('verify-email-code'); break; case 'verify-email-code': diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index 337caf4..4ed6d64 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -13,6 +13,7 @@ import { Typography, Spin, message, + notification, } from 'antd'; import * as React from 'react'; import K100U_logo from '../../../assets/k100u_logo.png'; diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index f58d2e1..c091872 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -1,9 +1,15 @@ import React, { createContext, useContext, useEffect, useState } from 'react'; -import { Button, Form, Input, Modal, Space, Typography } from 'antd'; +import { Button, Form, Input, message, Modal, Space, Spin, Typography } from 'antd'; import { useTranslation } from 'react-i18next'; import UseLoading from './UseLoading'; import TransferLoading from './TransferLoading'; import { useAccountStore } from '@/store/useAccountStore'; +import { useForm } from 'antd/es/form/Form'; +import { walletApi } from '@/services/walletApi'; +import { off } from 'process'; +import axios from 'axios'; +import { useClientHubStore } from '@/store/hubs/useClientHubStore'; +import { NotifyPendingWithdrawOrderDto } from '@/store/hubs/types'; const { Title, Text } = Typography; @@ -138,11 +144,83 @@ const SafetyVerification: React.FunctionComponent = ({ const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => { - const { data } = useVerification() + const { data, setData } = useVerification() const me = useAccountStore(state => state.me); + const connection = useClientHubStore(state => state.hubConnection) + + const [isConfirm, setIsConfirm] = useState(false); + const [orderId, setOrderId] = useState(null); useEffect(() => { - console.log(data[data.currentStep]) + if (connection != null) { + connection.on("NotifyPendingWithdraw", (message: NotifyPendingWithdrawOrderDto) => { + console.log("withdraw Order: ", message.order_Code) + setOrderId(message.order_Code); + }) + } + return () => { + if (connection != null) { + connection.off("NotifyPendingWithdraw") + } + } }, []) + + useEffect(() => { + console.log("hererererer") + console.log(isConfirm) + console.log(orderId) + + if (isConfirm && orderId) { + setData('email', { orderId }) + handleVerificationSubmit(); + } + }, [isConfirm, orderId]) + const handleConfirm = async () => { + try { + if (data.currentStep !== 'confirm-order') { + throw new Error(); + } + const bankId = data[data.currentStep]["bankId"] + const amount = data[data.currentStep]["withdrawAmount"] + if (bankId && amount) { + setIsConfirm(true); + const response = await walletApi.withdrawViaBank(amount, bankId) + + } + else + throw new Error(); + } + catch (e) { + setIsConfirm(false) + if (axios.isAxiosError(e)) { + message.error({ content: e.response?.data["title"] }) + } + else { + onCancel(); + } + } + } + if (isConfirm) { + return ( + + + + + + + ); + } + return ( = ({ open, onCancel, handleVerificationSu
    -
    @@ -246,49 +324,108 @@ const ConfirmTransferModal: React.FC = ({ open, onCancel, handleVerificatio
    ); -export const EmailModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( - - 安全驗證 - 為保證資金安全,請輸入寶泰會員的登入資訊 -
    +export const EmailModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => { + + const [form] = useForm(); + const { data, setData } = useVerification(); + + const [emailIsSent, setEmailIsSent] = useState(false); + const handleEmailVerification = async () => { + try { + if (data.currentStep !== 'email') { + throw new Error(); + } + console.log("This step", data) + const payload = { ...form.getFieldsValue(), orderId: data["email"]?.orderId } + const response = await walletApi.sendWithdrawVerificationEmail(payload) + setEmailIsSent(true); } - open={open} - destroyOnClose - width={480} - footer={null} - > - - - - - - { + if (emailIsSent) { + handleVerificationSubmit(); + } + }, [emailIsSent]) + + if (emailIsSent) { + return ( + + - - -
    - - + + + + + ); + } + return ( + + 安全驗證 + 為保證資金安全,請輸入寶泰會員的登入資訊
    - -
    - -); + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + + + + + + +
    + + +
    +
    +
    + + ); + + +} + + export const VerifyEmailCodeModal: React.FC = ({ open, @@ -300,56 +437,85 @@ export const VerifyEmailCodeModal: React.FC = ({ countdown, handleClick, t, -}) => ( - - {t('auth.驗證電子信箱')} - 已發送驗證碼至您的電子信箱 - +}) => { + const { data } = useVerification(); + const [form] = useForm(); + + const handleConfirmEmailVerification = async () => { + try { + if (data.currentStep !== 'verify-email-code') { + throw new Error(); + } + const payload = { code: form.getFieldValue('code'), orderId: data["email"]?.orderId } + const response = await walletApi.confirmWithdrawVerificationEmail(payload) + handleVerificationSubmit(); + } - open={open} - destroyOnClose - width={480} - footer={null} - > - -
    - - setVerificationCode(e.target.value)} - /> - - {verificationCode ? ( - - + catch (e) { + console.log(e) + if (axios.isAxiosError(e)) { + message.error({ content: e.response?.data["title"] }) + } + else { + onCancel(); + } + } + } + + + + return ( + + {t('auth.驗證電子信箱')} + 已發送驗證碼至您的電子信箱 + + } + open={open} + destroyOnClose + width={480} + footer={null} + > + + + + setVerificationCode(e.target.value)} + /> - ) : ( - - + + ) : ( + + + + )} +
    + {countdown} + - - )} -
    - {countdown} - -
    - - - -); +
    + +
    +
    + ) + +}; export default SafetyVerification; diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx index 894a11b..74a3181 100644 --- a/src/pages/property/components/UseLoading.tsx +++ b/src/pages/property/components/UseLoading.tsx @@ -4,15 +4,39 @@ import { LoadingOutlined, CopyOutlined, FileDoneOutlined } from '@ant-design/ico import copy from 'copy-to-clipboard'; import CsChat from '../../PublicLayout/CsChat'; import { useTranslation } from 'react-i18next'; +import { walletApi } from '@/services/walletApi'; +import { useVerification } from './SafetyVerification'; +import axios from 'axios'; -const UseLoading = ({ onCancel }) => { +interface WithdrawOrder { + orderId: number; + amount: number; + + bankName: string; + + bankAccountHolder: string; + bankAccountNumber: string; + branch: string; + + walletAddress?: string; // Optional property + + expiredAt: Date; + status: string; +} +interface IProps { + onCancel: () => void +} +const UseLoading: React.FC = ({ onCancel }) => { const [open, setOpen] = useState(true); const [OpenCsChat, setOpenCsChat] = useState(false); + const [loading, setLoading] = useState(true); + const [order, setOrder] = useState(null) const { t, i18n } = useTranslation(); - + const { data } = useVerification(); useEffect(() => { // 监听语言变化,更新按钮文本 + fetchWithdrawOrderDetail(); i18n.on('languageChanged', () => { // 强制更新组件,使按钮文本刷新 forceUpdate(); @@ -20,7 +44,38 @@ const UseLoading = ({ onCancel }) => { return () => { i18n.off('languageChanged'); }; + + }, []); + useEffect(() => { + if (order) { + console.log(order) + } + }, [order]) + const fetchWithdrawOrderDetail = async () => { + try { + if (data.currentStep !== 'pending-order') { + throw new Error(); + } + const orderId = data["email"]["orderId"] + if (orderId) { + const order = await walletApi.getWithdrawOrderDetail(orderId).then(res => res.data); + setOrder(order as WithdrawOrder); + setLoading(false); + } + else + throw new Error(); + } + catch (e) { + if (axios.isAxiosError(e)) { + message.error({ content: e.response?.data["title"] }) + } + else { + onCancel(); + } + } + + } const forceUpdate = () => { setOpen(false); @@ -34,6 +89,29 @@ const UseLoading = ({ onCancel }) => { message.success('已成功複製流水號'); }; + + if (loading) { + return ( + + + + + + + ); + } + return (
    { strong style={{ marginLeft: 8, cursor: 'pointer' }} onClick={() => copyToClipboard('1233242')} // 替換成實際的流水號 + copyable > 1233242 - + {/* */}
    diff --git a/src/services/walletApi.ts b/src/services/walletApi.ts index e2d30d8..5ba1c5c 100644 --- a/src/services/walletApi.ts +++ b/src/services/walletApi.ts @@ -7,6 +7,18 @@ export const walletApi = { depositViaCryptoWallet: async () => { return api.post("/v1.0/client/deposit/crypto") }, + withdrawViaBank: async (amount: number, bankAccountId: number) => { + return api.post("/v1.0/client/withdraw", { amount, bankAccountId }) + }, + sendWithdrawVerificationEmail: async (payload: any) => { + return api.post("/v1.0/client/withdraw/email-verification", payload) + }, + confirmWithdrawVerificationEmail: async (payload: any) => { + return api.post("/v1.0/client/withdraw/email-verification/confirm", payload) + }, + getWithdrawOrderDetail: async (orderId: number) => { + return api.get(`/v1.0/client/withdraw/${orderId}`); + }, confirmDepositOrder: async () => { return api.post("/v1.0/client/deposit/confirm"); } diff --git a/src/store/hubs/types.ts b/src/store/hubs/types.ts index 975c17c..7d96ad7 100644 --- a/src/store/hubs/types.ts +++ b/src/store/hubs/types.ts @@ -50,6 +50,12 @@ export interface NotifyCompletedDepositOrderDto { Complete_Date: string; // The date the transaction was committed UserId: string; } +export interface NotifyCompletedWithdrawOrderDto { + +} +export interface NotifyPendingWithdrawOrderDto { + order_Code: string; // Your System's unique transaction order number +} export interface NotifyMT4TransferDto extends NotifyMT4TransferToClientDto { OwnerUserId: string; OwnerName: string; diff --git a/src/store/hubs/useClientHubStore.ts b/src/store/hubs/useClientHubStore.ts index d658526..c5aadbf 100644 --- a/src/store/hubs/useClientHubStore.ts +++ b/src/store/hubs/useClientHubStore.ts @@ -2,18 +2,24 @@ import { create } from "zustand"; import * as signalR from "@microsoft/signalr"; import { NotifyCompletedDepositOrderDto, + NotifyCompletedWithdrawOrderDto, NotifyMT4TransferToClientDto, NotifyPendingDepositOrderDto, + NotifyPendingWithdrawOrderDto, } from "./types"; +import { notification } from "antd"; +import { useAccountStore } from "../useAccountStore"; -const url = "https://demoApi.rushprofit.uk/hubs/clientHub"; +const url = "http://demoApi.rushprofit.uk/hubs/clientHub"; interface ClientHubState { shouldInitConnection: boolean; hubConnection: signalR.HubConnection | null; mt4TransferMessage: NotifyMT4TransferToClientDto | null; pendingDepositMessage: NotifyPendingDepositOrderDto | null; - completedOrderMessage: NotifyCompletedDepositOrderDto | null; + completedDepositMessage: NotifyCompletedDepositOrderDto | null; + pendingWithdrawMessage: NotifyPendingWithdrawOrderDto | null; + completedWithdrawMessage: NotifyCompletedWithdrawOrderDto | null; connectHub: () => void; disconnectHub: () => void; } @@ -23,8 +29,9 @@ export const useClientHubStore = create((set, get) => ({ hubConnection: null, mt4TransferMessage: null, pendingDepositMessage: null, - completedOrderMessage: null, - + completedDepositMessage: null, + pendingWithdrawMessage: null, + completedWithdrawMessage: null, connectHub: () => { const { shouldInitConnection } = get(); @@ -49,7 +56,6 @@ export const useClientHubStore = create((set, get) => ({ connection.on("NotifyMT4Transfer", (message: NotifyMT4TransferToClientDto) => { console.log("NotifyMT4Transfer: ", message); - set((state) => ({ ...state, // Retain other state properties mt4TransferMessage: message, @@ -58,18 +64,40 @@ export const useClientHubStore = create((set, get) => ({ connection.on("NotifyPendingDeposit", (message: NotifyPendingDepositOrderDto) => { console.log("NotifyPendingDeposit: ", message); - set((state) => ({ ...state, // Retain other state properties pendingDepositMessage: message, })); }); - connection.on("NotifyCompletedOrder", (message: NotifyCompletedDepositOrderDto) => { - console.log("NotifyCompletedOrder: ", message); + connection.on("NotifyCompletedDeposit", (message: NotifyCompletedDepositOrderDto) => { + console.log("NotifyCompletedDeposit: ", message); + notification.info({ message: `Transaction completed (+$${message.Amount})`, description: `Order ${message.Order_Number} has completed, please check your balance`, duration: 60, showProgress: true, placement: 'bottomRight' }) + const fetchMe = useAccountStore.getState().fetchMe; // Access store2 setter + //Update account + fetchMe(); + set((state) => ({ + ...state, // Retain other state properties + completedDepositMessage: message, + })); + }); + connection.on("NotifyPendingWithdraw", (message: NotifyPendingWithdrawOrderDto) => { + console.log("NotifyPendingWithdraw: ", message); + set((state) => ({ + ...state, // Retain other state properties + pendingWithdrawMessage: message, + })); + }); + + connection.on("NotifyCompletedWithdraw", (message: NotifyCompletedWithdrawOrderDto) => { + console.log("NotifyCompletedWithdraw: ", message); + // notification.info({ message: `Transaction completed (+$${message})`, description: `Order ${message.Order_Code} has completed, please check your balance`, duration: 60, showProgress: true, placement: 'bottomRight' }) + // const fetchMe = useAccountStore.getState().fetchMe; // Access store2 setter + // //Update account + // fetchMe(); set((state) => ({ ...state, // Retain other state properties - completedOrderMessage: message, + completedWithdrawMessage: message, })); }); From 945bad483517fc4a72092fbf4a4e40dff01bb137 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 22 Oct 2024 17:16:31 +0700 Subject: [PATCH 061/118] deposit function, validation signUp --- src/I18n/ch/components/auth.ts | 2 +- src/I18n/en/components/auth.ts | 2 +- src/I18n/vi/components/auth.ts | 4 +- src/pages/login/RegisterPage.tsx | 13 +- src/pages/property/Deposit.tsx | 205 +++++++++++++----- .../property/components/DepositUsdtTrc20.tsx | 26 +-- src/pages/user/components/KycBankModal.tsx | 45 ++-- .../user/components/KycIdentityResult.tsx | 13 +- 8 files changed, 201 insertions(+), 109 deletions(-) diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index e62cc42..aea9f95 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -35,7 +35,7 @@ const auth = { validaitionPasswordRegister2: '密碼必須至少八個字符', validaitionPasswordRegister3: '密碼必須包含至少一個小寫字母 (a-z)', validaitionPasswordRegister4: '密碼必須包含至少一個大寫字母 (A-Z)', - validationPasswordRegister5: '密碼必須包含至少一個數字', + validaitionPasswordRegister5: '密碼必須包含至少一個數字', validiationConfirmPasswordRegister: '請確認密碼', checkSamePasswordRegister: '兩次輸入的密碼不一致', sentEmailAndCheckRegister: '電子郵件已發送。請確認電子郵件', diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index ef4c429..da3b0d8 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -34,7 +34,7 @@ const auth = { validaitionPasswordRegister2: 'Password must be at least eight characters', validaitionPasswordRegister3: 'Password must contain at least one lowercase letter (a-z)', validaitionPasswordRegister4: 'Password must contain at least one uppercase letter (A-Z)', - validationPasswordRegister5: 'Password must contain at least one number', + validaitionPasswordRegister5: 'Password must contain at least one number', validiationConfirmPasswordRegister: 'Please confirm your password', checkSamePasswordRegister: 'The two passwords entered do not match', sentEmailAndCheckRegister: 'Email sent. Please check your email', diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts index ccb123a..75185c8 100644 --- a/src/I18n/vi/components/auth.ts +++ b/src/I18n/vi/components/auth.ts @@ -34,8 +34,8 @@ const auth = { validaitionPasswordRegister2: 'Mật khẩu phải có ít nhất tám ký tự', validaitionPasswordRegister3: 'Mật khẩu phải chứa ít nhất một chữ cái viết thường (a-z)', validaitionPasswordRegister4: 'Mật khẩu phải chứa ít nhất một chữ cái viết hoa (A-Z)', - validationPasswordRegister5: 'Mật khẩu phải chứa ít nhất một số', - validiationConfirmPasswordRegister: 'Vui lòng xác nhận mật khẩu', + validaitionPasswordRegister5: 'Mật khẩu phải chứa ít nhất một số', + validationConfirmPasswordRegister: 'Vui lòng xác nhận mật khẩu', checkSamePasswordRegister: 'Hai lần nhập mật khẩu không khớp', sentEmailAndCheckRegister: 'Email đã được gửi. Vui lòng kiểm tra email', unknowErrorRegister: 'Đã xảy ra lỗi không xác định.', diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index c9ad234..a7ecf6c 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -54,16 +54,17 @@ const RegisterPage: React.FC = () => { const validationSchemaSetPassword = Yup.object().shape({ password: Yup.string() .required(t('auth.validaitionPasswordRegister1')) - .min(8, t('auth.validaitionPasswordRegister2')) - .test('has-lowercase', t('auth.validaitionPasswordRegister3'), (value) => { - return /[a-z]/.test(value || ''); - }) .test('has-uppercase', t('auth.validaitionPasswordRegister4'), (value) => { return /[A-Z]/.test(value || ''); }) - .test('has-number', t('validationasswordRegister5'), (value) => { + .test('has-lowercase', t('auth.validaitionPasswordRegister3'), (value) => { + return /[a-z]/.test(value || ''); + }) + .test('has-number', t('auth.validaitionPasswordRegister5'), (value) => { return /\d/.test(value || ''); - }), + }) + .min(8, t('auth.validaitionPasswordRegister2')), + // .test('all-required', '密碼必須至少八個字元,並包含一個大寫字母、一個小寫字母和一個數字', function (value) { // const { createError } = this; // if (!value) { diff --git a/src/pages/property/Deposit.tsx b/src/pages/property/Deposit.tsx index 4d67973..d8ab988 100644 --- a/src/pages/property/Deposit.tsx +++ b/src/pages/property/Deposit.tsx @@ -10,7 +10,7 @@ import PayChannel from './components/PayChannel'; import { api } from '@/services/configServ'; import { AxiosError } from 'axios'; // Import AxiosError nếu bạn dùng Axios -interface IDepositProps { } +interface IDepositProps {} const Deposit: React.FunctionComponent = (props) => { const { t } = useTranslation(); @@ -25,24 +25,114 @@ const Deposit: React.FunctionComponent = (props) => { React.useEffect(() => { form.setFieldValue('depositAccount', 'Baotai'); form.setFieldValue('channel', 105); - }, []) + }, []); const orders = useClientHubStore((state) => state.pendingDepositMessage); - const checkVerify = async () => { + // const checkVerify = async () => { + // try { + // const response = await api.get('/v1.0/kyc/my'); + // if (response.status === 200) { + // const { status } = response.data; + // const checkMoney = form.getFieldValue('amount'); // Lấy giá trị số từ InputNumber + + // if (checkMoney <= 2000) { + // setOpenDepositUsdtTrc20(true); + // return; + // } + + // if ([1, 2, 4, 5].includes(status)) { + // setOpenDepositUsdtTrc20(false); + + // if (status === 1) { + // message.warning('您的身份尚未驗證。只能存入少於2,000美元'); + // } else if (status === 2) { + // message.warning('您的身份正在驗證中。只能存入少於2,000美元'); + // } else if (status === 4) { + // message.warning('您的身份正在驗證中。只能存入少於2,000美元'); + // } else if (status === 5) { + // message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); + // } + + // return; + // } + + // if (status === 3) { + // setOpenDepositUsdtTrc20(true); + // } + // } + // } catch (error) { + // const axiosError = error as AxiosError; + + // if (axiosError.response) { + // // Ép kiểu cho axiosError.response.data để có thể truy cập thuộc tính message + // const responseData = axiosError.response.data as { message: string }; + + // console.log(`Error: ${axiosError.response.status} - ${responseData.message}`); + // } else if (axiosError.request) { + // console.log('Error: No response received from the server'); + // } else { + // console.log('Error:', axiosError.message); + // } + // console.log(error); + // } + // }; + + // const depositAsync = async (values: any) => { + // if (values.depositAccount === 'Baotai') { + // const { channel, amount } = values; + + // try { + // const response = await api.post("/v1.0/client/deposit/crypto", { channel, amount }) + // if (response.status == 200 || response.status == 204) { + // message.success("Order succesfully created"); + // return; + // } + // } + // catch (e) { + // message.success("Error occured while creating the order"); + // return; + // } + // } + // //MT4 + // else { + + // console.log(values) + // return; + // } + // } + + const handleDeposit = async (values: any) => { try { + // Check verification status before processing the deposit const response = await api.get('/v1.0/kyc/my'); if (response.status === 200) { const { status } = response.data; - const checkMoney = form.getFieldValue('amount'); // Lấy giá trị số từ InputNumber + const checkMoney = values.amount; // Lấy giá trị số từ form values + // Check if the amount is less than or equal to 2000 if (checkMoney <= 2000) { setOpenDepositUsdtTrc20(true); + + // After meeting the condition, call the depositAsync API + if (values.depositAccount === 'Baotai') { + const { channel, amount } = values; + try { + const depositResponse = await api.post('/v1.0/client/deposit/crypto', { channel, amount }); + if (depositResponse.status === 200 || depositResponse.status === 204) { + message.success('Order successfully created'); + } + } catch (depositError) { + message.error('Error occurred while creating the order'); + } + } else { + console.log(values); + } return; } + // Check verification status if the amount > 2000 if ([1, 2, 4, 5].includes(status)) { setOpenDepositUsdtTrc20(false); - if (status === 1) { message.warning('您的身份尚未驗證。只能存入少於2,000美元'); } else if (status === 2) { @@ -52,21 +142,32 @@ const Deposit: React.FunctionComponent = (props) => { } else if (status === 5) { message.warning('您的身份需要重新驗證。只能存入少於2,000美元'); } - return; } + // If verification is successful, allow the deposit to continue with amounts greater than 2000 if (status === 3) { setOpenDepositUsdtTrc20(true); + if (values.depositAccount === 'Baotai') { + const { channel, amount } = values; + try { + const depositResponse = await api.post('/v1.0/client/deposit/crypto', { channel, amount }); + if (depositResponse.status === 200 || depositResponse.status === 204) { + message.success('Order successfully created'); + } + } catch (depositError) { + message.error('Error occurred while creating the order'); + } + } else { + console.log(values); + } + return; } } } catch (error) { const axiosError = error as AxiosError; - if (axiosError.response) { - // Ép kiểu cho axiosError.response.data để có thể truy cập thuộc tính message const responseData = axiosError.response.data as { message: string }; - console.log(`Error: ${axiosError.response.status} - ${responseData.message}`); } else if (axiosError.request) { console.log('Error: No response received from the server'); @@ -76,88 +177,86 @@ const Deposit: React.FunctionComponent = (props) => { console.log(error); } }; - const depositAsync = async (values: any) => { - if (values.depositAccount === 'Baotai') { - const { channel, amount } = values; - - - - try { - const response = await api.post("/v1.0/client/deposit/crypto", { channel, amount }) - if (response.status == 200 || response.status == 204) { - message.success("Order succesfully created"); - return; - } - } - catch (e) { - message.success("Error occured while creating the order"); - return; - } - } - //MT4 - else { - - console.log(values) - return; - } - } return (
    { - await checkVerify(); - await depositAsync(values); + // await checkVerify(); + await handleDeposit(values); }} > - + form.setFieldsValue({ channel: value })} // Handling onChange to update the form state + value={form.getFieldValue('channel')} // Passing value to channel + onChange={(value) => form.setFieldsValue({ channel: value })} // Handling onChange to update the form state /> {/* Pass value and onChange props to SelectAccount */} - + form.setFieldsValue({ depositAccount: value })} // Passing onChange handler to update the form + value={form.getFieldValue('depositAccount')} // Passing value to SelectAccount + onChange={(value) => form.setFieldsValue({ depositAccount: value })} // Passing onChange handler to update the form /> - {t('assets.超過限額')} - - + */} +

    ), }, ]} > - +
    - - setOpenDepositUsdtTrc20(false)} /> + setOpenDepositUsdtTrc20(false)} + />
    ); }; diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index 337caf4..d1c133b 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -32,25 +32,23 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope const [form] = Form.useForm(); // Create form instance const { hubConnection } = useClientHubStore(); const [loading, setLoading] = React.useState(false); // Loading state - const [depositInfo, setDepositInfo] = React.useState() - + const [depositInfo, setDepositInfo] = React.useState(); const handleCancel = () => { - setDepositInfo(undefined); onCancel(); - } + }; React.useEffect(() => { if (hubConnection != null) { - hubConnection.on("NotifyPendingDeposit", (message: NotifyPendingDepositOrderDto) => { - console.log(message) - setDepositInfo(message) + hubConnection.on('NotifyPendingDeposit', (message: NotifyPendingDepositOrderDto) => { + console.log(message); + setDepositInfo(message); }); } return () => { - hubConnection?.off("NotifyPendingDeposit"); + hubConnection?.off('NotifyPendingDeposit'); }; - }) + }); // Handle payment completion const handlePaymentCompletion = async () => { try { @@ -72,17 +70,16 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope } }; - const items: CollapseProps['items'] = [ { key: '1', label: `${t('assets.thingsToNoteTitle')}`, children: (
      -
    • 請於時限內完成付款
    • -
    • 轉帳後請保留轉帳明細截圖
    • -
    • 轉帳完成後請務必點擊我已完成付款
    • -
    • 每筆交易均需酌收手續費用請詢問您的錢包平台商
    • +
    • {t('assets.thingsToNote1')}
    • +
    • {t('assets.thingsToNote2')}
    • +
    • {t('assets.thingsToNote3')}
    • +
    • {t('assets.thingsToNote4')}
    ), }, @@ -119,7 +116,6 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope style={{ width: '100%', height: '700px', display: 'flex', justifyContent: 'center', alignItems: 'center' }} > -
    ); diff --git a/src/pages/user/components/KycBankModal.tsx b/src/pages/user/components/KycBankModal.tsx index 0dd6e65..0923df0 100644 --- a/src/pages/user/components/KycBankModal.tsx +++ b/src/pages/user/components/KycBankModal.tsx @@ -1,5 +1,5 @@ import { ProForm, ProFormText, StepsForm } from '@ant-design/pro-components'; -import { Button, Modal, Typography, message, Spin } from 'antd'; +import { Button, Modal, Typography, message, Spin, Form } from 'antd'; import * as React from 'react'; import KycResult from './KycBankResult'; import { useState, useEffect } from 'react'; @@ -37,22 +37,20 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan } }, [name]); - const [form] = useForm(); - - if (loading) { - // Show a loading spinner if `name` is not yet initialized - return ( - - } - tip='Loading...' - /> - ); - } + // if (loading) { + // // Show a loading spinner if `name` is not yet initialized + // return ( + // + // } + // tip='Loading...' + // /> + // ); + // } const handleSubmitBank = async (values: any) => { await waitTime(1000); try { @@ -90,6 +88,7 @@ const KycBankModal: React.FunctionComponent = ({ open, onCan stepsFormRender={(dom, submitter) => { return ( = ({ open, onCan > {t('auth.bankModalTitle')} + {/* 銀行驗證 */} } - open={open} - footer={[ - , - ]} + footer={submitter} destroyOnClose > {dom} diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index e657906..3046cd4 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -14,11 +14,16 @@ const KycIdentityResult: React.FunctionComponent = () = const kycStatus = useAccountStore((state) => state.kyc?.status); const handleClick = () => { - // if (kycStatus != 3) { - // notification.error({ message: "You need to verify KYC first before you can add bank accounts", placement: "bottomRight" }); - // return; - // } + if (kycStatus != 3) { + notification.error({ + message: 'You need to verify KYC first before you can add bank accounts', + placement: 'bottomRight', + }); + return; + } + console.log('ok'); setOpenKycBankModal(true); + console.log(OpenKycBankModal); }; return (
    From 5784aa3a61524e03608d05a794d27a47816df0c4 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Tue, 22 Oct 2024 17:21:55 +0700 Subject: [PATCH 062/118] Countdown --- .../property/components/DepositUsdtTrc20.tsx | 2 +- src/pages/property/components/UseLoading.tsx | 80 +++++++++++-------- 2 files changed, 46 insertions(+), 36 deletions(-) diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index 4ed6d64..63740bf 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -253,7 +253,7 @@ interface CountdownProps { expirationTime: string; // Expecting a date string } -const Countdown: React.FC = ({ expirationTime }) => { +export const Countdown: React.FC = ({ expirationTime }) => { const [timeLeft, setTimeLeft] = React.useState(0); React.useEffect(() => { diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx index 74a3181..c8a7d2d 100644 --- a/src/pages/property/components/UseLoading.tsx +++ b/src/pages/property/components/UseLoading.tsx @@ -7,6 +7,7 @@ import { useTranslation } from 'react-i18next'; import { walletApi } from '@/services/walletApi'; import { useVerification } from './SafetyVerification'; import axios from 'axios'; +import { Countdown } from './DepositUsdtTrc20'; interface WithdrawOrder { orderId: number; @@ -20,7 +21,7 @@ interface WithdrawOrder { walletAddress?: string; // Optional property - expiredAt: Date; + expiredAt: string; status: string; } interface IProps { @@ -84,11 +85,6 @@ const UseLoading: React.FC = ({ onCancel }) => { - const copyToClipboard = (text: any) => { - copy(text); - message.success('已成功複製流水號'); - }; - if (loading) { return ( @@ -130,11 +126,10 @@ const UseLoading: React.FC = ({ onCancel }) => { copyToClipboard('1233242')} // 替換成實際的流水號 copyable > - 1233242 - {/* */} + + {order?.orderId}
    @@ -151,42 +146,57 @@ const UseLoading: React.FC = ({ onCancel }) => { size='large' indicator={} /> - + {/* */} 預計到帳時間 - 30分鐘 + + { + order && + + } + -
    - {t('assets.提取為')}: - gmail -
    -
    - {t('assets.提取至')} -
    123
    -
    -
    - 錢包地址: - gmail -
    -
    - 銀行戶名: - gmail -
    - 銀行帳號: - gmail + {t('assets.提取為')}: + USD
    -
    - 銀行名稱: - gmail +
    + Amount: + {order?.amount}
    -
    - 開戶行: - gmail +
    +
    + { + order?.walletAddress ? +
    + Bag address: + {order?.walletAddress} +
    : + <> +
    + Bank Name: + {order?.bankName} +
    +
    + Bank Account Holder: + {order?.bankAccountHolder} +
    +
    + Bank Account Number: + {order?.bankAccountNumber} +
    +
    + Branch: + {order?.branch} +
    + + } + + , + , + ]} + > +

    Are you sure you want to delete this bank account?

    + ); }; -export default EditBank; +export default DeleteBank; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index dee61d7..6bcf0f1 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,56 +1,29 @@ -import { - CheckOutlined, - UserOutlined -} from '@ant-design/icons'; -import { - ProCard -} from '@ant-design/pro-components'; -import { - Descriptions, - Button, - Collapse, - Space, - Tag, - Divider, - DescriptionsProps -} from 'antd'; -import React, { - useState, - useEffect -} from 'react'; +import { CheckOutlined, UserOutlined } from '@ant-design/icons'; +import { ProCard } from '@ant-design/pro-components'; +import { Descriptions, Button, Collapse, Space, Tag, Divider, DescriptionsProps } from 'antd'; +import React, { useState, useEffect } from 'react'; import logo from '../../assets/PTFintech_logo.png'; import KYCIdentityModal from './components/KycIdentityModal'; import EditBank from '@/pages/user/components/EditBank'; -// import { useSelector } from 'react-redux'; -// import { authAPI } from '@/services/clientServ'; // Đảm bảo đường dẫn đúng -// import { RootState } from '@/redux/configStore'; import UpdateCountryForm from './components/UpdateCountry'; -import { - useTranslation -} from 'react-i18next'; -import { - useSelector -} from 'react-redux'; -import { - RootState -} from '@/redux/configStore'; -import { - api -} from '@/services/configServ'; +import { useTranslation } from 'react-i18next'; import { kycAPI } from '@/services/kycAPI'; import { bankAPI } from '@/services/bankAPI'; +import DeleteBank from './components/ChangeBank'; +import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; const User: React.FC = () => { const [openUpdateCountryForm, setOpenUpdateCountryForm] = useState(false); const [openKYCIdentityModal, setOpenKYCIdentityModal] = useState(false); - const [openBank, setOpenBank] = useState(false); + const [openBankEdit, setOpenBankEdit] = useState(false); + const [openDeleteBank, setOpenDeleteBank] = useState(false); const [userInfo, setUserInfo] = useState([]); const [personalInfoChina, setPersonalInfoChina] = useState([]); - const [bankInfoChina, setBankInfoChina] = useState([]); + const [bankInfoChina, setBankInfoChina] = useState([]); + const [selectedBankId, setSelectedBankId] = useState(null); // store selected bank ID const [kycStatus, setKycStatus] = useState(1); const { t } = useTranslation(); - const token = useSelector((state: RootState) => state.admin.user?.token); - + const [api] = useAxiosInterceptor(); const fetchUserData = async () => { try { const response = await api.get('/v1.0/client/me'); @@ -63,7 +36,11 @@ const User: React.FC = () => { { key: '國家撥號代碼', label: '國家撥號代碼', children: data.countryCallingCode || '未提供' }, { key: '平台名稱', label: '平台名稱', children: data.platformName || '未提供' }, { key: '我的邀請碼', label: '我的邀請碼', children: data.myInvitationCode || '未提供' }, - { key: 'invitationCode', label: '', children: } + { + key: 'invitationCode', + label: '', + children: , + }, ]); } catch (error) { console.error('Error fetching user data:', error); @@ -76,32 +53,52 @@ const User: React.FC = () => { const data = response.data; setKycStatus(data.status || 1); setPersonalInfoChina([ - { key: '姓名', label: '姓名', children: data.details.find(detail => detail.fieldName === 'FullName')?.fieldValue || '未提供' }, - { key: '出生日期', label: '出生日期', children: data.details.find(detail => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供' }, - { key: '第一證件號碼', label: '第一證件號碼', children: data.details.find(detail => detail.fieldName === 'IDNumber')?.fieldValue || '未提供' }, - { key: '第二證件號碼', label: '第二證件號碼', children: data.details.find(detail => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供' }, - { key: '證件地址', label: '證件地址', children: data.details.find(detail => detail.fieldName === 'IDAddress')?.fieldValue || '未提供' }, - { key: '居住地址', label: '居住地址', children: data.details.find(detail => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供' } + { + key: '姓名', + label: '姓名', + children: data.details.find((detail) => detail.fieldName === 'FullName')?.fieldValue || '未提供', + }, + { + key: '出生日期', + label: '出生日期', + children: data.details.find((detail) => detail.fieldName === 'DateOfBirth')?.fieldValue || '未提供', + }, + { + key: '第一證件號碼', + label: '第一證件號碼', + children: data.details.find((detail) => detail.fieldName === 'IDNumber')?.fieldValue || '未提供', + }, + { + key: '第二證件號碼', + label: '第二證件號碼', + children: data.details.find((detail) => detail.fieldName === 'SecondaryIDNumber')?.fieldValue || '未提供', + }, + { + key: '證件地址', + label: '證件地址', + children: data.details.find((detail) => detail.fieldName === 'IDAddress')?.fieldValue || '未提供', + }, + { + key: '居住地址', + label: '居住地址', + children: data.details.find((detail) => detail.fieldName === 'ResidentialAddress')?.fieldValue || '未提供', + }, ]); } catch (error) { console.error('Error fetching KYC data:', error); } }; + const fetchBankData = async () => { try { const response = await bankAPI.myBankAccount(); const data = response.data; - setBankInfoChina( - data.map((bank) => ([ - { key: '銀行戶名', label: '銀行戶名', children: bank.accountHolder || '未提供' }, - { key: '銀行帳號', label: '銀行帳號', children: bank.accountNumber || '未提供' }, - { key: '銀行名稱', label: '銀行名稱', children: bank.bankName || '未提供' } - ])) - ); + setBankInfoChina(data); // store bank data with id } catch (error) { console.error('Error fetching Bank data:', error); } - } + }; + useEffect(() => { fetchUserData(); fetchKYCData(); @@ -125,18 +122,22 @@ const User: React.FC = () => { }; const kycStatusTag = ( - }> + } + > {t( - `assets.${kycStatus === 1 - ? '未驗證' - : kycStatus === 2 - ? '驗證中' - : kycStatus === 3 - ? '已通過' - : kycStatus === 4 - ? '已拒絕' - : '需要重新上傳' - }` + `assets.${ + kycStatus === 1 + ? '未驗證' + : kycStatus === 2 + ? '驗證中' + : kycStatus === 3 + ? '已通過' + : kycStatus === 4 + ? '已拒絕' + : '需要重新上傳' + }`, )} ); @@ -152,46 +153,107 @@ const User: React.FC = () => { ), children: ( <> - + - { - - bankInfoChina.map(bankFields => { - return ( - ({ - key: bank.key, - label: bank.label, - children: bank.children - }))} - extra={} - /> - ) - }) - } - + {bankInfoChina.map((bank) => ( + + + + + } + /> + ))} ), extra: (kycStatus === 1 || kycStatus === 5) && ( - - ) - } + ), + }, ]; return (
    -
    用戶名稱
    } headerBordered bodyStyle={{ position: 'relative' }}> - - logo + + +
    用戶名稱
    + + } + headerBordered + bodyStyle={{ position: 'relative' }} + > + + logo
    - - setOpenKYCIdentityModal(false)} onFinish={() => { setKycStatus(2); setOpenKYCIdentityModal(false); }} /> - setOpenBank(false)} /> - setOpenUpdateCountryForm(false)} /> + + setOpenKYCIdentityModal(false)} + onFinish={() => { + setKycStatus(2); + setOpenKYCIdentityModal(false); + }} + /> + setOpenBankEdit(false)} + /> + setOpenDeleteBank(false)} + bankId={selectedBankId} + /> + + setOpenUpdateCountryForm(false)} + />
    ); }; diff --git a/src/services/configServ.ts b/src/services/configServ.ts index fbc802b..0e8e6e3 100644 --- a/src/services/configServ.ts +++ b/src/services/configServ.ts @@ -29,47 +29,47 @@ export const api = axios.create({ }, }); -export const setupInterceptor = (navigate: NavigateFunction) => { - api.interceptors.request.use( - (config) => { - const setProgress = useProgressStore.getState().setProgress; - setProgress(70); // Set progress to 10% on request start - const token = localStorage.getItem('token'); - if (token) { - config.headers['Authorization'] = `Bearer ${token}`; - } - return config; - }, - (error) => { - return Promise.reject(error); - }, - ); - api.interceptors.response.use( - (response) => { - const setProgress = useProgressStore.getState().setProgress; - setProgress(100); // Set progress to 100% when request completes - setTimeout(() => { - const resetProgress = useProgressStore.getState().resetProgress; - resetProgress(); // Reset progress after completion - }, 1000); // Optional delay for smooth UX - return response; - }, - async (error) => { - const resetProgress = useProgressStore.getState().resetProgress; - if (error.response && error.response.status === 401) { - // Example: Logout user if token is invalid or expired - // store.dispatch(logout()); - resetProgress() - localStorage.removeItem('token') - navigate('/auth/loginPage') +// export const setupInterceptor = (navigate: NavigateFunction) => { +// api.interceptors.request.use( +// (config) => { +// const setProgress = useProgressStore.getState().setProgress; +// setProgress(70); // Set progress to 10% on request start +// const token = localStorage.getItem('token'); +// if (token) { +// config.headers['Authorization'] = `Bearer ${token}`; +// } +// return config; +// }, +// (error) => { +// return Promise.reject(error); +// }, +// ); +// api.interceptors.response.use( +// (response) => { +// const setProgress = useProgressStore.getState().setProgress; +// setProgress(100); // Set progress to 100% when request completes +// setTimeout(() => { +// const resetProgress = useProgressStore.getState().resetProgress; +// resetProgress(); // Reset progress after completion +// }, 1000); // Optional delay for smooth UX +// return response; +// }, +// async (error) => { +// const resetProgress = useProgressStore.getState().resetProgress; +// if (error.response && error.response.status === 401) { +// // Example: Logout user if token is invalid or expired +// // store.dispatch(logout()); +// resetProgress() +// localStorage.removeItem('token') +// navigate('/auth/loginPage') - message.error("Session expired") +// message.error("Session expired") - } - return Promise.reject(error); - }, - ); -}; +// } +// return Promise.reject(error); +// }, +// ); +// }; https.interceptors.request.use((config) => { const auth = getLocalStore<{ token: string }>('user_infor'); diff --git a/src/services/walletApi.ts b/src/services/walletApi.ts index 5ba1c5c..9bf3075 100644 --- a/src/services/walletApi.ts +++ b/src/services/walletApi.ts @@ -1,26 +1,25 @@ -import { api } from "./configServ" +import { api } from './configServ'; export const walletApi = { - depositViaBank: async () => { - return api.post("/v1.0/client/deposit/bank") - }, - depositViaCryptoWallet: async () => { - return api.post("/v1.0/client/deposit/crypto") - }, - withdrawViaBank: async (amount: number, bankAccountId: number) => { - return api.post("/v1.0/client/withdraw", { amount, bankAccountId }) - }, - sendWithdrawVerificationEmail: async (payload: any) => { - return api.post("/v1.0/client/withdraw/email-verification", payload) - }, - confirmWithdrawVerificationEmail: async (payload: any) => { - return api.post("/v1.0/client/withdraw/email-verification/confirm", payload) - }, - getWithdrawOrderDetail: async (orderId: number) => { - return api.get(`/v1.0/client/withdraw/${orderId}`); - }, - confirmDepositOrder: async () => { - return api.post("/v1.0/client/deposit/confirm"); - } - -} \ No newline at end of file + depositViaBank: async () => { + return api.post('/v1.0/client/deposit/bank'); + }, + depositViaCryptoWallet: async () => { + return api.post('/v1.0/client/deposit/crypto'); + }, + withdrawViaBank: async (amount: number, bankAccountId: number) => { + return api.post('/v1.0/client/withdraw', { amount, bankAccountId }); + }, + sendWithdrawVerificationEmail: async (payload: any) => { + return api.post('/v1.0/client/withdraw/email-verification', payload); + }, + confirmWithdrawVerificationEmail: async (payload: any) => { + return api.post('/v1.0/client/withdraw/email-verification/confirm', payload); + }, + getWithdrawOrderDetail: async (orderId: number) => { + return api.get(`/v1.0/client/withdraw/${orderId}`); + }, + confirmDepositOrder: async () => { + return api.post('/v1.0/client/deposit/confirm'); + }, +}; diff --git a/src/utils/axiosRoot.ts b/src/utils/axiosRoot.ts index 4cbd8cd..281357c 100644 --- a/src/utils/axiosRoot.ts +++ b/src/utils/axiosRoot.ts @@ -3,7 +3,7 @@ // import { forage, forageKeys } from './foragePkg'; // const axiosRoot = axios.create({ -// baseURL: process.env.NODE_ENV === 'production' ? `${window.location.host}/api` : '/api', +// baseURL: process.env.NODE_ENV === 'production' ? `${window.location.host}/` : '/api', // }); // axiosRoot.interceptors.request.use(async (config) => { From 32b4541a07b971199bc0e864a745f4a9151d0f6c Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Thu, 24 Oct 2024 17:00:45 +0700 Subject: [PATCH 073/118] NotifyCompletedOrder, add custom handler for SignalR connection --- .../components/SafetyVerification.tsx | 6 +- src/pages/property/components/UseLoading.tsx | 57 +++++++++++++------ src/pages/property/index.tsx | 5 +- src/store/hubs/types.ts | 8 +-- src/store/hubs/useClientHubStore.ts | 32 ++++++++--- 5 files changed, 72 insertions(+), 36 deletions(-) diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index c091872..a5f4975 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -162,13 +162,9 @@ const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSu connection.off("NotifyPendingWithdraw") } } - }, []) + }) useEffect(() => { - console.log("hererererer") - console.log(isConfirm) - console.log(orderId) - if (isConfirm && orderId) { setData('email', { orderId }) handleVerificationSubmit(); diff --git a/src/pages/property/components/UseLoading.tsx b/src/pages/property/components/UseLoading.tsx index c8a7d2d..b617359 100644 --- a/src/pages/property/components/UseLoading.tsx +++ b/src/pages/property/components/UseLoading.tsx @@ -8,6 +8,9 @@ import { walletApi } from '@/services/walletApi'; import { useVerification } from './SafetyVerification'; import axios from 'axios'; import { Countdown } from './DepositUsdtTrc20'; +import { useClientHubStore } from '@/store/hubs/useClientHubStore'; +import { useAccountStore } from '@/store/useAccountStore'; +import { NotifyCompletedWithdrawOrderDto } from '@/store/hubs/types'; interface WithdrawOrder { orderId: number; @@ -31,10 +34,13 @@ const UseLoading: React.FC = ({ onCancel }) => { const [open, setOpen] = useState(true); const [OpenCsChat, setOpenCsChat] = useState(false); const [loading, setLoading] = useState(true); - + const [orderIsCompleted, setOrderIsCompleted] = useState(false); const [order, setOrder] = useState(null) const { t, i18n } = useTranslation(); const { data } = useVerification(); + + const { addCompletedWithdrawHandler } = useClientHubStore(); + useEffect(() => { // 监听语言变化,更新按钮文本 fetchWithdrawOrderDetail(); @@ -48,11 +54,18 @@ const UseLoading: React.FC = ({ onCancel }) => { }, []); + + const updateOrderToComplete = (message: NotifyCompletedWithdrawOrderDto) => { + setOrderIsCompleted(true); + console.log("Handler executed for message: ", message) + } + useEffect(() => { - if (order) { - console.log(order) - } - }, [order]) + const cleanupHandler = addCompletedWithdrawHandler(updateOrderToComplete) + + return cleanupHandler; + }, []) + const fetchWithdrawOrderDetail = async () => { try { if (data.currentStep !== 'pending-order') { @@ -142,18 +155,28 @@ const UseLoading: React.FC = ({ onCancel }) => {
    - } - /> - {/* */} - 預計到帳時間 - - { - order && - - } - + { + !orderIsCompleted ? + <> + } + + /> + 預計到帳時間 + + { + order && + + } + + + : + <> + + Completed + + }
    { tab={t('assets.出金')} key='出金' > - - + @@ -49,7 +48,7 @@ const Property = () => { tab={t('assets.轉帳')} key='轉帳' > - + diff --git a/src/store/hubs/types.ts b/src/store/hubs/types.ts index 7d96ad7..8dcf3d1 100644 --- a/src/store/hubs/types.ts +++ b/src/store/hubs/types.ts @@ -43,15 +43,15 @@ export interface NotifyPendingDepositOrderDto { userId: string; expiredAt: string; } - export interface NotifyCompletedDepositOrderDto { - Order_Number: string; // Your System's unique transaction order number - Amount: number; // The amount that BVAC recognizes + order_Number: string; // Your System's unique transaction order number + amount: number; // The amount that BVAC recognizes Complete_Date: string; // The date the transaction was committed UserId: string; } export interface NotifyCompletedWithdrawOrderDto { - + order_Code: string; // Your System's unique transaction order number + amt: number; } export interface NotifyPendingWithdrawOrderDto { order_Code: string; // Your System's unique transaction order number diff --git a/src/store/hubs/useClientHubStore.ts b/src/store/hubs/useClientHubStore.ts index 5075489..d87ef76 100644 --- a/src/store/hubs/useClientHubStore.ts +++ b/src/store/hubs/useClientHubStore.ts @@ -20,6 +20,8 @@ interface ClientHubState { completedDepositMessage: NotifyCompletedDepositOrderDto | null; pendingWithdrawMessage: NotifyPendingWithdrawOrderDto | null; completedWithdrawMessage: NotifyCompletedWithdrawOrderDto | null; + completedWithdrawHandlers: Array<(message: NotifyCompletedWithdrawOrderDto) => void>; + addCompletedWithdrawHandler: (handler: (message: NotifyCompletedWithdrawOrderDto) => void) => void; connectHub: () => void; disconnectHub: () => void; } @@ -32,8 +34,22 @@ export const useClientHubStore = create((set, get) => ({ completedDepositMessage: null, pendingWithdrawMessage: null, completedWithdrawMessage: null, + completedWithdrawHandlers: [], + addCompletedWithdrawHandler: (handler) => { + console.log("Trigger here") + set((state) => ({ + ...state, + completedWithdrawHandlers: [...state.completedWithdrawHandlers, handler], + })); + return () => { + set((state) => ({ + ...state, + completedWithdrawHandlers: state.completedWithdrawHandlers.filter(h => h !== handler), + })); + }; + }, connectHub: () => { - const { shouldInitConnection } = get(); + const { shouldInitConnection, completedWithdrawHandlers } = get(); if (!shouldInitConnection) { return; @@ -45,7 +61,6 @@ export const useClientHubStore = create((set, get) => ({ }) .withAutomaticReconnect() .build(); - connection .start() .then(() => { @@ -72,7 +87,7 @@ export const useClientHubStore = create((set, get) => ({ connection.on("NotifyCompletedDeposit", (message: NotifyCompletedDepositOrderDto) => { console.log("NotifyCompletedDeposit: ", message); - notification.info({ message: `Transaction completed (+$${message.Amount})`, description: `Order ${message.Order_Number} has completed, please check your balance`, duration: 60, showProgress: true, placement: 'bottomRight' }) + notification.info({ message: `Transaction completed (+$${message.amount})`, description: `Order ${message.order_Number} has completed, please check your balance`, duration: 60, showProgress: true, placement: 'bottomRight' }) const fetchMe = useAccountStore.getState().fetchMe; // Access store2 setter //Update account fetchMe(); @@ -91,10 +106,13 @@ export const useClientHubStore = create((set, get) => ({ connection.on("NotifyCompletedWithdraw", (message: NotifyCompletedWithdrawOrderDto) => { console.log("NotifyCompletedWithdraw: ", message); - // notification.info({ message: `Transaction completed (+$${message})`, description: `Order ${message.Order_Code} has completed, please check your balance`, duration: 60, showProgress: true, placement: 'bottomRight' }) - // const fetchMe = useAccountStore.getState().fetchMe; // Access store2 setter - // //Update account - // fetchMe(); + notification.info({ message: `Transaction completed (-$${message.amt})`, description: `Withdraw order ${message.order_Code} has completed, please check your balance`, duration: 60, showProgress: true, placement: 'bottomRight' }) + const fetchMe = useAccountStore.getState().fetchMe; // Access store2 setter + + completedWithdrawHandlers.forEach((handler) => handler(message)); + + + fetchMe(); set((state) => ({ ...state, // Retain other state properties completedWithdrawMessage: message, From 50ec7bf73ab209e1c14f6fd9d839003f02b496fd Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Thu, 24 Oct 2024 17:04:53 +0700 Subject: [PATCH 074/118] centralize api --- src/hooks/useAxiosInterceptor.tsx | 65 +++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 8 deletions(-) diff --git a/src/hooks/useAxiosInterceptor.tsx b/src/hooks/useAxiosInterceptor.tsx index 4bf6552..8c0c048 100644 --- a/src/hooks/useAxiosInterceptor.tsx +++ b/src/hooks/useAxiosInterceptor.tsx @@ -4,11 +4,60 @@ import { api } from '@/services/configServ'; import { useNavigate } from 'react-router-dom'; import useProgressStore from '@/store/useProgressStore'; + // Create an axios instance +interface KYCData { + FullName: string; + IDNumber: string; + DateOfBirth: string; + IDAddress: string; + ResidentialAddress: string; + PhoneNumber: string; + SecondaryFullName: string; + SecondaryIDNumber?: string; +} // Custom hook to register the Axios interceptor export const useAxiosInterceptor = () => { + const bankAPI = { + addBank: (bankInfo: AddBankInfo) => api.post("/v1.0/bank/add", bankInfo), + myBankAccount: () => api.get("/v1.0/bank/my"), + deleteBank: (bankId: number) => api.delete(`/v1.0/bank/my/${bankId}`) + } + + const kycAPI = { + kycUserInfor: (kycData: KYCData) => { + return api.post('/v1.0/kyc/upload-data', { kycData }); + }, + my: () => api.get('/v1.0/kyc/my') + + }; + + const walletApi = { + depositViaBank: async () => { + return api.post('/v1.0/client/deposit/bank'); + }, + depositViaCryptoWallet: async () => { + return api.post('/v1.0/client/deposit/crypto'); + }, + withdrawViaBank: async (amount: number, bankAccountId: number) => { + return api.post('/v1.0/client/withdraw', { amount, bankAccountId }); + }, + sendWithdrawVerificationEmail: async (payload: any) => { + return api.post('/v1.0/client/withdraw/email-verification', payload); + }, + confirmWithdrawVerificationEmail: async (payload: any) => { + return api.post('/v1.0/client/withdraw/email-verification/confirm', payload); + }, + getWithdrawOrderDetail: async (orderId: number) => { + return api.get(`/v1.0/client/withdraw/${orderId}`); + }, + confirmDepositOrder: async () => { + return api.post('/v1.0/client/deposit/confirm'); + }, + }; + const isInterceptorRegistered = useRef(false); // Use a ref to track registration status const navigate = useNavigate(); const { setProgress, resetProgress } = useProgressStore(); @@ -54,18 +103,18 @@ export const useAxiosInterceptor = () => { ); isInterceptorRegistered.current = true; - // Cleanup function to eject the interceptor - return () => { - api.interceptors.response.eject(response); - api.interceptors.request.eject(req); - isInterceptorRegistered.current = false; // Reset the registration status - }; + // Cleanup function to eject the interceptor + return () => { + api.interceptors.response.eject(response); + api.interceptors.request.eject(req); + isInterceptorRegistered.current = false; // Reset the registration status + }; } - + }, []); // Empty dependency array ensures it runs only on mount/unmount - return [api] + return [api, bankAPI, kycAPI, walletApi] }; From fd623ec583daef9158516906c6109a20cfce8ea4 Mon Sep 17 00:00:00 2001 From: Quoc Nghi Tr Date: Sat, 26 Oct 2024 19:52:14 +0700 Subject: [PATCH 075/118] pustt --- src/pages/login/LoginPage.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/login/LoginPage.tsx b/src/pages/login/LoginPage.tsx index a8ce715..46492fb 100644 --- a/src/pages/login/LoginPage.tsx +++ b/src/pages/login/LoginPage.tsx @@ -26,6 +26,7 @@ const LoginPage: React.FunctionComponent = () => { const { isDark } = useThemeStore(); // Get themes status // Validation schema using Yup + // Monday So will fix it const validationSchema = Yup.object({ userName: Yup.string() .required(t('auth.validationEmailUserNameLogin')) From af9a92462379cc273f10323c81d1ccc1dbffcf3f Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Mon, 28 Oct 2024 15:59:36 +0700 Subject: [PATCH 076/118] [#25]: The drawers for depositing money will interfere with each other. If you choose the second drawer, the first one should be closed. --- src/components/SelectAccount.tsx | 4 +++- src/pages/property/components/PayChannel.tsx | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 9d410aa..0c4034d 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -54,12 +54,14 @@ const SelectAccount: React.FunctionComponent = ({ value, on }) } return ( -
    +
    { + // Reset field values when language changes + useEffect(() => { + setFieldValue('userName', ''); + setFieldValue('countryCode', ''); + setFieldValue('userPhone', ''); + setFieldValue('email', ''); + setFieldValue('invitationCode', ''); + }, [i18n.language]); + + return ( + + + + + {({ field }: any) => ( + + )} + + + +
    + +
    + + + {({ field, form }: any) => ( + + )} + + + + + {({ field }: any) => } + + +
    +
    + + + + {({ field }: any) => ( + + )} + + + + + + + {({ field }: any) => ( + + )} + + + +
    +

    {t('auth.readAndAgree')}

    +
    + +
    + + + - )} - - - -
    - -
    - - - {({ field, form }: any) => ( - - )} - +
    + + + + + + +
    +

    + {t('auth.noEmailYet')} + e.preventDefault()} + onClick={(e) => { + e.preventDefault(); + okDaRegis('/auth/loginPage'); + }} + > + {t('auth.resend')} + +

    -
    - - - - {({ field }: any) => ( - - )} - - - - - - - {({ field }: any) => ( - - )} - - - - - - - - -
    -

    - {t('auth.noEmailYet')} - e.preventDefault()} // Ngăn chặn hành vi mặc định - onClick={(e) => { - e.preventDefault(); // Ngăn chặn hành vi mặc định - okDaRegis('/auth/loginPage'); - }} - > - {t('auth.resend')} - -

    -
    - - - )} + + + ); + }} )} @@ -323,49 +407,58 @@ const RegisterPage: React.FC = () => { onSubmit={handleSetPassword} validateOnChange={true} // Thêm thuộc tính này > - - - - - {({ field }: any) => ( - { + // Reset form when language changes + useEffect(() => { + resetForm(); + }, [i18n.language]); + + return ( + + + + + {({ field }: any) => ( + + )} + + - )} - - - - - - - {({ field }: any) => ( - + + + + {({ field }: any) => ( + + )} + + - )} - - - -
    - -
    -
    + +
    + +
    + + ); + }} )} diff --git a/src/pages/login/components/GetPassword.tsx b/src/pages/login/components/GetPassword.tsx index a87fbbd..35de3ea 100644 --- a/src/pages/login/components/GetPassword.tsx +++ b/src/pages/login/components/GetPassword.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Formik, Form, Field, ErrorMessage } from 'formik'; import * as Yup from 'yup'; import { message } from 'antd'; @@ -15,7 +15,7 @@ const GetPassword: React.FC = () => { const initialValues: GetPassFormValues = { email: '' }; const [canResend, setCanResend] = useState(true); const [waitTime, setWaitTime] = useState(40); // wait time: 40s - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); const validationSchema = Yup.object({ email: Yup.string() @@ -104,46 +104,51 @@ const GetPassword: React.FC = () => { validationSchema={validationSchema} onSubmit={handleSubmit} > - {() => ( -
    -
    + {({ resetForm }) => { + useEffect(() => { + resetForm(); + }, [i18n.language]); + return ( +
    - - - +
    + + + +
    +
    + +
    -
    - -
    -
    -
    - )} + + ); + }} {/*
    { const { isDark } = useThemeStore(); // Get themes status const [canResend, setCanResend] = useState(true); const [waitTime, setWaitTime] = useState(40); // wait time: 40s - const { t } = useTranslation(); + const { t, i18n } = useTranslation(); // Cần thêm i18n ở đây const loginNow = useNavigate(); - // const inputStyle = { - // marginTop: '0.5rem', - // display: 'block', - // width: '100%', - // border: '1px solid', - // borderRadius: '0.375rem', // rounded-md - // padding: '0.5rem', // p-2 - // outline: 'none', - // height: '2.5rem', // h-10 - // borderColor: isDark ? '#4b5563' : '#d1d5db', // tương đương với border-gray-600 và border-gray-300 - // backgroundColor: isDark ? '#1f2937' : '#ffffff', // tương đương với bg-black-500 và bg-white - // color: isDark ? '#ffffff' : '#000000', // text-black cho chế độ sáng - // boxShadow: isDark ? '0 0 0 2px rgba(37, 99, 235, 0.5)' : '0 0 0 2px rgba(56, 189, 248, 0.5)', // focus:ring - // }; const initialValues: ResendMailSignUpFormValues = { email: '', @@ -91,42 +77,48 @@ const ResendMailSignUp: React.FC = () => { validationSchema={validationSchema} onSubmit={handleSubmit} // Sử dụng logic kết hợp trong handleSubmit > - {() => ( -
    -
    - - - + {({ resetForm }) => { + useEffect(() => { + resetForm(); + }, [i18n.language]); + + return ( +
    - + {t('auth.ResendEmailName')} + + + +
    + +
    -
    -
    - )} + + ); + }}
    { e.preventDefault(); loginNow('/auth/loginPage'); }} - // className='mx-1' > {t('auth.LoginRightNow')} diff --git a/src/pages/login/components/SetPassword.tsx b/src/pages/login/components/SetPassword.tsx index b7966a7..e51558d 100644 --- a/src/pages/login/components/SetPassword.tsx +++ b/src/pages/login/components/SetPassword.tsx @@ -1,20 +1,48 @@ -import React from 'react'; +import React, { useEffect } from 'react'; import { Formik, Form, Field, ErrorMessage } from 'formik'; -import { message } from 'antd'; +import { Dropdown, Switch, message } from 'antd'; import * as Yup from 'yup'; -import LoGo from '@/assets/logo.png'; +// import LoGo from '@/assets/logo.png'; import { Link, useLocation } from 'react-router-dom'; import { useNavigate } from 'react-router-dom'; import { authAPI } from '@/services/authAPI'; +import { useTranslation } from 'react-i18next'; +import { useI18nStore, useThemeStore } from '@/store'; +import AuthImg from '@/assets/authbg.png'; +import { Header } from 'antd/es/layout/layout'; +import { GlobalOutlined, MoonOutlined, SunOutlined } from '@ant-design/icons'; +import PT_logo_ from '@/assets/PTFintech_final2-02-02.png'; +import PT_logo_2 from '@/assets/PTFintech_final2-02.png'; interface ResetPasswordValues { email: string; password: string; } +const headerStyle: React.CSSProperties = { + width: '100%', + height: 56, + padding: 0, + opacity: '10', +}; +const layoutStyle: React.CSSProperties = { + overflow: 'hidden', + width: '100%', + height: '100vh', + maxWidth: '1920px', + margin: '0 auto', + backgroundImage: `url(${AuthImg})`, + backgroundSize: 'cover', + backgroundPosition: 'center', + position: 'relative', +}; const ResetPasswordForm: React.FC = () => { + const { isDark, setIsDark } = useThemeStore(); const location = useLocation(); const setPassToLogin = useNavigate(); + const { t, i18n } = useTranslation(); // Cần thêm i18n ở đây + const { language, setLanguage } = useI18nStore(); + const getQueryParams = (queryString: string) => { const params = new URLSearchParams(queryString); return { @@ -31,12 +59,10 @@ const ResetPasswordForm: React.FC = () => { }; const validationSchema = Yup.object({ - email: Yup.string().email('無效的電子郵件地址').required('請輸入電子郵件地址'), + email: Yup.string().email(t('auth.validationEmailRegister1')).required(t('auth.validationEmailRegister2')), password: Yup.string() - .required('請輸入密碼') - .min(8, '密碼必須至少八個字符') - .matches(/[a-z]/, "密碼必須包含至少一個小寫字母('a'-'z')") - .matches(/[A-Z]/, "密碼必須包含至少 một 大寫字母('A'-'Z')"), + .required(t('auth.validaitionPasswordRegister1')) + .matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{8,}$/, t('auth.validaitionPasswordRegister2')), }); const handleSubmit = async (values: ResetPasswordValues) => { @@ -54,81 +80,169 @@ const ResetPasswordForm: React.FC = () => { } }; + useEffect(() => { + const { changeLanguage: i18nChange } = i18n || {}; + if (!i18nChange || language) return; + i18nChange(language); + }, [i18n, language]); + + const changeLanguage = (lng: any) => { + setLanguage(lng); + i18n.changeLanguage(lng); + }; + const resourcesData = i18n.options?.resources; + const items = []; + for (let key in resourcesData) { + const newKey: any = resourcesData[key].language; + items.push({ + key: key, + value: resourcesData[key], + label: ( + + ), + }); + } + return ( <> -
    -
    - Logo -
    + +
    - - 登入 - +
    + {isDark === true && ( + + PT_logo_ + + )} + {isDark === false && ( + + PT_logo_ + + )} +
    +
    + setIsDark(newValue)} + checkedChildren={} // Hiện biểu tượng mặt trời khi ở chế độ sáng + unCheckedChildren={} // Hiện biểu tượng mặt trăng khi ở chế độ tối + /> + {/* {}} + /> */} + + + +
    +
    - -
    -

    更新密碼

    - +
    +
    - {() => ( -
    -
    - - - -
    -
    - - - -
    - -
    - )} - +

    + {t('auth.setPasswordTitle')} +

    + + {({ resetForm }) => { + useEffect(() => { + resetForm(); + }, [i18n.language]); + return ( +
    +
    + + + +
    +
    + + + +
    + +
    + ); + }} +
    +
    ); From 9ad403fe6907323b68fdd7d01b23aad970163d85 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 29 Oct 2024 14:47:07 +0700 Subject: [PATCH 086/118] update nb version --- .env.development | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.development b/.env.development index 7ce2a30..15762f1 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,6 @@ PORT=3001 VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Shuu-10-28 +VITE_VERSION=VNoffice_potai-10-29 # VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file From 0cb4425207336faab6e6271a1639875d5efd62f7 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 29 Oct 2024 15:03:56 +0700 Subject: [PATCH 087/118] version number --- .env.production | 2 +- .../user/components/KycIdentityModal.tsx | 141 +----------------- src/services/kycAPI.ts | 37 +++-- 3 files changed, 25 insertions(+), 155 deletions(-) diff --git a/.env.production b/.env.production index c7d7006..3afc303 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,4 @@ VITE_PUBLIC_API_URL=https://api.rushprofit.uk VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Shuu-10-28 +VITE_VERSION=VNoffice_potai-10-29 diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 73134ec..08da1c5 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -21,9 +21,7 @@ import { api } from '@/services/configServ'; import { useSelector } from 'react-redux'; import { RootState } from '@/redux/configStore'; import { useAccountStore } from '@/store/useAccountStore'; -import { KYCData, kycAPI } from '@/services/kycAPI'; -// import { KYCData, kycAPI } from '@/services/kycAPI'; -// import Tesseract from 'tesseract.js'; +import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; interface IKycIdentityModalProps { open: boolean; @@ -41,16 +39,14 @@ interface UploadfilesState { } const KycIdentityModal: React.FunctionComponent = ({ open, onCancel, onFinish }) => { + const { kycAPI } = useAxiosInterceptor(); const token = useSelector((state: RootState) => state.admin.user?.token); // Cập nhật tên state nếu cần const userName = useSelector((state: RootState) => state.admin.user?.userName); const { t } = useTranslation(); const [countryCode, setCountryCode] = useState(null); const [countryCalling, setCountryCalling] = useState(null); - // const [names, setNames] = useState(''); - // const [address, setAddress] = useState(''); - // const [ids, setIds] = useState([]); - // handle state sameAdress - const [form] = Form.useForm(); // Tạo instance của form từ useForm + + const [form] = Form.useForm(); // handle Image status const [uploadFileStatus, setUploadFileStatus] = useState({ @@ -59,43 +55,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope SelfieWithID: false, AddressProof: false, }); - // State to hold the form data - // const [formData, setFormData] = useState({ - // fullName: userName || '', - // primaryIdNumber: '', - // secondaryFullName: '', - // secondaryIdNumber: '', - // dateOfBirth: null, - // idAddress: '', - // residentialAddress: '', - // phoneNumber: '', - // }); - // const onCheckboxChange = (e: any) => { - // if (e.target.checked) { - // setResidentialAddress(idAddress); // Khi checkbox được chọn, cập nhật địa chỉ tạm trú bằng ID address - // form.setFieldsValue({ residentialAddress: idAddress }); // Cập nhật giá trị của form - // } else { - // setResidentialAddress(''); // Nếu bỏ chọn checkbox, xóa giá trị địa chỉ tạm trú - // form.setFieldsValue({ residentialAddress: '' }); - // } - // }; - // const handleInputChange = (changedValues: any) => { - // setFormData((prevData) => ({ - // ...prevData, - // ...changedValues, - // })); - // }; - // React.useEffect(() => { - // console.log(address); - // // console.log(countryCode); - // }, [address]); - // const waitTime = (time: number = 100) => { - // return new Promise((resolve) => { - // setTimeout(() => { - // resolve(true); - // }, time); - // }); - // }; const banks = useAccountStore((state) => state.banks); @@ -179,8 +138,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope return true; // Allow moving to the next step }; - - return (
    = ({ ope await waitTime(1000); // Giữ nguyên phần đợi 1 giây - try { const response = await api.get('/v1.0/kyc/my'); @@ -362,21 +318,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } await uploadImageFile(file, 'IDFront', onSuccess, onError); }, - // customRequest: async ({ file, onSuccess, onError }) => { - // const formData = new FormData(); - // formData.append('file', file); - // formData.append('ImageType', 'IDFront'); - - // try { - // const response = await api.post('/v1.0/kyc/upload-image', formData); - // message.success(`${file.name} 上传成功`); - // onSuccess(response.data); - // // await handleInforImg(file); - // } catch (error) { - // message.error(`${file.name} 上传失败,请重试`); - // onError(error); - // } - // }, }} width='xl' /> @@ -397,20 +338,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } await uploadImageFile(file, 'IDBack', onSuccess, onError); }, - // customRequest: async ({ file, onSuccess, onError }) => { - // const formData = new FormData(); - // formData.append('file', file); - // formData.append('ImageType', 'IDBack'); - - // try { - // const response = await api.post('/v1.0/kyc/upload-image', formData); - // message.success(`${file.name} 上传成功`); - // onSuccess(response.data); - // } catch (error) { - // message.error(`${file.name} 上传失败,请重试`); - // onError(error); - // } - // }, }} width='xl' /> @@ -436,20 +363,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } await uploadImageFile(file, 'SecondaryIDFront', onSuccess, onError); }, - // customRequest: async ({ file, onSuccess, onError }) => { - // const formData = new FormData(); - // formData.append('file', file); - // formData.append('ImageType', 'SecondaryIDFront'); - - // try { - // const response = await api.post('/v1.0/kyc/upload-image', formData); - // message.success(`${file.name} 上传成功`); - // onSuccess(response.data); - // } catch (error) { - // message.error(`${file.name} 上传失败,请重试`); - // onError(error); - // } - // }, }} width='xl' /> @@ -470,20 +383,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } await uploadImageFile(file, 'SecondaryIDBack', onSuccess, onError); }, - // customRequest: async ({ file, onSuccess, onError }) => { - // const formData = new FormData(); - // formData.append('file', file); - // formData.append('ImageType', 'SecondaryIDBack'); - - // try { - // const response = await api.post('/v1.0/kyc/upload-image', formData); - // message.success(`${file.name} 上传成功`); - // onSuccess(response.data); - // } catch (error) { - // message.error(`${file.name} 上传失败,请重试`); - // onError(error); - // } - // }, }} width='xl' /> @@ -509,20 +408,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } await uploadImageFile(file, 'SelfieWithID', onSuccess, onError); }, - // customRequest: async ({ file, onSuccess, onError }) => { - // const formData = new FormData(); - // formData.append('file', file); - // formData.append('ImageType', 'SelfieWithID'); - - // try { - // const response = await api.post('/v1.0/kyc/upload-image', formData); - // message.success(`${file.name} 上传成功`); - // onSuccess(response.data); - // } catch (error) { - // message.error(`${file.name} 上传失败,请重试`); - // onError(error); - // } - // }, }} width='xl' /> @@ -547,20 +432,6 @@ const KycIdentityModal: React.FunctionComponent = ({ ope } await uploadImageFile(file, 'AddressProof', onSuccess, onError); }, - // customRequest: async ({ file, onSuccess, onError }) => { - // const formData = new FormData(); - // formData.append('file', file); - // formData.append('ImageType', 'AddressProof'); - - // try { - // const response = await api.post('/v1.0/kyc/upload-image', formData); - // message.success(`${file.name} 上传成功`); - // onSuccess(response.data); - // } catch (error) { - // message.error(`${file.name} 上传失败,请重试`); - // onError(error); - // } - // }, }} width='xl' /> @@ -622,9 +493,9 @@ const KycIdentityModal: React.FunctionComponent = ({ ope rules={[{ required: true, message: t('auth.validaitonAllLabelUser') }]} /> { const checked = e.target.checked; diff --git a/src/services/kycAPI.ts b/src/services/kycAPI.ts index 37453d6..0c3e286 100644 --- a/src/services/kycAPI.ts +++ b/src/services/kycAPI.ts @@ -1,22 +1,21 @@ -import { api } from "./configServ"; +// import { api } from "./configServ"; +// // interface +// export interface KYCData { +// FullName: string; +// IDNumber: string; +// DateOfBirth: string; +// IDAddress: string; +// ResidentialAddress: string; +// PhoneNumber: string; +// SecondaryFullName: string; +// SecondaryIDNumber?: string; +// } -// interface -export interface KYCData { - FullName: string; - IDNumber: string; - DateOfBirth: string; - IDAddress: string; - ResidentialAddress: string; - PhoneNumber: string; - SecondaryFullName: string; - SecondaryIDNumber?: string; -} +// export const kycAPI = { +// kycUserInfor: (kycData: KYCData) => { +// return api.post('/v1.0/kyc/upload-data', { kycData }); +// }, +// my: () => api.get('/v1.0/kyc/my') -export const kycAPI = { - kycUserInfor: (kycData: KYCData) => { - return api.post('/v1.0/kyc/upload-data', { kycData }); - }, - my: () => api.get('/v1.0/kyc/my') - -}; +// }; From 0978d4a2f5334b8cf23502421ecbc85133851c6d Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 29 Oct 2024 16:41:47 +0700 Subject: [PATCH 088/118] number and namer verstion --- .env.development | 2 +- .env.production | 2 +- .../user/components/KycIdentityModal.tsx | 19 ++++++++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.env.development b/.env.development index 15762f1..8d8391f 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,6 @@ PORT=3001 VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=VNoffice_potai-10-29 +VITE_VERSION=Liam_potai-10-29 # VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/.env.production b/.env.production index 3afc303..2ac3abc 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,4 @@ VITE_PUBLIC_API_URL=https://api.rushprofit.uk VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=VNoffice_potai-10-29 +VITE_VERSION=Liam_potai-10-29 diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index 08da1c5..40abd21 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -45,6 +45,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const { t } = useTranslation(); const [countryCode, setCountryCode] = useState(null); const [countryCalling, setCountryCalling] = useState(null); + const [apiHandleCallRes, setApiHandleCallRes] = useState(false); const [form] = Form.useForm(); @@ -63,6 +64,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope const response = await kycAPI.kycUserInfor(kycData); console.log('API Response:', response.data); message.success('KYC data submitted successfully!'); + setApiHandleCallRes(true); return true; // Indicate success } catch (error: any) { console.error('Error submitting KYC data:', error); @@ -75,6 +77,11 @@ const KycIdentityModal: React.FunctionComponent = ({ ope return false; // Indicate failure } }; + React.useEffect(() => { + if (apiHandleCallRes) { + console.log('API Call Result is true, you can perform additional actions here.'); + } + }, [apiHandleCallRes]); const waitTime = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); const uploadImageFile = async ( @@ -144,11 +151,13 @@ const KycIdentityModal: React.FunctionComponent = ({ ope onFinish={async (values) => { console.log(values); try { - const response = await api.post('/v1.0/kyc/review'); - if (response.status === 200) { - onFinish(values); - message.success('完成提交'); - onCancel(); + if (apiHandleCallRes) { + const response = await api.post('/v1.0/kyc/review'); + if (response.status === 200) { + onFinish(values); + message.success('完成提交'); + onCancel(); + } } } catch (error: any) { message.error(`上传失败,请重试: ` + error.response.data.title); From df6d47710013c76db54216e08edbaa91d4848e46 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 29 Oct 2024 20:03:59 +0700 Subject: [PATCH 089/118] process display MT acc --- src/components/SelectAccount.tsx | 31 +++++----- src/hooks/useAxiosInterceptor.tsx | 32 ++++++++++- src/pages/AppRouter.tsx | 4 ++ src/pages/PublicLayout/PublicLayout.tsx | 10 +++- .../user/components/KycIdentityModal.tsx | 56 +++++++++---------- .../user/components/KycIdentityResult.tsx | 25 ++++++--- src/pages/user/index.tsx | 2 +- src/store/useAccountStore.ts | 39 ++++++++++--- 8 files changed, 135 insertions(+), 64 deletions(-) diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 1f38e7d..9bd5fd3 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -4,17 +4,19 @@ import { Button, Divider, Modal, Select } from 'antd'; import AddAccount from './AddAccount'; import { useTranslation } from 'react-i18next'; import { useAccountStore } from '@/store/useAccountStore'; +import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; interface ISelectAccountProps { value?: string; // The value prop for the form onChange?: (value: string) => void; // The onChange prop to update the form's state - includeMT4?: boolean + includeMT4?: boolean; } const SelectAccount: React.FunctionComponent = ({ value, onChange, includeMT4 = true }) => { const { t } = useTranslation(); const [showAddAccount, setShowAddAccount] = useState(false); const { MT4Accounts, fetchMT4Accounts, fetchMe, me } = useAccountStore(); + const { api } = useAxiosInterceptor(); useEffect(() => { fetchMT4Accounts(); // Fetch MT4 accounts when the component mounts @@ -23,7 +25,7 @@ const SelectAccount: React.FunctionComponent = ({ value, on const AddAccountButton = () => ( - - - +
    ); @@ -65,11 +56,13 @@ const Account = () => { return (
    - ( - ]}> + ]} + > { ( - ]}> + ]} + > + {`${t('account.MT4userNames')} ${item.userName}`} +
    + {`${t('account.MT4Balance')} ${item.balance}`} +
    + {`${t('account.MT4Leverage')} ${item.leverage}`} +
    + } /> )} @@ -126,7 +132,7 @@ const Account = () => { } key='2' - extra={genExtra()} + // extra={genExtra()} style={panelStyle} >
    From d6e226df60b71c3492e8cc337a3dbb5cd4f86611 Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 30 Oct 2024 13:54:03 +0700 Subject: [PATCH 093/118] get version --- .env.development | 2 +- .env.production | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index 8d8391f..4e4add7 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,6 @@ PORT=3001 VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Liam_potai-10-29 +VITE_VERSION=Liam_potai-10-30 # VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/.env.production b/.env.production index 2ac3abc..950a3b4 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,4 @@ VITE_PUBLIC_API_URL=https://api.rushprofit.uk VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Liam_potai-10-29 +VITE_VERSION=Liam_potai-10-30 From c9b482db1c3d882764f77c1fa44e3786fbfc1b3e Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 30 Oct 2024 16:42:18 +0700 Subject: [PATCH 094/118] Cut delay effect --- src/store/useMarketDataStore.ts | 106 ++++++++++++++++---------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/src/store/useMarketDataStore.ts b/src/store/useMarketDataStore.ts index ee6fc4f..2b5e811 100644 --- a/src/store/useMarketDataStore.ts +++ b/src/store/useMarketDataStore.ts @@ -1,60 +1,60 @@ -import { create } from "zustand"; -import * as signalR from "@microsoft/signalr"; -import { MT4MarkDataDto } from "./hubs/types"; +import { create } from 'zustand'; +import * as signalR from '@microsoft/signalr'; +import { MT4MarkDataDto } from './hubs/types'; -const url = "https://demoApi.rushprofit.uk/hubs/marketData"; +const url = 'https://demoApi.rushprofit.uk/hubs/marketData'; interface MarketDataHubState { - shouldInitConnection: boolean; - hubConnection: signalR.HubConnection | null; - marketDataMessage: MT4MarkDataDto | null; - connectHub: () => void; - disconnectHub: () => void; + shouldInitConnection: boolean; + hubConnection: signalR.HubConnection | null; + marketDataMessage: MT4MarkDataDto | null; + connectHub: () => void; + disconnectHub: () => void; } export const useMarketDataHubStore = create((set, get) => ({ - shouldInitConnection: true, - hubConnection: null, - marketDataMessage: null, - - connectHub: () => { - const { shouldInitConnection } = get(); - if (!shouldInitConnection) { - return; - } - - const connection = new signalR.HubConnectionBuilder() - .withUrl(url, { - accessTokenFactory: () => localStorage.getItem("token") || "", - }) - .withAutomaticReconnect() - .build(); - - connection - .start() - .then(() => { - console.log("Connection started!"); - set({ hubConnection: connection }); - }) - .catch((err) => console.log("Error while establishing connection :( ", err)); - - // market data subscription - connection.on("BidAskUpdate", (message: MT4MarkDataDto) => { - console.log("BidAskUpdate: ", message); - set({ marketDataMessage: message }); - }); - - // Cleanup on disconnect - return () => { - connection.stop(); - set({ hubConnection: null }); - }; - }, - disconnectHub: () => { - const { hubConnection } = get(); - if (hubConnection) { - hubConnection.stop(); - set({ hubConnection: null }); - } - }, + shouldInitConnection: true, + hubConnection: null, + marketDataMessage: null, + + connectHub: () => { + const { shouldInitConnection } = get(); + if (!shouldInitConnection) { + return; + } + + const connection = new signalR.HubConnectionBuilder() + .withUrl(url, { + accessTokenFactory: () => localStorage.getItem('token') || '', + }) + .withAutomaticReconnect() + .build(); + + connection + .start() + .then(() => { + console.log('Connection started!'); + set({ hubConnection: connection }); + }) + .catch((err) => console.log('Error while establishing connection :( ', err)); + + // market data subscription + connection.on('BidAskUpdate', (message: MT4MarkDataDto) => { + console.log('BidAskUpdate: ', message); + //set({ marketDataMessage: message }); + }); + + // Cleanup on disconnect + return () => { + connection.stop(); + set({ hubConnection: null }); + }; + }, + disconnectHub: () => { + const { hubConnection } = get(); + if (hubConnection) { + hubConnection.stop(); + set({ hubConnection: null }); + } + }, })); From 4927c5c72c0f8bc6e372c9c31fb30463675d9ede Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 30 Oct 2024 17:22:27 +0700 Subject: [PATCH 095/118] process Link tag --- src/pages/user/components/KycBankResult.tsx | 2 +- src/pages/user/components/KycIdentityResult.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/user/components/KycBankResult.tsx b/src/pages/user/components/KycBankResult.tsx index 0be032e..48013fb 100644 --- a/src/pages/user/components/KycBankResult.tsx +++ b/src/pages/user/components/KycBankResult.tsx @@ -20,7 +20,7 @@ const KycBankResult: React.FunctionComponent = () => { > - 等候驗證期間,不妨先存入資金! 前往 > + 等候驗證期間,不妨先存入資金! 前往 > diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index 99b3d8f..0f48142 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -54,10 +54,10 @@ const KycIdentityResult: React.FunctionComponent = () = {t('layout.sendMoneyWhenWaitKYC')}{' '} window.scrollTo({ top: 0, behavior: 'smooth' })} > - {' '} + {t('layout.goSendMoney')} > From 04bfb4f1b465a1b0db6e6524eede950cefe9e77d Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 30 Oct 2024 17:29:51 +0700 Subject: [PATCH 096/118] process switch --- src/pages/user/components/KycBankResult.tsx | 2 +- src/pages/user/components/KycIdentityResult.tsx | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pages/user/components/KycBankResult.tsx b/src/pages/user/components/KycBankResult.tsx index 48013fb..f90a5c9 100644 --- a/src/pages/user/components/KycBankResult.tsx +++ b/src/pages/user/components/KycBankResult.tsx @@ -20,7 +20,7 @@ const KycBankResult: React.FunctionComponent = () => { > - 等候驗證期間,不妨先存入資金! 前往 > + 等候驗證期間,不妨先存入資金! 前往 > diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index 0f48142..3361ae1 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -14,14 +14,14 @@ const KycIdentityResult: React.FunctionComponent = () = const kycStatus = useAccountStore((state) => state.kyc?.status); const handleClick = () => { - if (kycStatus != 3) { - notification.error({ - message: 'You need to verify KYC first before you can add bank accounts', - placement: 'bottomRight', - }); - return; - } - console.log('ok'); + // if (kycStatus != 3) { + // notification.error({ + // message: 'You need to verify KYC first before you can add bank accounts', + // placement: 'bottomRight', + // }); + // return; + // } + // console.log('ok'); setOpenKycBankModal(true); }; return ( From f93328548aa22dcbf8644af9979afcb1f39a4f0a Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Wed, 30 Oct 2024 17:31:03 +0700 Subject: [PATCH 097/118] process switch2 --- src/pages/user/components/KycIdentityResult.tsx | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index 3361ae1..50e14ee 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -14,14 +14,14 @@ const KycIdentityResult: React.FunctionComponent = () = const kycStatus = useAccountStore((state) => state.kyc?.status); const handleClick = () => { - // if (kycStatus != 3) { - // notification.error({ - // message: 'You need to verify KYC first before you can add bank accounts', - // placement: 'bottomRight', - // }); - // return; - // } - // console.log('ok'); + if (kycStatus != 3) { + notification.error({ + message: 'You need to verify KYC first before you can add bank accounts', + placement: 'bottomRight', + }); + return; + } + console.log('ok'); setOpenKycBankModal(true); }; return ( @@ -57,7 +57,6 @@ const KycIdentityResult: React.FunctionComponent = () = to='/public/property' onClick={() => window.scrollTo({ top: 0, behavior: 'smooth' })} > - {t('layout.goSendMoney')} > From 0acd814e0119a74ff2d109c38850e1aee17483ea Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 31 Oct 2024 18:15:39 +0700 Subject: [PATCH 098/118] update err --- .env.development | 2 +- .env.production | 2 +- src/I18n/ch/components/auth.ts | 3 +- src/I18n/en/components/auth.ts | 1 + src/I18n/vi/components/auth.ts | 1 + src/assets/PT_clause0.pdf | Bin 0 -> 193846 bytes src/pages/PublicLayout/PublicLayout.tsx | 30 ++--- src/pages/login/RegisterPage.tsx | 142 ++++++++++-------------- src/pages/property/index.tsx | 19 +++- src/pages/user/index.tsx | 6 +- 10 files changed, 100 insertions(+), 106 deletions(-) create mode 100644 src/assets/PT_clause0.pdf diff --git a/.env.development b/.env.development index 4e4add7..f8845ff 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,6 @@ PORT=3001 VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Liam_potai-10-30 +VITE_VERSION=Liam_potai-10-31 # VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/.env.production b/.env.production index 950a3b4..8329efb 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,4 @@ VITE_PUBLIC_API_URL=https://api.rushprofit.uk VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Liam_potai-10-30 +VITE_VERSION=Liam_potai-10-31 diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index d3cad8c..209242e 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -38,7 +38,8 @@ const auth = { validiationConfirmPasswordRegister: '請確認密碼', checkSamePasswordRegister: '兩次輸入的密碼不一致', sentEmailAndCheckRegister: '電子郵件已發送。請確認電子郵件', - unknowErrorRegister: '發生了未知錯誤。', + unknowErrorRegister: '發生了未知錯誤', + warningTermsAndConditions: '請打開文件以同意條款和條件', // Resend Register Email: CheckEmailSignUp: '查收郵件', ResendEmailName: '重發郵件', diff --git a/src/I18n/en/components/auth.ts b/src/I18n/en/components/auth.ts index 295e98e..0466bca 100644 --- a/src/I18n/en/components/auth.ts +++ b/src/I18n/en/components/auth.ts @@ -39,6 +39,7 @@ const auth = { checkSamePasswordRegister: 'The two passwords entered do not match', sentEmailAndCheckRegister: 'Email sent. Please check your email', unknowErrorRegister: 'An unknown error occurred.', + warningTermsAndConditions: 'Please open the file to agree to the terms and conditions', // Resend Register Email: CheckEmailSignUp: 'Check your email', ResendEmailName: 'Resend Email', diff --git a/src/I18n/vi/components/auth.ts b/src/I18n/vi/components/auth.ts index ca0de23..f51d11b 100644 --- a/src/I18n/vi/components/auth.ts +++ b/src/I18n/vi/components/auth.ts @@ -40,6 +40,7 @@ const auth = { checkSamePasswordRegister: 'Hai lần nhập mật khẩu không khớp', sentEmailAndCheckRegister: 'Email đã được gửi. Vui lòng kiểm tra email', unknowErrorRegister: 'Đã xảy ra lỗi không xác định.', + warningTermsAndConditions: 'Vui lòng mở file để đồng ý với các điều kiện và điều khoản', // Resend Register Email: CheckEmailSignUp: 'Kiểm tra email', ResendEmailName: 'Gửi lại email', diff --git a/src/assets/PT_clause0.pdf b/src/assets/PT_clause0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bd4d9e542916f1d716eff55760430769c7794ae6 GIT binary patch literal 193846 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

    $ieXo{uMUDdWF`7-6kZOY)l># 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�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 =pvdvW)JS<1^0mAiZFwv<} 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 oM7aN7yrYw`Gjt;O(?tv0h?=2ivR!s literal 0 HcmV?d00001 diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index a5813eb..19656a7 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -81,13 +81,13 @@ const PublicLayout: React.FunctionComponent = () => { const { language, setLanguage } = useI18nStore(); const [OpenCsChat, setOpenCsChat] = useState(false); - const { me, fetchMe, fetchKyc, fetchBank,fetchMT4Accounts } = useAccountStore(); + const { me, fetchMe, fetchKyc, fetchBank, fetchMT4Accounts } = useAccountStore(); const { setAxiosInstance } = useAccountStore(); const axiosInstance = useAxiosInterceptor(); useEffect(() => { setAxiosInstance(axiosInstance); - }, []) + }, []); const oldChangeLanguage = useCallback( (language: any) => { i18n.changeLanguage(language); @@ -105,7 +105,7 @@ const PublicLayout: React.FunctionComponent = () => { const initialFetch = async () => { try { - await Promise.all([fetchMe(), fetchKyc(), fetchBank(),fetchMT4Accounts()]); + await Promise.all([fetchMe(), fetchKyc(), fetchBank(), fetchMT4Accounts()]); //Might be use for loading screen in the future setIsAuthorized(true); @@ -233,8 +233,7 @@ const PublicLayout: React.FunctionComponent = () => { path: '/入金', name: ( {t('assets.入金')} @@ -244,8 +243,7 @@ const PublicLayout: React.FunctionComponent = () => { path: '/出金', name: ( {t('assets.出金')} @@ -255,8 +253,7 @@ const PublicLayout: React.FunctionComponent = () => { path: '/轉帳', name: ( {t('assets.轉帳')} @@ -335,30 +332,31 @@ const PublicLayout: React.FunctionComponent = () => { // 右上 avatarProps={{ render: () => ( - +

    總價值
    入金, + label: 入金, }, { key: '出金', - label: 出金, + label: 出金, }, { key: '轉帳', - label: 轉帳, + label: 轉帳, }, { key: '進行中', label: ( - + 進行中 ), @@ -412,7 +410,9 @@ const PublicLayout: React.FunctionComponent = () => { > {user ? ( -
    {t('auth.welcomeUser')} {user.userName}
    +
    + {t('auth.welcomeUser')} {user.userName} +
    ) : (
    登入 diff --git a/src/pages/login/RegisterPage.tsx b/src/pages/login/RegisterPage.tsx index ba13352..0dbe2fb 100644 --- a/src/pages/login/RegisterPage.tsx +++ b/src/pages/login/RegisterPage.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react'; -import { Button, Card, Form, Input, Select, Typography, message } from 'antd'; +import { Button, Card, Form, Input, Select, Tooltip, Typography, message } from 'antd'; import { Link } from 'react-router-dom'; import { Formik, Field, Form as FormikForm, ErrorMessage } from 'formik'; import * as Yup from 'yup'; @@ -8,9 +8,11 @@ import { useNavigate } from 'react-router-dom'; import { AxiosError } from 'axios'; import { useTranslation } from 'react-i18next'; import { useThemeStore } from '@/store'; // Import useThemeStore +import pdfClause0 from '@/assets/PT_clause0.pdf'; import pdfClause1 from '@/assets/PT_clause1.pdf'; import pdfClause2 from '@/assets/PT_clause2.pdf'; import pdfClause3 from '@/assets/PT_clause3.pdf'; +import { InfoCircleOutlined } from '@ant-design/icons'; interface FormValues { userName: string; @@ -34,6 +36,7 @@ const { Option } = Select; const RegisterPage: React.FC = () => { const [currentStep, setCurrentStep] = useState<'register' | 'setPassword'>('register'); const [userData, setUserData] = useState(null); + const [clickedFiles, setClickedFiles] = useState([false, false, false, false]); const { t, i18n } = useTranslation(); const okDaRegis = useNavigate(); const { isDark } = useThemeStore(); // Get themes status @@ -45,6 +48,22 @@ const RegisterPage: React.FC = () => { { value: 'CN', label: '中國 (+86)', callingCode: '86' }, ]; + const agreementLinks = [ + { label: '保密協議', pdf: pdfClause0 }, + { label: '風險披露聲明', pdf: pdfClause1 }, + { label: '客戶協議書', pdf: pdfClause2 }, + { label: ' 免責聲明', pdf: pdfClause3 }, + ]; + + const handleLinkClick = (index: number) => { + setClickedFiles((prev) => { + const newClickedFiles = [...prev]; + newClickedFiles[index] = true; + return newClickedFiles; + }); + }; + const allFilesClicked = clickedFiles.every(Boolean); + const validationSchemaRegister = Yup.object().shape({ userName: Yup.string() .required(t('auth.validationUserNameRegister1')) @@ -52,6 +71,7 @@ const RegisterPage: React.FC = () => { countryCode: Yup.string().required(t('auth.validiationCountryCodeRegister')), userPhone: Yup.string().required(t('auth.validationUserPhone')), email: Yup.string().email(t('auth.validationEmailRegister1')).required(t('auth.validationEmailRegister2')), + agree0: Yup.bool().oneOf([true], t('auth.validaitonAgreeRegister')), agree1: Yup.bool().oneOf([true], t('auth.validaitonAgreeRegister')), agree2: Yup.bool().oneOf([true], t('auth.validaitonAgreeRegister')), agree3: Yup.bool().oneOf([true], t('auth.validaitonAgreeRegister')), @@ -274,93 +294,49 @@ const RegisterPage: React.FC = () => {

    {t('auth.readAndAgree')}

    -
    -
    - - - e.preventDefault()} // Ngăn chặn hành động mặc định - onClick={(e) => { - e.preventDefault(); // Ngăn chặn hành động mặc định - window.open(pdfClause1, '_blank'); // Mở file PDF - }} + {/* Agreement Links */} + - - - - + ))}
    diff --git a/src/pages/property/index.tsx b/src/pages/property/index.tsx index 7eb4c5b..09f088e 100644 --- a/src/pages/property/index.tsx +++ b/src/pages/property/index.tsx @@ -14,10 +14,25 @@ const Property = () => { const { t } = useTranslation(); const location = useLocation(); - const [activeTab, setActiveTab] = useState(''); + const [activeTab, setActiveTab] = useState('入金'); // Thiết lập giá trị mặc định useEffect(() => { - setActiveTab(location.state || '入金'); + const params = new URLSearchParams(location.search); + const tab = params.get('tab'); + + if (tab) { + setActiveTab( + tab === 'deposit' + ? '入金' + : tab === 'withdraw' + ? '出金' + : tab === 'transfer' + ? '轉帳' + : tab === 'inProgress' + ? '進行中' + : '入金', + ); + } }, [location]); const handleTabChange = (key: any) => { diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 1283593..02ae3b7 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -133,10 +133,10 @@ const User: React.FC = () => { : kycStatus === 2 ? '驗證中' : kycStatus === 3 - ? '已通過' + ? '通過驗證' : kycStatus === 4 - ? '已拒絕' - : '需要重新上傳' + ? '驳回' + : '需重新上傳' }`, )} From 079ee6742a4ea8bfb4966b9b0ffa3212fea39c4a Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 31 Oct 2024 18:17:43 +0700 Subject: [PATCH 099/118] get tab address --- src/pages/PublicLayout/PublicLayout.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/PublicLayout/PublicLayout.tsx b/src/pages/PublicLayout/PublicLayout.tsx index 19656a7..038fbee 100644 --- a/src/pages/PublicLayout/PublicLayout.tsx +++ b/src/pages/PublicLayout/PublicLayout.tsx @@ -343,20 +343,20 @@ const PublicLayout: React.FunctionComponent = () => { items: [ { key: '入金', - label: 入金, + label: 入金, }, { key: '出金', - label: 出金, + label: 出金, }, { key: '轉帳', - label: 轉帳, + label: 轉帳, }, { key: '進行中', label: ( - + 進行中 ), From c9f83b5c02037ada0db8d6f4af39a44f13b0a764 Mon Sep 17 00:00:00 2001 From: leo_shuu Date: Fri, 1 Nov 2024 19:10:08 +0700 Subject: [PATCH 100/118] Transfer, transaction history --- src/components/ProtectBanner.tsx | 8 +- src/components/SelectAccount.tsx | 63 ++- src/hooks/useAxiosInterceptor.tsx | 61 ++- src/pages/property/Deposit.tsx | 13 +- src/pages/property/InProgress.tsx | 203 ++++---- src/pages/property/Transactions.tsx | 36 ++ src/pages/property/Transfer.tsx | 125 +++-- src/pages/property/Withdraw.tsx | 130 ++++-- src/pages/property/components/DepositList.tsx | 113 +++++ .../property/components/DepositUsdtTrc20.tsx | 5 +- .../components/SafetyVerification.tsx | 441 +++++++++++++++--- .../property/components/TransferList.tsx | 139 ++++++ .../property/components/WithdrawList..tsx | 147 ++++++ src/pages/user/index.tsx | 21 +- src/services/walletApi.ts | 17 +- src/store/useMarketDataStore.ts | 2 +- src/utils/getStatusColor.ts | 28 ++ 17 files changed, 1250 insertions(+), 302 deletions(-) create mode 100644 src/pages/property/Transactions.tsx create mode 100644 src/pages/property/components/DepositList.tsx create mode 100644 src/pages/property/components/TransferList.tsx create mode 100644 src/pages/property/components/WithdrawList..tsx create mode 100644 src/utils/getStatusColor.ts diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 5ec9e69..f58aa6c 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -14,7 +14,7 @@ import AccountChart from './AccountChart'; import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; -interface IProtectBannerProps {} +interface IProtectBannerProps { } const ProtectBanner: React.FunctionComponent = () => { const { t } = useTranslation(); @@ -22,7 +22,7 @@ const ProtectBanner: React.FunctionComponent = () => { const [openKYCModal, setOpenKYCModal] = useState(false); const { Divider } = StatisticCard; const [OpenAccountChart, setOpenAccountChart] = useState(false); - const [api] = useAxiosInterceptor(); + const { api } = useAxiosInterceptor(); const ScrollToTopButton = () => { window.location.href = '#'; // 將頁面滾動到頂部 @@ -45,9 +45,7 @@ const ProtectBanner: React.FunctionComponent = () => { fetchKYCData(); }, []); - useEffect(() => { - console.log(kycStatus); - }); + return (
    {/* 尚未實名驗證 */} diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 1f38e7d..e24007e 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -6,18 +6,26 @@ import { useTranslation } from 'react-i18next'; import { useAccountStore } from '@/store/useAccountStore'; interface ISelectAccountProps { - value?: string; // The value prop for the form - onChange?: (value: string) => void; // The onChange prop to update the form's state - includeMT4?: boolean + value?: string; + onChange?: (value: string) => void; + includeMT4?: boolean; + includeWallet?: boolean; + exclude?: string; } -const SelectAccount: React.FunctionComponent = ({ value, onChange, includeMT4 = true }) => { +const SelectAccount: React.FunctionComponent = ({ + value, + onChange, + includeMT4 = true, + includeWallet = true, + exclude, +}) => { const { t } = useTranslation(); const [showAddAccount, setShowAddAccount] = useState(false); const { MT4Accounts, fetchMT4Accounts, fetchMe, me } = useAccountStore(); useEffect(() => { - fetchMT4Accounts(); // Fetch MT4 accounts when the component mounts + fetchMT4Accounts(); fetchMe(); }, []); @@ -39,29 +47,40 @@ const SelectAccount: React.FunctionComponent = ({ value, on })); }; - let options = [ - { - label: {t('report.寶泰帳戶')}, - title: '寶泰帳戶', - options: [{ label: {`寶泰帳戶-${me?.email}`}, value: 'WalletDeposit' }], + const [options, setOptions] = useState([]); + + const updateOptions = () => { + let newOptions = []; + if (includeWallet) { + newOptions.push({ + label: {t('report.寶泰帳戶')}, + title: '寶泰帳戶', + options: [{ label: {`寶泰帳戶-${me?.email}`}, value: `wallet_${me?.id}` }], + }); + } + if (includeMT4) { + const mt4Options = getMT4Options().filter(option => option.value !== exclude); + newOptions.push({ + label: MT4 帳戶, + title: 'MT4 帳戶', + options: mt4Options, + }); } - ] - if (includeMT4) { - options.push({ - label: MT4 帳戶, - title: 'MT4 帳戶', - options: getMT4Options(), - }) - } + setOptions(newOptions); + }; + + useEffect(() => { + updateOptions(); + }, [exclude, MT4Accounts, me]); + return (
    + `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} + parser={(value) => value!.replace(/\$\s?|(,*)/g, '')} + precision={3} />
    - - + + { + form.setFieldsValue({ to: value }); + setExcludeInFrom(value); + updateBalance(value, false); // Update balance for "to" + }} + /> - - diff --git a/src/pages/property/Withdraw.tsx b/src/pages/property/Withdraw.tsx index 8750184..c3c8f9f 100644 --- a/src/pages/property/Withdraw.tsx +++ b/src/pages/property/Withdraw.tsx @@ -1,4 +1,4 @@ -import { Button, Form, Input, InputNumber, Space, Tooltip, Typography, message } from 'antd'; +import { Button, Form, Input, InputNumber, Radio, Space, Tooltip, Typography, message } from 'antd'; import * as React from 'react'; import { InfoCircleOutlined, ScanOutlined } from '@ant-design/icons'; import SafetyVerification, { useVerification, VerificationProvider } from './components/SafetyVerification'; @@ -17,6 +17,7 @@ const Withdraw: React.FunctionComponent = (props) => { const { Text } = Typography; const [form] = Form.useForm(); const [openSafetyVerification, setOpenSafetyVerification] = React.useState(false); + const [withdrawMethod, setWithdrawMethod] = React.useState('BankAccountWithdraw'); // Track selected method const { data, setCurrentStep, setData } = useVerification(); const { me } = useAccountStore((state) => ({ me: state.me, @@ -27,9 +28,6 @@ const Withdraw: React.FunctionComponent = (props) => { const onReset = () => { form.resetFields(); }; - React.useEffect(() => { - console.log(marketDataMessage); - }, [marketDataMessage]); React.useEffect(() => { bankAPI.myBankAccount().then((res) => setBanks(res.data)); @@ -45,6 +43,7 @@ const Withdraw: React.FunctionComponent = (props) => { form.setFieldValue('bankId', banks[0].id); } }, [banks]); + const handleNextStep = () => { setCurrentStep('idle'); setOpenSafetyVerification(true); @@ -54,25 +53,25 @@ const Withdraw: React.FunctionComponent = (props) => { form.setFieldValue('withdrawAmount', values); form.setFieldValue('receiveAmount', values); }; + const handleVerificationSubmit = () => { const formData = form.getFieldsValue(); - // Kiểm tra dữ liệu trong form const isValid = formData.withdrawAmount !== undefined && formData.receiveAmount !== undefined && - formData.bank !== undefined && - formData.bankId !== undefined; + ((withdrawMethod === 'BankAccountWithdraw' && formData.bank !== undefined && formData.bankId !== undefined) || + (withdrawMethod === 'WalletAddressWithdraw' && formData.walletAddress !== undefined)); if (!isValid) { - message.error('請在提款之前先驗證銀行信息.'); + message.error('Please fill in all information before withdrawing.'); return; } switch (data.currentStep) { case 'idle': if (formData.withdrawAmount > me!.wallet.balance) { - message.error("Insufficent balance") + message.error("Insufficient balance"); return; } setData('confirm-order', formData); @@ -96,7 +95,10 @@ const Withdraw: React.FunctionComponent = (props) => { break; } }; - + const chooseTransactionMethod = (method: string) => { + setWithdrawMethod(method); + form.setFieldValue('method', method) + } return (
    = (props) => { form={form} onFinish={handleVerificationSubmit} > + {/* Withdraw Method Selection */} + + + + + - 宝泰帳戶 - {me?.email} + 寶泰帳戶 - {me?.email} @@ -139,6 +165,7 @@ const Withdraw: React.FunctionComponent = (props) => { > = (props) => { onChange={UpdatePrice} placeholder='Enter amount' style={{ width: '100%' }} - // Only allows numbers with commas and dots for thousands and decimals formatter={(value) => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')} - parser={(value) => value!.replace(/\$\s?|(,*)/g, '')} // Parses the value back without commas - precision={3} // Limit precision to 3 decimal places + parser={(value) => value!.replace(/\$\s?|(,*)/g, '')} + precision={3} /> @@ -170,6 +196,7 @@ const Withdraw: React.FunctionComponent = (props) => { > = (props) => { - - {/* 判斷法幣通道 */} - - 變更 - - } - /> - {/* 判斷USDT通道 */} - {/* } - /> - } - /> */} - + {withdrawMethod === 'BankAccountWithdraw' && ( + + + Change + + } + /> + + )} + + {withdrawMethod === 'WalletAddressWithdraw' && ( + + } + /> + } + /> + + )} + diff --git a/src/pages/property/components/DepositList.tsx b/src/pages/property/components/DepositList.tsx new file mode 100644 index 0000000..c629fe4 --- /dev/null +++ b/src/pages/property/components/DepositList.tsx @@ -0,0 +1,113 @@ +import { getStatusTagColor, OrderStatus } from '@/utils/getStatusColor'; +import { List, Tag, Typography, Card, Space, Divider, Pagination } from 'antd'; +import { DollarOutlined, ClockCircleOutlined, WalletOutlined } from '@ant-design/icons'; +import React, { useEffect, useState } from 'react'; +import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; + +interface DepositTransaction { + transactionId: number; + status: OrderStatus; + method: string; + createdAt: string; + expiredAt?: string; + requestedAmount: number; + walletAddress?: string; +} + +const DepositList: React.FC = () => { + const { walletApi } = useAxiosInterceptor(); + const [transactions, setTransactions] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [pageSize, setPageSize] = useState(5); + const [totalCount, setTotalCount] = useState(0); + + const fetchTransactions = async (page: number, size: number) => { + try { + const response = await walletApi.getListDepositTransactions({ page, pageSize: size }); + setTransactions(response.data.items); + setTotalCount(response.data.totalCount); + } catch (error) { + console.error('Failed to fetch deposit transactions:', error); + } + }; + + useEffect(() => { + fetchTransactions(currentPage, pageSize); + }, [currentPage, pageSize]); + + const handlePageChange = (page: number, size?: number) => { + setCurrentPage(page); + if (size) setPageSize(size); + }; + + return ( + <> + ( + + +
    + + Status: + {item.status} + + #{item.transactionId} +
    + + + +
    + + + Amount: ${item.requestedAmount} + + + + Method: {item.method} + +
    + + + +
    + + + Created At: {new Date(item.createdAt).toLocaleString()} + + {item.expiredAt && ( + + + Expires At: {new Date(item.expiredAt).toLocaleString()} + + )} +
    + + {item.walletAddress && ( + <> + + + + Wallet Address: {item.walletAddress} + + + )} +
    +
    + )} + /> + + {/* Pagination Component */} + + + ); +}; + +export default DepositList; diff --git a/src/pages/property/components/DepositUsdtTrc20.tsx b/src/pages/property/components/DepositUsdtTrc20.tsx index d9d11ed..154c08d 100644 --- a/src/pages/property/components/DepositUsdtTrc20.tsx +++ b/src/pages/property/components/DepositUsdtTrc20.tsx @@ -40,7 +40,10 @@ const DepositUsdtTrc20: React.FunctionComponent = ({ ope const submitOrder = async () => { const { channel, amount, depositAccount } = depositForm.getFieldsValue(); console.log(depositForm.getFieldsValue()); - if (depositAccount === 'WalletDeposit') { + + + if (depositAccount.startsWith('wallet')) { + try { const depositResponse = await api.post('/v1.0/client/transaction/deposit', { channel, amount, TransactionType: 6 }); message.success('Order successfully created'); diff --git a/src/pages/property/components/SafetyVerification.tsx b/src/pages/property/components/SafetyVerification.tsx index 358a2fd..fa33518 100644 --- a/src/pages/property/components/SafetyVerification.tsx +++ b/src/pages/property/components/SafetyVerification.tsx @@ -89,7 +89,6 @@ const SafetyVerification: React.FunctionComponent = ({ const { t } = useTranslation(); - const handleClick = () => { setDisabled(true); let secondsLeft = 180; @@ -119,6 +118,9 @@ const SafetyVerification: React.FunctionComponent = ({ {currentStep === 'email' && ( )} + {currentStep === 'transfer-email' && ( + + )} {currentStep === 'verify-email-code' && ( = ({ t={t} /> )} + + {currentStep === 'verify-transfer-email-code' && ( + + )} {currentStep === 'pending-order' && } {currentStep === 'transfer' && } {/* {currentStep === 'getPassword' && { }} />} @@ -160,17 +176,26 @@ const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSu if (data.currentStep !== 'confirm-order') { throw new Error(); } - const bankId = data[data.currentStep]["bankId"] + + const transactionType = data[data.currentStep]["method"] + console.log(transactionType); + const amount = data[data.currentStep]["withdrawAmount"] - if (bankId && amount) { - setIsConfirm(true); - const response = await walletApi.withdrawToBank(amount, bankId) - if (response.status == 200) { - setOrderId(response.data.order_Code); - } + const bankAccountId = data[data.currentStep]["bankId"] + const transactionMethod = data[data.currentStep]["method"] + const walletAddress = data[data.currentStep]["walletAddress"] + setIsConfirm(true); + let response: any; + if (transactionMethod == 'WalletAddressWithdraw') { + response = await walletApi.withdrawAsync({ amount, transactionMethod, walletAddress }) } - else - throw new Error(); + else if (transactionMethod == 'BankAccountWithdraw') { + response = await walletApi.withdrawAsync({ amount, transactionMethod, bankAccountId }) + } + if (response.status == 200) { + setOrderId(response.data.order_Code); + } + } catch (e) { setIsConfirm(false) @@ -244,16 +269,16 @@ const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSu Wallet Address:gmail
    */}
    - Bank Name:{data[data.currentStep]["bank"].split(" | ")[0]} + Bank Name:{data[data.currentStep]["bank"]?.split(" | ")[0]}
    - Bank Account Holder:{data[data.currentStep]["bank"].split(" | ")[1]} + Bank Account Holder:{data[data.currentStep]["bank"]?.split(" | ")[1]}
    - Bank Account Number:{data[data.currentStep]["bank"].split(" | ")[2]} + Bank Account Number:{data[data.currentStep]["bank"]?.split(" | ")[2]}
    - Branch:{data[data.currentStep]["bank"].split(" | ")[3]} + Branch:{data[data.currentStep]["bank"]?.split(" | ")[3]}
    @@ -265,48 +290,162 @@ const ConfirmOrderModal: React.FC = ({ open, onCancel, handleVerificationSu ); } -const ConfirmTransferModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => ( - - Confirm Transfer -
    +const ConfirmTransferModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => { + + const { data, setData } = useVerification() + const me = useAccountStore(state => state.me); + const [isConfirm, setIsConfirm] = useState(false); + const [orderId, setOrderId] = useState(null); + + useEffect(() => { + console.log("Here", isConfirm, orderId) + if (isConfirm && orderId) { + console.log("Again") + + setData('transfer-email', { orderId }) + handleVerificationSubmit(); + } + }, [isConfirm, orderId]) + function mapToCreateTransferCommand() { + const from = data[data.currentStep]["from"]; + const to = data[data.currentStep]["to"]; + const amount = data[data.currentStep]["transferAmount"]; + + // Helper function to check if a value represents a wallet and extract the ID + const isWallet = (value: string | number): boolean => + typeof value === "string" && value.startsWith("wallet_"); + const extractWalletId = (value: string) => value.split("_")[1]; + + // Create the command object with amount and placeholders for the IDs + const command = { + DestinationUserId: '', + SourceMT4Login: 0, + DestinationMT4Login: 0, + Amount: parseFloat(amount), + TransactionType: "WalletTransfer", + }; + + // Assign Source (from) values + if (isWallet(from)) { + command.DestinationUserId = extractWalletId(from); + } else { + command.SourceMT4Login = parseInt(from, 10); + } + + // Assign Destination (to) values + if (isWallet(to)) { + command.DestinationUserId = extractWalletId(to); + } else { + command.DestinationMT4Login = parseInt(to, 10); } - open={open} - destroyOnClose - width={480} - footer={null} - > - -
    - 出金帳戶:gmail -
    -
    - 帳戶可用現金:gmail -
    -
    - 出金金額:gmail -
    -
    - {t('assets.手續費')}:gmail -
    -
    - {t('assets.提取為')}:gmail -
    -
    - {t('assets.出金匯率')}:gmail -
    -
    - - -
    -
    - -); + + // Determine TransactionType based on source and destination + command.TransactionType = getTransactionType(from, to); + + return command; + } + + // Helper function to determine TransactionType + function getTransactionType(from: any, to: any) { + const isFromWallet = `${from}`.startsWith("wallet_"); + const isToWallet = `${to}`.startsWith("wallet_"); + + if (isFromWallet && isToWallet) return "WalletTransfer"; + if (isFromWallet && !isToWallet) return "WalletToMT4Transfer"; + if (!isFromWallet && isToWallet) return "MT4ToWalletTransfer"; + return "MT4ToMT4Transfer"; + } + const handleConfirm = async () => { + try { + const payload = mapToCreateTransferCommand(); + if (payload) { + console.log(payload) + setIsConfirm(true); + const response = await walletApi.createTransferOrder(payload) + if (response.status == 200) { + setOrderId(response.data.transactionId); + } + } + else + throw new Error(); + } + catch (e) { + setIsConfirm(false) + if (axios.isAxiosError(e)) { + message.error({ content: e.response?.data["title"] }) + } + else { + console.log(e) + onCancel(); + } + } + } + if (isConfirm) { + return ( + + + + + + + ); + } + return ( + + Confirm Transfer +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + 出金帳戶:{typeof data[data.currentStep]["from"] == 'string' ? me?.email : } +
    +
    + 帳戶可用現金:{ } +
    +
    + 出金金額:gmail +
    +
    + {t('assets.手續費')}:gmail +
    +
    + {t('assets.提取為')}:gmail +
    +
    + {t('assets.出金匯率')}:gmail +
    +
    + + +
    +
    + + ); +} + export const EmailModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => { const [form] = useForm(); @@ -408,6 +547,105 @@ export const EmailModal: React.FC = ({ open, onCancel, handleVerificationSu } +export const TransferEmailModal: React.FC = ({ open, onCancel, handleVerificationSubmit, t }) => { + + const [form] = useForm(); + const { data, setData } = useVerification(); + + const [emailIsSent, setEmailIsSent] = useState(false); + const handleEmailVerification = async () => { + try { + if (data.currentStep !== 'transfer-email') { + throw new Error(); + } + const payload = { ...form.getFieldsValue(), orderId: data["transfer-email"]?.orderId } + const response = await walletApi.sendTransferVerificationEmail(payload) + setEmailIsSent(true); + } + catch (e) { + setEmailIsSent(false); + if (axios.isAxiosError(e)) { + message.error({ content: e.response?.data["title"] }) + } + else { + onCancel(); + } + } + } + useEffect(() => { + if (emailIsSent) { + handleVerificationSubmit(); + } + }, [emailIsSent]) + + if (emailIsSent) { + return ( + + + + + + + ); + } + return ( + + 安全驗證 + 為保證資金安全,請輸入寶泰會員的登入資訊 +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + + + + + + + + + +
    + + +
    + +
    + + ); + + +} export const VerifyEmailCodeModal: React.FC = ({ @@ -501,4 +739,97 @@ export const VerifyEmailCodeModal: React.FC = ({ }; +export const VerifyTransferEmailCodeModal: React.FC = ({ + open, + onCancel, + handleVerificationSubmit, + verificationCode, + setVerificationCode, + disabled, + countdown, + handleClick, + t, +}) => { + const { data } = useVerification(); + const [form] = useForm(); + const { fetchMe, fetchMT4Accounts } = useAccountStore(); + const handleConfirmEmailVerification = async () => { + try { + if (data.currentStep !== 'verify-transfer-email-code') { + throw new Error(); + } + const payload = { code: form.getFieldValue('code'), transactionId: data["transfer-email"]?.orderId } + const response = await walletApi.confirmTransferVerificationEmail(payload) + + fetchMe(); + fetchMT4Accounts(); + handleVerificationSubmit(); + message.success("Transaction completed"); + } + catch (e) { + console.log(e) + if (axios.isAxiosError(e)) { + message.error({ content: e.response?.data["title"] }) + } + else { + onCancel(); + } + } + } + + + + return ( + + {t('auth.驗證電子信箱')} + 已發送驗證碼至您的電子信箱 +
    + } + open={open} + destroyOnClose + width={480} + footer={null} + > + +
    + + setVerificationCode(e.target.value)} + /> + + {verificationCode ? ( + + + + ) : ( + + + + )} +
    + {countdown} + +
    +
    +
    + + ) + +}; export default SafetyVerification; diff --git a/src/pages/property/components/TransferList.tsx b/src/pages/property/components/TransferList.tsx new file mode 100644 index 0000000..d55c298 --- /dev/null +++ b/src/pages/property/components/TransferList.tsx @@ -0,0 +1,139 @@ +import React, { useEffect, useState } from 'react'; +import { List, Tag, Typography, Card, Space, Divider, Pagination } from 'antd'; +import { DollarOutlined, ClockCircleOutlined, UserOutlined, ArrowRightOutlined } from '@ant-design/icons'; +import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; +import { getStatusTagColor } from '@/utils/getStatusColor'; + +interface TransferTransaction { + transactionId: number; + status: string; + createdAt: string; + completedAt?: string | null; + requestedAmount: number; + actualAmount?: number | null; + source: string; + destination: string; + transactionType: string; +} + +interface TransferListProps { + data: { + currentPage: number; + totalPages: number; + pageSize: number; + totalCount: number; + items: TransferTransaction[]; + }; +} + +const TransferList: React.FC = () => { + const [transactions, setTransactions] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [pageSize, setPageSize] = useState(5); + const [totalCount, setTotalCount] = useState(0); + + const { walletApi } = useAxiosInterceptor(); + + const fetchTransactions = async (page: number, size: number) => { + try { + const response = await walletApi.getListTransferTransactions({ page, pageSize: size }); + console.log(response); + setTransactions(response.data.items); + setTotalCount(response.data.totalCount); + setCurrentPage(response.data.currentPage); + } catch (error) { + console.error('Failed to fetch transfer transactions:', error); + } + }; + + useEffect(() => { + fetchTransactions(currentPage, pageSize); + }, [currentPage, pageSize]); + + const handlePageChange = (page: number, size?: number) => { + setCurrentPage(page); + if (size) setPageSize(size); + }; + + // Determine if MT4 tag should be displayed based on the transaction type + const renderAccountWithLabel = (account: string, type: string, isSource: boolean) => { + const isMT4 = (isSource && type.includes('MT4ToWallet')) || (!isSource && type.includes('WalletToMT4') || type.includes('MT4ToMT4')); + return ( + + {isMT4 && MT4} + {account} + + ); + }; + + return ( + <> + ( + + +
    + + Status: + {item.status} + + #{item.transactionId} +
    + + + + + + + Amount: ${item.requestedAmount} + + + + Created At: {new Date(item.createdAt).toLocaleString()} + + {item.completedAt && ( + + + Completed At: {new Date(item.completedAt).toLocaleString()} + + )} + + + + + + + + Source: {renderAccountWithLabel(item.source, item.transactionType, true)} + + + + Destination: {renderAccountWithLabel(item.destination, item.transactionType, false)} + + + Type: {item.transactionType} + + +
    +
    + )} + /> + + {/* Pagination Component */} + + + ); +}; + +export default TransferList; diff --git a/src/pages/property/components/WithdrawList..tsx b/src/pages/property/components/WithdrawList..tsx new file mode 100644 index 0000000..ad74ad8 --- /dev/null +++ b/src/pages/property/components/WithdrawList..tsx @@ -0,0 +1,147 @@ +import { getStatusTagColor, OrderStatus } from '@/utils/getStatusColor'; +import { List, Tag, Typography, Card, Space, Divider, Pagination, Modal } from 'antd'; +import { DollarOutlined, ClockCircleOutlined, BankOutlined, WalletOutlined, UserOutlined, NumberOutlined } from '@ant-design/icons'; +import React, { useEffect, useState } from 'react'; +import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; + +interface WithdrawTransaction { + transactionId: number; + status: OrderStatus; + bankName?: string; + bankAccountHolder?: string; + bankAccountNumber?: string; + branch?: string; + walletAddress?: string; + requestedAmount: number; + createdAt: string; + expiredAt?: string; +} + +const WithdrawList: React.FC = () => { + const { walletApi } = useAxiosInterceptor(); + const [transactions, setTransactions] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [pageSize, setPageSize] = useState(10); + const [totalCount, setTotalCount] = useState(0); + const [selectedTransaction, setSelectedTransaction] = useState(null); + const [isModalVisible, setIsModalVisible] = useState(false); + + const fetchTransactions = async (page: number, size: number) => { + try { + const response = await walletApi.getListWithdrawTransactions({ page, pageSize: size }); + setTransactions(response.data.items); + setTotalCount(response.data.totalCount); + } catch (error) { + console.error('Failed to fetch withdraw transactions:', error); + } + }; + + useEffect(() => { + fetchTransactions(currentPage, pageSize); + }, [currentPage, pageSize]); + + const handlePageChange = (page: number, size?: number) => { + setCurrentPage(page); + if (size) setPageSize(size); + }; + + const openModal = (transaction: WithdrawTransaction) => { + setSelectedTransaction(transaction); + setIsModalVisible(true); + }; + + const closeModal = () => { + setSelectedTransaction(null); + setIsModalVisible(false); + }; + + return ( + <> + ( + + openModal(item)} + hoverable + className="w-full rounded-lg p-4 cursor-pointer transition-shadow duration-300 ease-in-out border border-transparent hover:border-gold-500 hover:shadow-yellow-500" + bodyStyle={{ padding: 12 }} + > +
    + + Status: + {item.status} + + #{item.transactionId} +
    + + + + + + + Amount: ${item.requestedAmount} + + + + Created At: {new Date(item.createdAt).toLocaleString()} + + {item.expiredAt && ( + + + Expires At: {new Date(item.expiredAt).toLocaleString()} + + )} + + + + + {item.bankName && item.bankAccountHolder ? ( + + + + Bank: {item.bankName} + + + + Account Holder: {item.bankAccountHolder} + + + + Account Number: {item.bankAccountNumber} + + + + Branch: {item.branch} + + + ) : ( + item.walletAddress && ( + + + Wallet Address: {item.walletAddress} + + ) + )} +
    +
    + )} + /> + + {/* Pagination Component */} + + + {/* Modal for Transaction Details */} + + + ); +}; + +export default WithdrawList; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 6bcf0f1..27d9077 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -23,7 +23,7 @@ const User: React.FC = () => { const [selectedBankId, setSelectedBankId] = useState(null); // store selected bank ID const [kycStatus, setKycStatus] = useState(1); const { t } = useTranslation(); - const [api] = useAxiosInterceptor(); + const { api } = useAxiosInterceptor(); const fetchUserData = async () => { try { const response = await api.get('/v1.0/client/me'); @@ -127,16 +127,15 @@ const User: React.FC = () => { icon={} > {t( - `assets.${ - kycStatus === 1 - ? '未驗證' - : kycStatus === 2 - ? '驗證中' - : kycStatus === 3 - ? '已通過' - : kycStatus === 4 - ? '已拒絕' - : '需要重新上傳' + `assets.${kycStatus === 1 + ? '未驗證' + : kycStatus === 2 + ? '驗證中' + : kycStatus === 3 + ? '已通過' + : kycStatus === 4 + ? '已拒絕' + : '需要重新上傳' }`, )} diff --git a/src/services/walletApi.ts b/src/services/walletApi.ts index 1765006..ea47290 100644 --- a/src/services/walletApi.ts +++ b/src/services/walletApi.ts @@ -7,12 +7,10 @@ export const walletApi = { depositViaCryptoWallet: async () => { return api.post('/v1.0/client/deposit/crypto'); }, - withdrawToBank: async (amount: number, bankAccountId: number) => { - return api.post('/v1.0/client/transaction/withdraw', { amount, bankAccountId, transactionMethod: 1 }); - }, - withdrawToWalletAddress: async (amount: number, walletIdAddress: string) => { - return api.post('/v1.0/client/transaction/withdraw', { amount, walletIdAddress, transactionMethod: 2 }); + withdrawAsync: async (payload: any) => { + return api.post('/v1.0/client/transaction/withdraw', payload); }, + sendWithdrawVerificationEmail: async (payload: any) => { return api.post('/v1.0/client/transaction/withdraw/send-email', payload); }, @@ -22,6 +20,15 @@ export const walletApi = { getWithdrawOrderDetail: async (orderId: number) => { return api.get(`/v1.0/client/transaction/withdraw/${orderId}`); }, + createTransferOrder: async (payload: any) => { + return api.post('/v1.0/client/transaction/transfer', payload); + }, + sendTransferVerificationEmail: async (payload: any) => { + return api.post('/v1.0/client/transaction/transfer/send-email', payload); + }, + confirmTransferVerificationEmail: async (payload: any) => { + return api.post('/v1.0/client/transaction/transfer/confirm-email', payload); + }, confirmDepositOrder: async () => { return api.post('/v1.0/client/deposit/confirm'); }, diff --git a/src/store/useMarketDataStore.ts b/src/store/useMarketDataStore.ts index ee6fc4f..1cef428 100644 --- a/src/store/useMarketDataStore.ts +++ b/src/store/useMarketDataStore.ts @@ -40,7 +40,7 @@ export const useMarketDataHubStore = create((set, get) => ({ // market data subscription connection.on("BidAskUpdate", (message: MT4MarkDataDto) => { - console.log("BidAskUpdate: ", message); + // console.log("BidAskUpdate: ", message); set({ marketDataMessage: message }); }); diff --git a/src/utils/getStatusColor.ts b/src/utils/getStatusColor.ts new file mode 100644 index 0000000..abd131d --- /dev/null +++ b/src/utils/getStatusColor.ts @@ -0,0 +1,28 @@ +// Enums for transaction statuses +export enum OrderStatus { + Pending = 'Pending', + EmailConfirmationNeeded = 'EmailConfirmationNeeded', + EmailConfirmFailed = 'EmailConfirmFailed', + Processing = 'Processing', + Completed = 'Completed', + Failed = 'Failed', + Expired = 'Expired' +} + + + +// Unified status type for all transaction statuses +type TransactionStatus = OrderStatus; + +// Function to get tag color based on status +export const getStatusTagColor = (status: TransactionStatus): string => { + return { + [OrderStatus.Pending]: 'gold', + [OrderStatus.EmailConfirmationNeeded]: 'blue', + [OrderStatus.EmailConfirmFailed]: 'volcano', + [OrderStatus.Processing]: 'cyan', + [OrderStatus.Completed]: 'green', + [OrderStatus.Failed]: 'red', + [OrderStatus.Expired]: 'purple', + }[status] || 'default'; +}; From 66c761d6fcd784615a76a47970aa0bf90856bfcd Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Mon, 4 Nov 2024 10:36:29 +0700 Subject: [PATCH 101/118] process logo --- src/pages/AuthLayout/AuthLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index afa0c35..6e5ffb3 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -94,7 +94,7 @@ const AuthLayout = () => { >
    {isDark === true && ( - + { )} {isDark === false && ( - + Date: Mon, 4 Nov 2024 10:41:42 +0700 Subject: [PATCH 102/118] version --- .env.development | 2 +- .env.production | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.development b/.env.development index f8845ff..109e1ed 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,6 @@ PORT=3001 VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Liam_potai-10-31 +VITE_VERSION=Liam_potai-11-4 # VITE_HTTP_ROOT=https://demoApi.rushprofit.uk \ No newline at end of file diff --git a/.env.production b/.env.production index 8329efb..15115a4 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,4 @@ VITE_PUBLIC_API_URL=https://api.rushprofit.uk VITE_HTTP_ROOT=https://demoApi.rushprofit.uk VITE_PAYMENT_ROOT=http://localhost:5000 VITE_HUBS_URL=/hubs/ -VITE_VERSION=Liam_potai-10-31 +VITE_VERSION=Liam_potai-11-4 From e39ac8755fb224e95eb0eb9e3464bda881eda55f Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Tue, 5 Nov 2024 17:19:50 +0700 Subject: [PATCH 103/118] KYC & asset management link --- src/pages/AppRouter.tsx | 19 ++ src/pages/AuthLayout/AuthLayout.tsx | 22 -- .../user/components/KycIdentityModal.tsx | 2 +- .../user/components/KycIdentityResult.tsx | 28 +-- src/pages/user/components/KycWaitVerify.tsx | 57 +++++ src/pages/user/index.tsx | 232 ++++++++++++++---- src/store/useAccountStore.ts | 1 + src/store/useMarketDataStore.ts | 2 +- 8 files changed, 267 insertions(+), 96 deletions(-) create mode 100644 src/pages/user/components/KycWaitVerify.tsx diff --git a/src/pages/AppRouter.tsx b/src/pages/AppRouter.tsx index 26f6a54..be9552f 100644 --- a/src/pages/AppRouter.tsx +++ b/src/pages/AppRouter.tsx @@ -149,3 +149,22 @@ const AppRouter = () => { }; export default AppRouter; + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/AuthLayout/AuthLayout.tsx b/src/pages/AuthLayout/AuthLayout.tsx index 6e5ffb3..1f449ee 100644 --- a/src/pages/AuthLayout/AuthLayout.tsx +++ b/src/pages/AuthLayout/AuthLayout.tsx @@ -140,25 +140,3 @@ const AuthLayout = () => { }; export default AuthLayout; - -{ - /*
    -
    - - - -
    -
    - - 登入 - -
    -
    */ -} diff --git a/src/pages/user/components/KycIdentityModal.tsx b/src/pages/user/components/KycIdentityModal.tsx index a259186..e8a94b3 100644 --- a/src/pages/user/components/KycIdentityModal.tsx +++ b/src/pages/user/components/KycIdentityModal.tsx @@ -596,7 +596,7 @@ const KycIdentityModal: React.FunctionComponent = ({ ope - {banks.length == 0 && } + {/* {banks.length == 0 && } */}
    ); }; diff --git a/src/pages/user/components/KycIdentityResult.tsx b/src/pages/user/components/KycIdentityResult.tsx index 50e14ee..756befe 100644 --- a/src/pages/user/components/KycIdentityResult.tsx +++ b/src/pages/user/components/KycIdentityResult.tsx @@ -1,4 +1,4 @@ -import { FileSearchOutlined } from '@ant-design/icons'; +import { UserAddOutlined } from '@ant-design/icons'; import { Result, Button, Typography, message, notification } from 'antd'; import * as React from 'react'; import { useState } from 'react'; @@ -21,21 +21,21 @@ const KycIdentityResult: React.FunctionComponent = () = }); return; } - console.log('ok'); + // console.log('ok'); setOpenKycBankModal(true); }; return (
    } - title={t('layout.waitKycTitle')} + status='success' + icon={} + title={通過驗證} subTitle={
    - {t('layout.introduceWaitKyc1')} + 您已成功驗證身份!這是寶泰在驗證過程完成後的通知
    {t('layout.introduceWaitKyc2')} - {t('layout.colorTextIntroduce')} {t('layout.introduceWaitKyc3')} + {t('layout.colorTextIntroduce')} {t('layout.introduceWaitKyc3')}
    } extra={[ @@ -49,19 +49,7 @@ const KycIdentityResult: React.FunctionComponent = () = {t('layout.openKYCbankButton')} , ]} - > - - - {t('layout.sendMoneyWhenWaitKYC')}{' '} - window.scrollTo({ top: 0, behavior: 'smooth' })} - > - {t('layout.goSendMoney')} > - - - -
    + > setOpenKycBankModal(false)} diff --git a/src/pages/user/components/KycWaitVerify.tsx b/src/pages/user/components/KycWaitVerify.tsx new file mode 100644 index 0000000..e75f16b --- /dev/null +++ b/src/pages/user/components/KycWaitVerify.tsx @@ -0,0 +1,57 @@ +import { FileSearchOutlined } from '@ant-design/icons'; +import { Result, Button, Typography, message, notification } from 'antd'; +import * as React from 'react'; +import { useState } from 'react'; +import { Link } from 'react-router-dom'; +import KycBankModal from './KycBankModal'; +import { useAccountStore } from '@/store/useAccountStore'; +import { t } from 'i18next'; +import DownloadMT4 from '@/components/DownloadMT4'; + +interface IKycWaitVerifyProps {} + +const KycWaitVerify: React.FunctionComponent = () => { + const [OpenKycBankModal, setOpenKycBankModal] = useState(false); + // const kycStatus = useAccountStore((state) => state.kyc?.status); + + return ( +
    + } + title={t('layout.waitKycTitle')} + subTitle={ +
    +

    + 我們會盡快為您驗證,驗證完成後您將收到通知 +

    + 等候期間 不妨先 + 存入資金 !(限額2,000.00美元) +

    +

    +
    + } + extra={[ + , + + + , + ]} + > + + + 驗證期間,歡迎您返回首頁繼續瀏覽! + window.scrollTo({ top: 0, behavior: 'smooth' })} + > + 寶泰 > + + + +
    +
    + ); +}; + +export default KycWaitVerify; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 02ae3b7..fc3bbc1 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,6 +1,6 @@ -import { CheckOutlined, UserOutlined } from '@ant-design/icons'; +import { CloseOutlined, CheckCircleOutlined, ReloadOutlined, UserOutlined, CheckOutlined } from '@ant-design/icons'; import { ProCard } from '@ant-design/pro-components'; -import { Descriptions, Button, Collapse, Space, Tag, Divider, DescriptionsProps } from 'antd'; +import { Descriptions, Button, Collapse, Space, Tag, Divider, DescriptionsProps, Card, Flex, Avatar } from 'antd'; import React, { useState, useEffect } from 'react'; import logo from '../../assets/PTFintech_logo.png'; import KYCIdentityModal from './components/KycIdentityModal'; @@ -10,6 +10,10 @@ import { useTranslation } from 'react-i18next'; // import { bankAPI } from '@/services/bankAPI'; import DeleteBank from './components/ChangeBank'; import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; +import { Title } from 'chart.js'; +import ProtectBannerImg_1 from '@/assets/ProtectBanner_img_1.png'; +import KycIdentityResult from './components/KycIdentityResult'; +import KycWaitVerify from './components/KycWaitVerify'; const User: React.FC = () => { const [openUpdateCountryForm, setOpenUpdateCountryForm] = useState(false); @@ -93,7 +97,39 @@ const User: React.FC = () => { const response = await bankAPI.myBankAccount(); const data = response.data; - setBankInfoChina(data); // store bank data with id + // Chuyển đổi dữ liệu bank thành định dạng mà Descriptions cần + const bankDescriptions = data.map((bank) => ({ + key: bank.bankId, + label: '銀行資訊', + children: [ + { key: '銀行戶名', label: '銀行戶名', children: bank.accountHolder || '未提供' }, + { key: '銀行帳號', label: '銀行帳號', children: bank.accountNumber || '未提供' }, + { key: '銀行名稱', label: '銀行名稱', children: bank.bankName || '未提供' }, + ], + extra: ( + <> + + + + ), + })); + + setBankInfoChina(bankDescriptions); // Lưu lại cấu trúc đã chuyển đổi vào state } catch (error) { console.error('Error fetching Bank data:', error); } @@ -109,9 +145,9 @@ const User: React.FC = () => { switch (status) { case 1: case 5: - return 'warning'; + return 'error'; case 2: - return 'processing'; + return 'warning'; case 3: return 'success'; case 4: @@ -124,7 +160,15 @@ const User: React.FC = () => { const kycStatusTag = ( } + icon={ + kycStatus === 1 ? ( + + ) : kycStatus === 2 || kycStatus === 3 ? ( + + ) : kycStatus === 5 ? ( + + ) : null // 4 sẽ không có icon + } > {t( `assets.${ @@ -153,55 +197,138 @@ const User: React.FC = () => { ), children: ( <> - - - {bankInfoChina.map((bank) => ( - - - + // ), */} + + {kycStatus === 1 && ( +
    + +
    +
    +
    歡迎登入 寶泰!
    +
    {t('assets.通過實名驗證')}
    +
    + + +
    {t('assets.通過')}
    + + } + /> +
    {t('assets.入金')}
    +
    + + } + /> +
    {t('assets.出金')}
    +
    + + } + /> +
    交易
    +
    +
    + + +
    {t('assets.未通過')}
    + + + } + /> +

    入金(限額 2,000.00美元)

    +
    + + } + /> +

    {t('assets.出金')}

    +
    + + } + /> +

    交易

    +
    +
    +
    +
    +
    +
    + Protect Banner 1 +
    +
    + +
    + )} + + {kycStatus === 2 && } + + {kycStatus === 3 && ( + <> + + + {bankInfoChina.length === 0 ? ( + + ) : ( + bankInfoChina.map((bank) => ( + { - setSelectedBankId(bank.bankId); // set the selected bankId - console.log(selectedBankId); - setOpenDeleteBank(true); - }} - > - 刪除 - - - } - /> - ))} + items={bank.children} + extra={bank.extra} + /> + )) + )} + + )} ), - extra: (kycStatus === 1 || kycStatus === 5) && ( - - ), }, ]; @@ -229,6 +356,7 @@ const User: React.FC = () => { /> diff --git a/src/store/useAccountStore.ts b/src/store/useAccountStore.ts index edebc89..0da29d5 100644 --- a/src/store/useAccountStore.ts +++ b/src/store/useAccountStore.ts @@ -207,3 +207,4 @@ const useAccountStore = create((set, get) => ({ })); export { useAccountStore }; + diff --git a/src/store/useMarketDataStore.ts b/src/store/useMarketDataStore.ts index 2b5e811..1fe2b64 100644 --- a/src/store/useMarketDataStore.ts +++ b/src/store/useMarketDataStore.ts @@ -40,7 +40,7 @@ export const useMarketDataHubStore = create((set, get) => ({ // market data subscription connection.on('BidAskUpdate', (message: MT4MarkDataDto) => { - console.log('BidAskUpdate: ', message); + // console.log('BidAskUpdate: ', message); //set({ marketDataMessage: message }); }); From 70ffc256d7516b5fa0f20dc052cf8d4df1692d0f Mon Sep 17 00:00:00 2001 From: Quoc Nghi Tr Date: Tue, 5 Nov 2024 17:26:16 +0700 Subject: [PATCH 104/118] loop price --- package.json | 1 + src/assets/GBPUSD.png | Bin 0 -> 3414 bytes src/assets/NZDUSD.png | Bin 0 -> 3488 bytes src/assets/SILVER.png | Bin 0 -> 1793 bytes src/assets/USDCAD.png | Bin 0 -> 2956 bytes src/assets/USDJPY.png | Bin 0 -> 2992 bytes src/assets/sliver.jfif | Bin 0 -> 2939 bytes src/components/LoopBanner.tsx | 147 ++++++++++++++++++++++++++----- src/components/ProtectBanner.tsx | 6 +- src/store/hubs/types.ts | 8 +- src/store/useMarketDataStore.ts | 7 +- yarn.lock | 5 ++ 12 files changed, 140 insertions(+), 34 deletions(-) create mode 100644 src/assets/GBPUSD.png create mode 100644 src/assets/NZDUSD.png create mode 100644 src/assets/SILVER.png create mode 100644 src/assets/USDCAD.png create mode 100644 src/assets/USDJPY.png create mode 100644 src/assets/sliver.jfif diff --git a/package.json b/package.json index 6d7a4b7..918d01d 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "zustand": "^4.5.2" }, "devDependencies": { + "@types/lodash": "^4.17.13", "@types/node": "^20.12.7", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", diff --git a/src/assets/GBPUSD.png b/src/assets/GBPUSD.png new file mode 100644 index 0000000000000000000000000000000000000000..188867e4af89f205a19defd30e75ae92e67124c0 GIT binary patch literal 3414 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 literal 0 HcmV?d00001 diff --git a/src/assets/NZDUSD.png b/src/assets/NZDUSD.png new file mode 100644 index 0000000000000000000000000000000000000000..380ef0591a92782b250784576f1b954677574e5e GIT binary patch literal 3488 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 O0000A(2|}NM@C1b?AUpx-6TnsPI%Ikn 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 literal 0 HcmV?d00001 diff --git a/src/components/LoopBanner.tsx b/src/components/LoopBanner.tsx index a07a906..8c1baaf 100644 --- a/src/components/LoopBanner.tsx +++ b/src/components/LoopBanner.tsx @@ -1,36 +1,135 @@ -import * as React from 'react'; -import { Alert, Avatar, Space, Statistic, Divider } from 'antd'; +import { useEffect, useRef, useState } from 'react'; +import { Alert, Avatar, Space, Divider, Spin } from 'antd'; import Marquee from 'react-fast-marquee'; +import { useMarketDataHubStore } from '@/store/useMarketDataStore'; import Gold from '../assets/GOLD.png'; +import SilverIcon from '../assets/SILVER.png'; +import USDCAD from '../assets/USDCAD.png'; +import GBPUSD from '../assets/GBPUSD.png'; +import USDJPY from '../assets/USDJPY.png'; +import NZDUSD from '../assets/NZDUSD.png'; -interface ILoopBannerProps {} +type MarketData = { + bid: number; + ask: number; + lastTime: Date; + percentageChangeBid: number; + percentageChangeAsk: number; + symbol: string; +}; + +const iconMap: Record = { + 'XAGUSD.P': SilverIcon, + 'XAUUSD.P': Gold, + 'USDCAD.P': USDCAD, + 'GBPUSD.P': GBPUSD, + 'USDJPY.P': USDJPY, + 'NZDUSD.P': NZDUSD, +}; + +const LoopBanner = () => { + const { marketDataMessage, connectHub, disconnectHub } = useMarketDataHubStore(); + const [marketData, setMarketData] = useState>({}); + const latestDataRef = useRef>({}); + + // Update latestDataRef on each new market data message + useEffect(() => { + if (!marketDataMessage) return; + + const { bid, ask, lastTime, symbol } = marketDataMessage; + const numericBid = parseFloat(bid); + const numericAsk = parseFloat(ask); + + if (isNaN(numericBid) || numericBid <= 0 || isNaN(numericAsk) || numericAsk <= 0 || !symbol) return; + + latestDataRef.current[symbol] = { + bid: numericBid, + ask: numericAsk, + lastTime, + percentageChangeBid: 0, + percentageChangeAsk: 0, + symbol, + }; + }, [marketDataMessage]); -const LoopBanner: React.FunctionComponent = (props) => { - const {} = props || {}; + // Update marketData state every 5 seconds + useEffect(() => { + const intervalId = setInterval(() => { + setMarketData((prevMarketData) => { + const newMarketData: Record = {}; + + Object.keys(latestDataRef.current).forEach((symbol) => { + const currentData = latestDataRef.current[symbol]; + const previousData = prevMarketData[symbol]; + + const percentageChangeBid = previousData ? ((currentData.bid - previousData.bid) / previousData.bid) * 100 : 0; + const percentageChangeAsk = previousData ? ((currentData.ask - previousData.ask) / previousData.ask) * 100 : 0; + + newMarketData[symbol] = { + ...currentData, + percentageChangeBid, + percentageChangeAsk, + }; + }); + + return Object.keys(newMarketData).length > 0 ? newMarketData : prevMarketData; + }); + }, 5000); + + return () => clearInterval(intervalId); + }, []); + + useEffect(() => { + connectHub(); + return () => { + disconnectHub(); + }; + }, [connectHub, disconnectHub]); return ( - - - - ↑ 0.04 %
    } - /> -
    - - - + marketData && Object.keys(marketData).length > 0 ? ( + + {Object.entries(marketData).map(([symbol, data]) => { + const arrowDirectionBid = data.percentageChangeBid >= 0 ? '+' : '-'; + const colorBid = data.percentageChangeBid >= 0 ? 'text-green-500' : 'text-red-500'; + const arrowDirectionAsk = data.percentageChangeAsk >= 0 ? '+' : '-'; + const colorAsk = data.percentageChangeAsk >= 0 ? 'text-green-500' : 'text-red-500'; + const iconSrc = iconMap[symbol] || Gold; + const nameDisplay = `${symbol}`; + + return ( + + +
    +
    {nameDisplay}
    +
    +
    + Bid: {data.bid} + + ({arrowDirectionBid}{Math.abs(data.percentageChangeBid).toFixed(2)}%) + +
    +
    + Ask: {data.ask} + + ({arrowDirectionAsk}{Math.abs(data.percentageChangeAsk).toFixed(2)}%) + +
    +
    +
    + +
    + ); + })} +
    + ) : ( +
    + +
    + ) } /> ); diff --git a/src/components/ProtectBanner.tsx b/src/components/ProtectBanner.tsx index 5b3cba9..cf8c747 100644 --- a/src/components/ProtectBanner.tsx +++ b/src/components/ProtectBanner.tsx @@ -45,9 +45,9 @@ const ProtectBanner: React.FunctionComponent = () => { fetchKYCData(); }, []); - useEffect(() => { - console.log(kycStatus); - }); + // useEffect(() => { + // console.log(kycStatus); + // }); return (
    {/* 尚未實名驗證 */} diff --git a/src/store/hubs/types.ts b/src/store/hubs/types.ts index 8dcf3d1..9049c19 100644 --- a/src/store/hubs/types.ts +++ b/src/store/hubs/types.ts @@ -62,10 +62,10 @@ export interface NotifyMT4TransferDto extends NotifyMT4TransferToClientDto { OperatorName: string; } export interface MT4MarkDataDto { - Symbol: string; // The symbol of the market data (e.g., "EUR/USD") - Bid: string; // The bid price for the symbol (e.g., "1.2345") - Ask: string; // The ask price for the symbol (e.g., "1.2347") - LastTime: Date; // The last time the market data was updated + symbol: string; // The symbol of the market data (e.g., "EUR/USD") + bid: string; // The bid price for the symbol (e.g., "1.2345") + ask: string; // The ask price for the symbol (e.g., "1.2347") + lastTime: Date; // The last time the market data was updated } export interface NotifyTradeDto { Login: number; // MT4 account diff --git a/src/store/useMarketDataStore.ts b/src/store/useMarketDataStore.ts index ee6fc4f..516891b 100644 --- a/src/store/useMarketDataStore.ts +++ b/src/store/useMarketDataStore.ts @@ -1,7 +1,6 @@ import { create } from "zustand"; import * as signalR from "@microsoft/signalr"; import { MT4MarkDataDto } from "./hubs/types"; - const url = "https://demoApi.rushprofit.uk/hubs/marketData"; interface MarketDataHubState { @@ -17,6 +16,7 @@ export const useMarketDataHubStore = create((set, get) => ({ hubConnection: null, marketDataMessage: null, + connectHub: () => { const { shouldInitConnection } = get(); if (!shouldInitConnection) { @@ -26,6 +26,7 @@ export const useMarketDataHubStore = create((set, get) => ({ const connection = new signalR.HubConnectionBuilder() .withUrl(url, { accessTokenFactory: () => localStorage.getItem("token") || "", + }) .withAutomaticReconnect() .build(); @@ -33,14 +34,14 @@ export const useMarketDataHubStore = create((set, get) => ({ connection .start() .then(() => { - console.log("Connection started!"); + console.log("Connection started!Aa"); set({ hubConnection: connection }); }) .catch((err) => console.log("Error while establishing connection :( ", err)); // market data subscription connection.on("BidAskUpdate", (message: MT4MarkDataDto) => { - console.log("BidAskUpdate: ", message); + // console.log("BidAskUpdate: ", message); set({ marketDataMessage: message }); }); diff --git a/yarn.lock b/yarn.lock index 7f08360..3ff3968 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1203,6 +1203,11 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/lodash@^4.17.13": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + "@types/node@^20.12.7": version "20.16.11" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.11.tgz#9b544c3e716b1577ac12e70f9145193f32750b33" From 00f90185ff92a6b395c171ea82406d37e108c97c Mon Sep 17 00:00:00 2001 From: dragonfly9999 Date: Thu, 7 Nov 2024 11:32:10 +0700 Subject: [PATCH 105/118] related merge --- package.json | 2 + src/I18n/ch/components/auth.ts | 2 +- src/assets/errorKYCimage.png | Bin 0 -> 86490 bytes src/components/AccountChart.tsx | 253 ++++++++++++++++--------------- src/components/SelectAccount.tsx | 64 +++++--- src/pages/account/index.tsx | 24 +-- src/pages/user/index.tsx | 186 ++++++++++++++++++++--- yarn.lock | 17 +++ 8 files changed, 371 insertions(+), 177 deletions(-) create mode 100644 src/assets/errorKYCimage.png diff --git a/package.json b/package.json index 6d7a4b7..c1f08a5 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,14 @@ "@tanstack/react-query-devtools": "^5.32.0", "antd": "^5.16.5", "axios": "^1.6.8", + "chart.js": "^4.4.6", "dayjs": "^1.11.11", "formik": "^2.4.6", "i18next": "^23.11.5", "localforage": "^1.10.0", "numbro": "^2.5.0", "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", "react-fast-marquee": "^1.6.4", "react-i18next": "^14.1.2", diff --git a/src/I18n/ch/components/auth.ts b/src/I18n/ch/components/auth.ts index 209242e..2acc5aa 100644 --- a/src/I18n/ch/components/auth.ts +++ b/src/I18n/ch/components/auth.ts @@ -78,7 +78,7 @@ const auth = { image2Label: '第一證件 反面', image3Label: '第二證件 正面', image4Label: '第二證件 反面', - image5Label: '本人手持證件照片', + image5Label: '持證自拍', image6Label: '居住地证明', imageAllTitle: '上傳', titleStep3: '身份信息', diff --git a/src/assets/errorKYCimage.png b/src/assets/errorKYCimage.png new file mode 100644 index 0000000000000000000000000000000000000000..bbba761cb0936be608de8b52595033ed630c1a38 GIT binary patch literal 86490 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�hy_$O$xQp#OqoJ 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 literal 0 HcmV?d00001 diff --git a/src/components/AccountChart.tsx b/src/components/AccountChart.tsx index 0ba0eee..69cf3ad 100644 --- a/src/components/AccountChart.tsx +++ b/src/components/AccountChart.tsx @@ -1,10 +1,13 @@ import * as React from 'react'; -import { Pie } from '@ant-design/charts'; -import { Button, Col, List, Row, Space } from 'antd'; -import { CaretLeftOutlined, CaretRightOutlined } from '@ant-design/icons'; +import { Doughnut } from 'react-chartjs-2'; +import { Button, List, Space, Typography, Empty } from 'antd'; import { Link } from 'react-router-dom'; import SelectAccount from './SelectAccount'; import { useTranslation } from 'react-i18next'; +import { useAccountStore } from '@/store/useAccountStore'; +import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js'; + +ChartJS.register(ArcElement, Tooltip, Legend); interface IAccountChartProps { onClose?: () => void; @@ -13,137 +16,145 @@ interface IAccountChartProps { const AccountChart: React.FunctionComponent = (props) => { const { t } = useTranslation(); const { onClose } = props || {}; + const { MT4Accounts } = useAccountStore((state) => state); - const handleClick = () => { - if (onClose) { - onClose(); + const [selectedAccount, setSelectedAccount] = React.useState(); + const [noDataMessage, setNoDataMessage] = React.useState(); + const [balances, setBalances] = React.useState([0, 0, 0, 0]); + + React.useEffect(() => { + // Nếu có tài khoản trong MT4Accounts thì thiết lập tài khoản được chọn + if (MT4Accounts.length > 0) { + setSelectedAccount((prevAccount) => prevAccount || MT4Accounts[0].login); + } else { + setNoDataMessage('Tạm thời không có dữ liệu'); } + + // Lấy dữ liệu tài khoản dựa trên tài khoản được chọn + const accountData = MT4Accounts.find((account) => account.login === selectedAccount) || {}; + + setBalances([ + accountData?.balance || 0, + accountData?.equity || 0, + accountData?.margin || 0, + accountData?.marginFree || 0, + ]); + }, [selectedAccount, MT4Accounts]); + + console.log(balances); + + const handleAccountChange = (value: string) => { + setSelectedAccount(value); }; - const data = [ - { - type: '可用', - value: 27, - }, - { - type: '已用', - value: 25, - }, - { - type: '盈虧', - value: 18, - }, - ]; - const config = { - forceFit: true, - radius: 1, - innerRadius: 0.9, - padding: 'auto', - data, - angleField: 'value', - colorField: 'type', - statistic: { visible: true }, - legend: { - color: { - title: false, - position: 'bottom', - rowPadding: 5, + + const options = { + responsive: true, + plugins: { + legend: { + position: 'bottom' as const, + labels: { + color: 'white', + usePointStyle: true, + pointStyle: 'circle', + padding: 20, + }, + }, + tooltip: { + enabled: true, }, }, - annotations: [ + }; + + const data = { + labels: ['結餘 ', '淨值 ', '預付款 ', '可用預付款 '], + datasets: [ { - type: 'text', - style: { - text: `價值\n${'549,840.16'}`, - x: '50%', - y: '50%', - textAlign: 'center', - fontSize: 30, - fontStyle: 'bold', - }, + data: balances, + backgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0'], + hoverBackgroundColor: ['#FF6384', '#36A2EB', '#FFCE56', '#4BC0C0'], }, ], }; - + const dataText = [ - { - title: '結餘', - value: '$ 0.00', - }, - { - title: '淨值', - value: '$ 0.00', - }, - { - title: '預付款 ', - value: '$ 0.00', - }, - { - title: '可用預付款', - value: '$ 0.00', - }, - { - title: '信用', - value: '$ 0.00', - }, + { title: '結餘 (Balance)', value: `$ ${balances[0].toFixed(2)}` }, + { title: '淨值 (Equity)', value: `$ ${balances[1].toFixed(2)}` }, + { title: '預付款 (Margin)', value: `$ ${balances[2].toFixed(2)}` }, + { title: '可用預付款 (Margin Free)', value: `$ ${balances[3].toFixed(2)}` }, ]; + + const handleClick = () => { + if (onClose) { + onClose(); + } + }; + + const chartContainerStyle = { + width: '250px', + height: '250px', + margin: '10px auto 30px auto ', + }; + + const displayEmpty = MT4Accounts.length === 0 || balances.every((val) => val === 0); + return ( -
    - - - - - - - - - - } - /> -
    + + + } + renderItem={(item) => ( + + +
    {item.value}
    +
    + )} + footer={ + !displayEmpty && ( + + + + + + + + + ) + } + /> +
    + ); }; diff --git a/src/components/SelectAccount.tsx b/src/components/SelectAccount.tsx index 9bd5fd3..7a16acf 100644 --- a/src/components/SelectAccount.tsx +++ b/src/components/SelectAccount.tsx @@ -4,22 +4,28 @@ import { Button, Divider, Modal, Select } from 'antd'; import AddAccount from './AddAccount'; import { useTranslation } from 'react-i18next'; import { useAccountStore } from '@/store/useAccountStore'; -import { useAxiosInterceptor } from '@/hooks/useAxiosInterceptor'; interface ISelectAccountProps { - value?: string; // The value prop for the form - onChange?: (value: string) => void; // The onChange prop to update the form's state + value?: string; + onChange?: (value: string) => void; includeMT4?: boolean; + includeWallet?: boolean; + exclude?: string; } -const SelectAccount: React.FunctionComponent = ({ value, onChange, includeMT4 = true }) => { +const SelectAccount: React.FunctionComponent = ({ + value, + onChange, + includeMT4 = true, + includeWallet = true, + exclude, +}) => { const { t } = useTranslation(); const [showAddAccount, setShowAddAccount] = useState(false); const { MT4Accounts, fetchMT4Accounts, fetchMe, me } = useAccountStore(); - const { api } = useAxiosInterceptor(); useEffect(() => { - fetchMT4Accounts(); // Fetch MT4 accounts when the component mounts + fetchMT4Accounts(); fetchMe(); }, []); @@ -41,28 +47,40 @@ const SelectAccount: React.FunctionComponent = ({ value, on })); }; - let options = [ - { - label: {t('report.寶泰帳戶')}, - title: '寶泰帳戶', - options: [{ label: {`寶泰帳戶-${me?.email}`}, value: 'WalletDeposit' }], - }, - ]; - if (includeMT4) { - options.push({ - label: MT4 帳戶, - title: 'MT4 帳戶', - options: getMT4Options(), - }); - } + const [options, setOptions] = useState([]); + + const updateOptions = () => { + let newOptions = []; + if (includeWallet) { + newOptions.push({ + label: {t('report.寶泰帳戶')}, + title: '寶泰帳戶', + options: [{ label: {`寶泰帳戶-${me?.email}`}, value: `wallet_${me?.id}` }], + }); + } + if (includeMT4) { + const mt4Options = getMT4Options().filter((option) => option.value !== exclude); + newOptions.push({ + label: MT4 帳戶, + title: 'MT4 帳戶', + options: mt4Options, + }); + } + setOptions(newOptions); + }; + + useEffect(() => { + updateOptions(); + }, [exclude, MT4Accounts, me]); + return (