add pdf receipt demo
This commit is contained in:
parent
e7857c904d
commit
7d022bc4fa
@ -18,9 +18,12 @@
|
||||
"@emotion/react": "^11.11.4",
|
||||
"@emotion/styled": "^11.11.5",
|
||||
"@mui/system": "^5.15.15",
|
||||
"@types/file-saver": "^2.0.7",
|
||||
"ahooks": "^3.7.11",
|
||||
"clsx": "^2.1.1",
|
||||
"i18next": "^23.11.4",
|
||||
"jspdf": "^2.5.1",
|
||||
"jspdf-autotable": "^3.8.2",
|
||||
"less": "^4.2.0",
|
||||
"react": "^18.2.0",
|
||||
"react-countup": "^6.5.3",
|
||||
@ -40,6 +43,7 @@
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.6",
|
||||
"file-saver": "^2.0.5",
|
||||
"typescript": "^5.2.2",
|
||||
"vite": "^5.2.0"
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {Avatar, Dropdown, Layout, Nav} from "@douyinfe/semi-ui"
|
||||
import React from "react";
|
||||
|
||||
import {AppLogo} from "@/assets/AppLogo.tsx";
|
||||
import AppLogo from "@/assets/AppLogo.tsx";
|
||||
|
||||
const {Header, Footer, Content} = Layout;
|
||||
|
||||
|
@ -46,7 +46,8 @@ export const AuthProvider = ({children}: { children: React.ReactNode }) => {
|
||||
setTimeout(() => {
|
||||
dispatch({
|
||||
payload: {
|
||||
isInitialized: true
|
||||
isInitialized: true,
|
||||
isLoggedIn: true
|
||||
}
|
||||
})
|
||||
}, 300)
|
||||
|
@ -1,9 +1,10 @@
|
||||
import useLocalStorage from "@/hooks/useLocalStorage";
|
||||
import React, {createContext} from "react";
|
||||
import React, {createContext, useEffect} from "react";
|
||||
import {useTranslation} from "react-i18next";
|
||||
|
||||
const config: ConfigProps = {
|
||||
fontFamily: `'Public Sans', sans-serif`,
|
||||
i18n: 'en',
|
||||
i18n: 'en-US',
|
||||
appName: "Payment System",
|
||||
};
|
||||
|
||||
@ -11,9 +12,9 @@ const initialState: CustomizationProps = {
|
||||
...config,
|
||||
onChangeContainer: () => {
|
||||
},
|
||||
onChangeLocalization: (_lang: I18n) => {
|
||||
onChangeLocalization: (_: I18n) => {
|
||||
},
|
||||
onChangeFontFamily: (_fontFamily: string) => {
|
||||
onChangeFontFamily: (_: string) => {
|
||||
}
|
||||
};
|
||||
|
||||
@ -22,6 +23,7 @@ const initialState: CustomizationProps = {
|
||||
const ConfigContext = createContext(initialState);
|
||||
export const ConfigProvider = ({children}: { children: React.ReactNode }) => {
|
||||
const [config, setConfig] = useLocalStorage('app-payment-config', initialState);
|
||||
const {i18n} = useTranslation()
|
||||
// 改变语言
|
||||
const onChangeLocalization = (lang: I18n) => {
|
||||
setConfig({
|
||||
@ -33,6 +35,13 @@ export const ConfigProvider = ({children}: { children: React.ReactNode }) => {
|
||||
const onChangeFontFamily = (fontFamily: string) => {
|
||||
setConfig({...config, fontFamily})
|
||||
}
|
||||
useEffect(() => {
|
||||
// init localization use LocalStorage
|
||||
if (config.i18n) {
|
||||
i18n.changeLanguage(config.i18n).then(() => console.log('init localization use', config.i18n))
|
||||
}
|
||||
}, [])
|
||||
|
||||
return (
|
||||
<ConfigContext.Provider value={{
|
||||
...config, onChangeFontFamily, onChangeLocalization
|
||||
|
@ -6,11 +6,11 @@ import LANG_EN from "./translations/en.json"
|
||||
|
||||
|
||||
i18next.use(initReactI18next).init({
|
||||
debug: true,
|
||||
// debug: true,
|
||||
fallbackLng: 'en-US',
|
||||
resources: {
|
||||
'en-US': {translation: LANG_EN},
|
||||
'zh-CN': {translation: LANG_SC},
|
||||
'zh-HK': {translation: LANG_TC},
|
||||
},
|
||||
}).then(r =>console.log('init i18n success',r));
|
||||
});//.then(r =>console.log('init i18n success',r));
|
@ -35,7 +35,10 @@ export const I18nSwitcher = () => {
|
||||
</Dropdown.Menu>
|
||||
}
|
||||
>
|
||||
<Button><Space align={'center'} spacing={2}><IconLanguage/> {LocaleList.find(s => s.key == locale)?.text}
|
||||
</Space></Button>
|
||||
<Button theme="borderless">
|
||||
<Space align={'center'} spacing={2} style={{marginTop:2}}>
|
||||
<IconLanguage/> {LocaleList.find(s => s.key == locale)?.text}
|
||||
</Space>
|
||||
</Button>
|
||||
</Dropdown>
|
||||
}
|
@ -1,4 +1,11 @@
|
||||
{
|
||||
"error": {
|
||||
"go_back": "Go Back",
|
||||
"go_home": "Go Home"
|
||||
},
|
||||
"layout": {
|
||||
"logout": "Logout"
|
||||
},
|
||||
"login": {
|
||||
"submit": "LOGIN WITH SSO",
|
||||
"title": "Login"
|
||||
|
@ -1,4 +1,11 @@
|
||||
{
|
||||
"error": {
|
||||
"go_back": "返回上一页",
|
||||
"go_home": "回到首页"
|
||||
},
|
||||
"layout": {
|
||||
"logout": "注销登录"
|
||||
},
|
||||
"login": {
|
||||
"submit": "使用SSO登录",
|
||||
"title": "登录"
|
||||
|
@ -1,4 +1,11 @@
|
||||
{
|
||||
"error": {
|
||||
"go_back": "返回上一页",
|
||||
"go_home": "回到首页"
|
||||
},
|
||||
"layout": {
|
||||
"logout": "注销登录"
|
||||
},
|
||||
"login": {
|
||||
"submit": "使用SSO登入",
|
||||
"title": "登入"
|
||||
|
@ -3,6 +3,7 @@ import {useTranslation} from 'react-i18next';
|
||||
import useConfig from "@/hooks/useConfig.ts";
|
||||
import styled from "@emotion/styled";
|
||||
import AppLogo from "@/assets/AppLogo";
|
||||
import {useNavigate} from "react-router-dom";
|
||||
|
||||
|
||||
const LoginContainer = styled.div({
|
||||
@ -21,9 +22,14 @@ const SubmitContainer = styled.div({
|
||||
margin: '70px auto 20px'
|
||||
})
|
||||
const AuthLogin = () => {
|
||||
const navigate = useNavigate();
|
||||
const {t} = useTranslation();
|
||||
const {appName} = useConfig()
|
||||
|
||||
const showDashboard = ()=> {
|
||||
navigate('/dashboard')
|
||||
}
|
||||
|
||||
return (<LoginContainer>
|
||||
<LogoContainer>
|
||||
<Space spacing={10} vertical>
|
||||
@ -32,7 +38,7 @@ const AuthLogin = () => {
|
||||
</Space>
|
||||
</LogoContainer>
|
||||
<SubmitContainer>
|
||||
<Button theme='solid' type='primary' block>{t('login.submit')}</Button>
|
||||
<Button theme='solid' type='primary' block onClick={showDashboard}>{t('login.submit')}</Button>
|
||||
</SubmitContainer>
|
||||
</LoginContainer>)
|
||||
}
|
||||
|
@ -1,6 +0,0 @@
|
||||
export default function Index(){
|
||||
return (<div>
|
||||
<h1>Index</h1>
|
||||
|
||||
</div>)
|
||||
}
|
99
src/pages/manual/index.tsx
Normal file
99
src/pages/manual/index.tsx
Normal file
@ -0,0 +1,99 @@
|
||||
import {Button} from "@douyinfe/semi-ui";
|
||||
import JsPDF from "jspdf";
|
||||
import autoTable from 'jspdf-autotable'
|
||||
import {useEffect, useState} from "react";
|
||||
import {saveAs} from "file-saver";
|
||||
|
||||
function drawItem(doc: JsPDF, item: {
|
||||
title: string;
|
||||
content?: string
|
||||
}, y: number, align: 'left' | 'right' = 'left', fontSize: number = 14) {
|
||||
doc.setFontSize(fontSize);
|
||||
// const width = doc.internal.pageSize.getWidth();
|
||||
doc.text(item.title, align == 'left' ? 20 : 180, y);
|
||||
if(item.content && item.content.length > 0) doc.text(item.content, align == 'left' ? 65 : 230, y);
|
||||
}
|
||||
|
||||
export default function Index() {
|
||||
|
||||
// doc.save('a4.pdf');
|
||||
const [viewUrl, setViewUrl] = useState('');
|
||||
useEffect(() => {
|
||||
const doc = new JsPDF({
|
||||
orientation: 'landscape',
|
||||
format:'a4'
|
||||
});
|
||||
console.log(doc.getFontList())
|
||||
// const width = doc.internal.pageSize.getWidth();
|
||||
// const height = doc.internal.pageSize.getHeight();
|
||||
doc.setFont('Helvetica','normal','bold');
|
||||
doc.setFontSize(20);
|
||||
doc.text('ACKNOWLEDGEMENT RECEIPT', 100, 20, {});
|
||||
|
||||
doc.setFont('Helvetica','normal','normal');
|
||||
drawItem(doc, {title: 'Student Name:', content: 'BAI ZHONGHONG'}, 40)
|
||||
drawItem(doc, {title: 'Reference Number:', content: '202402655'}, 40, "right")
|
||||
drawItem(doc, {title: 'Student Number:', content: '236171275'}, 48)
|
||||
drawItem(doc, {title: 'Print Date:', content: '2024-05-19'}, 48, "right")
|
||||
|
||||
drawItem(doc, {
|
||||
title: 'Programme:',
|
||||
content: 'MASTER OF SOCIAL SCIENCES IN INTERNATIONAL RELATIONS FOR \nBELT AND ROAD COUNTRIES'
|
||||
}, 56)
|
||||
drawItem(doc, {title: 'Mode of Study:', content: 'FULL-TIME'}, 70)
|
||||
// draw table
|
||||
autoTable(doc, {
|
||||
startY: 80,
|
||||
theme: 'grid',
|
||||
|
||||
margin: { top: 37,left:20,right:20 },
|
||||
styles: {
|
||||
fontSize: 13,
|
||||
fillColor: [255, 255, 255],
|
||||
textColor: [0, 0, 0],
|
||||
lineColor: [0, 0, 0],
|
||||
lineWidth: 0.2,
|
||||
minCellHeight:10,
|
||||
valign: 'middle'
|
||||
},
|
||||
headStyles: {
|
||||
fontSize: 15,
|
||||
},
|
||||
head: [['No.', 'Transaction Date', 'Payment Method', 'HK$']],
|
||||
body: [
|
||||
['#87254', '2024-05-13', 'DOCUMENT FEE', 'AsiaPay(Wechat Pay)', '100.00'],
|
||||
['#87255', '2024-05-13', 'VISA FEE', 'AsiaPay(Wechat Pay)', '50.00'],
|
||||
[{
|
||||
colSpan: 3,
|
||||
content: 'TOTAL:',
|
||||
styles: {valign: 'middle', halign: 'right'},
|
||||
}, '150.00'],
|
||||
],
|
||||
})
|
||||
// draw foot
|
||||
drawItem(doc, {title: 'Remarks:', content: ''}, 155)
|
||||
drawItem(doc, {title: 'Cashier:', content: ''}, 155,"right")
|
||||
|
||||
doc.setFont('Helvetica','italic');
|
||||
drawItem(doc, {title: 'Please retain this acknowledgement receipt for your record.'}, 185)
|
||||
|
||||
const url = doc.output('bloburl')
|
||||
setViewUrl(url.toString())
|
||||
}, [])
|
||||
|
||||
function downloadPDF() {
|
||||
saveAs(viewUrl, 'receipt-87254.pdf');
|
||||
}
|
||||
|
||||
return (<div>
|
||||
<h1>Index</h1>
|
||||
<Button onClick={downloadPDF}>生成PDF</Button>
|
||||
<div>
|
||||
<iframe src={viewUrl} style={{
|
||||
border: 'none',
|
||||
width: '100%',
|
||||
height: 800
|
||||
}}></iframe>
|
||||
</div>
|
||||
</div>)
|
||||
}
|
@ -1,15 +1,19 @@
|
||||
import React from "react";
|
||||
import {isRouteErrorResponse, Link, useRouteError} from 'react-router-dom';
|
||||
import {isRouteErrorResponse, Link, useNavigate, useRouteError} from 'react-router-dom';
|
||||
import {Button, Col, Row, Space, Typography} from "@douyinfe/semi-ui";
|
||||
|
||||
// material-ui
|
||||
import error500 from "@/assets/images/error/Error500.png";
|
||||
import error404 from "@/assets/images/error/Error404.png";
|
||||
import TwoCone from "@/assets/images/error/TwoCone.png";
|
||||
import {Box, Container, Stack} from "@mui/system";
|
||||
import {Box, Stack} from "@mui/system";
|
||||
import {useTranslation} from "react-i18next";
|
||||
import styled from "@emotion/styled";
|
||||
|
||||
// ==============================|| ELEMENT ERROR - COMMON ||============================== //
|
||||
|
||||
const ErrorContainer = styled.div({
|
||||
minHeight: '100vh', display: "flex", alignItems: 'center', justifyContent: 'center', textAlign: 'center'
|
||||
})
|
||||
const ErrorBoundary: React.FC<{
|
||||
minHeight?: string | number
|
||||
}> = ({minHeight}) => {
|
||||
@ -30,11 +34,12 @@ const ErrorBoundary: React.FC<{
|
||||
errorMessage = `Error ${error.status} - ${errorConfig[error.status]}`;
|
||||
}
|
||||
}
|
||||
|
||||
const handleReload = () => {
|
||||
window.location.reload()
|
||||
const {t} = useTranslation()
|
||||
const navigate = useNavigate()
|
||||
const handleGoBack = () => {
|
||||
navigate(-1)
|
||||
}
|
||||
return (<Container sx={{
|
||||
return (<ErrorContainer style={{
|
||||
...(minHeight ? {minHeight: minHeight} : {})
|
||||
}}>
|
||||
<Row>
|
||||
@ -52,74 +57,64 @@ const ErrorBoundary: React.FC<{
|
||||
{errorMessage}
|
||||
</Typography.Title>
|
||||
{process.env.NODE_ENV == 'development' && <div>
|
||||
<pre style={{font: 'inherit'}}><code style={{font: 'inherit'}}>{error.stack}</code></pre>
|
||||
<pre style={{font: 'inherit',textAlign:'left',maxWidth:700,marginTop:20,maxHeight:300,overflow:'auto'}}>
|
||||
<code style={{wordBreak:'break-all',font: 'inherit',whiteSpace:'break-spaces'}}>{error.stack}</code>
|
||||
</pre>
|
||||
</div>}
|
||||
<Stack sx={{mt: 5}} direction={'row'} spacing={2}>
|
||||
<Button component={Link} to={APP_DEFAULT_PATH} variant="contained">
|
||||
返回首页
|
||||
<Button onClick={handleGoBack} theme='solid' type='primary'>
|
||||
{t('error.go_back')}
|
||||
</Button>
|
||||
<Button onClick={handleReload} variant="outlined">
|
||||
刷新
|
||||
<Button theme='outline'>
|
||||
<Typography.Text link={{href: '/'}}>{t('error.go_home')}</Typography.Text>
|
||||
</Button>
|
||||
</Stack>
|
||||
</Stack>
|
||||
</Col>
|
||||
</Row>
|
||||
</Container>);
|
||||
</ErrorContainer>);
|
||||
};
|
||||
|
||||
export function Error404() {
|
||||
const {t} = useTranslation()
|
||||
const navigate = useNavigate()
|
||||
const handleGoBack = () => {
|
||||
window.history.back()
|
||||
navigate(-1)
|
||||
}
|
||||
return (
|
||||
<>
|
||||
<Row
|
||||
// container
|
||||
// spacing={10}
|
||||
// direction="column"
|
||||
// alignItems="center"
|
||||
// justifyContent="center"
|
||||
// sx={{minHeight: '100vh', pt: 1.5, pb: 1, overflow: 'hidden'}}
|
||||
>
|
||||
<Col xs={12}>
|
||||
<Space vertical>
|
||||
<Col>
|
||||
<Box sx={{width: {xs: 250, sm: 590}, height: {xs: 130, sm: 300}}}>
|
||||
<img src={error404} alt="mantis" style={{width: '100%', height: '100%'}}/>
|
||||
</Box>
|
||||
</Col>
|
||||
<Col style={{position: 'relative'}}>
|
||||
<Box sx={{
|
||||
position: 'absolute',
|
||||
top: 60,
|
||||
left: -40,
|
||||
width: {xs: 130, sm: 390},
|
||||
height: {xs: 115, sm: 330}
|
||||
}}>
|
||||
<img src={TwoCone} alt="mantis" style={{width: '100%', height: '100%'}}/>
|
||||
</Box>
|
||||
</Col>
|
||||
</Space>
|
||||
</Col>
|
||||
<Col xs={12}>
|
||||
<Space spacing={2} align="center">
|
||||
<Typography.Title>Page Not Found</Typography.Title>
|
||||
<Typography.Text>
|
||||
访问的页面不存在!
|
||||
</Typography.Text>
|
||||
<Space vertical spacing={2}>
|
||||
<Button onClick={handleGoBack} variant="contained">
|
||||
返回上一页
|
||||
<ErrorContainer>
|
||||
<div>
|
||||
<div style={{position: 'relative', margin: 'auto'}}>
|
||||
<Box sx={{width: {xs: 250, sm: 490, margin: 'auto'}}}>
|
||||
<img src={error404} alt="mantis" style={{width: '100%', height: '100%'}}/>
|
||||
</Box>
|
||||
<Box sx={{
|
||||
position: 'absolute',
|
||||
top: 60,
|
||||
right: -240,
|
||||
zIndex: -1,
|
||||
width: {xs: 130, sm: 390},
|
||||
height: {xs: 115, sm: 330}
|
||||
}}>
|
||||
<img src={TwoCone} alt="mantis" style={{width: '100%', height: '100%'}}/>
|
||||
</Box>
|
||||
</div>
|
||||
<div style={{marginTop: 30}}>
|
||||
<Typography.Title>Page Not Found</Typography.Title>
|
||||
<Typography.Text>The page you are looking might never exist!</Typography.Text>
|
||||
<div style={{marginTop: 30}}>
|
||||
<Space spacing={20} style={{marginTop: 20}}>
|
||||
<Button onClick={handleGoBack} theme='solid' type='primary'>
|
||||
{t('error.go_back')}
|
||||
</Button>
|
||||
<Button component={Link} to={'/'} variant="outlined">
|
||||
返回首页
|
||||
<Button theme='outline'>
|
||||
<Typography.Text link={{href: '/'}}>{t('error.go_home')}</Typography.Text>
|
||||
</Button>
|
||||
</Space>
|
||||
</Space>
|
||||
</Col>
|
||||
</Row>
|
||||
</>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ErrorContainer>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ import DashboardLayout from "@/routes/layout/dashboard-layout.tsx";
|
||||
import AuthLogin from "@/pages/auth/login.tsx";
|
||||
import AuthLayout from "@/routes/layout/auth-layout.tsx";
|
||||
|
||||
const Index = lazy(() => import("@/pages/index/index.tsx"));
|
||||
const ManualIndex = lazy(() => import("@/pages/manual/index.tsx"));
|
||||
|
||||
|
||||
const routes: RouteObject[] = [
|
||||
@ -25,13 +25,17 @@ const routes: RouteObject[] = [
|
||||
]
|
||||
},
|
||||
{
|
||||
path: '/',
|
||||
path: '/dashboard',
|
||||
element: <DashboardLayout/>,
|
||||
errorElement: <ErrorBoundary/>,
|
||||
errorElement: <DashboardLayout><ErrorBoundary minHeight={'70vh'}/></DashboardLayout>,
|
||||
children: [
|
||||
{
|
||||
path: 'workbench',
|
||||
element: <Index/>
|
||||
path: '',
|
||||
element: <Navigate to={'/dashboard/manual'} replace/>
|
||||
},
|
||||
{
|
||||
path: 'manual',
|
||||
element: <ManualIndex/>
|
||||
},
|
||||
]
|
||||
},
|
||||
|
@ -1,33 +1,35 @@
|
||||
import AuthGuard from "@/routes/layout/auth-guard.tsx";
|
||||
import {Outlet} from "react-router-dom";
|
||||
import React from "react";
|
||||
import {Avatar, Dropdown, Layout, Nav} from "@douyinfe/semi-ui"
|
||||
import {Avatar, Dropdown, Layout, Nav, Space} from "@douyinfe/semi-ui"
|
||||
import {useTranslation} from "react-i18next";
|
||||
|
||||
import AuthGuard from "@/routes/layout/auth-guard.tsx";
|
||||
import AppLogo from "@/assets/AppLogo.tsx";
|
||||
import useAuth from "@/hooks/useAuth.ts";
|
||||
import {I18nSwitcher} from "@/i18n";
|
||||
|
||||
const {Header, Footer, Content} = Layout;
|
||||
const {Header, Content, Sider} = Layout;
|
||||
|
||||
export const HeaderUserAvatar = () => {
|
||||
return (<Dropdown
|
||||
position={'bottomRight'}
|
||||
render={
|
||||
<Dropdown.Menu>
|
||||
<Dropdown.Item>个人资料</Dropdown.Item>
|
||||
<Dropdown.Item>更新密码</Dropdown.Item>
|
||||
<Dropdown.Divider/>
|
||||
<Dropdown.Item>退出</Dropdown.Item>
|
||||
</Dropdown.Menu>
|
||||
}
|
||||
>
|
||||
<Avatar color="orange" size="small">YJ</Avatar>
|
||||
</Dropdown>)
|
||||
}
|
||||
type CommonHeaderProps = {
|
||||
children?: React.ReactNode;
|
||||
title?: React.ReactNode;
|
||||
rightExtra?: React.ReactNode;
|
||||
}
|
||||
export const HeaderUserAvatar = () => {
|
||||
const {t} = useTranslation()
|
||||
const {user, logout} = useAuth()
|
||||
return (<Dropdown
|
||||
position={'bottomRight'}
|
||||
render={
|
||||
<Dropdown.Menu>
|
||||
<Dropdown.Item onClick={logout}>{t('layout.logout')}</Dropdown.Item>
|
||||
</Dropdown.Menu>
|
||||
}
|
||||
>
|
||||
<Avatar color="orange" size="small">{user?.nickname}</Avatar>
|
||||
</Dropdown>)
|
||||
}
|
||||
export const CommonHeader: React.FC<CommonHeaderProps> = ({children, title, rightExtra}) => {
|
||||
|
||||
return (<Header style={{backgroundColor: 'var(--semi-color-bg-1)', position: 'sticky', top: 0, zIndex: 100}}>
|
||||
<div>
|
||||
<Nav mode="horizontal" defaultSelectedKeys={['Home']}>
|
||||
@ -46,9 +48,12 @@ export const CommonHeader: React.FC<CommonHeaderProps> = ({children, title, righ
|
||||
{children}
|
||||
</div>
|
||||
<Nav.Footer>
|
||||
{rightExtra}
|
||||
<Space>
|
||||
{rightExtra}
|
||||
<I18nSwitcher/>
|
||||
<HeaderUserAvatar/>
|
||||
</Space>
|
||||
|
||||
<HeaderUserAvatar/>
|
||||
</Nav.Footer>
|
||||
</Nav>
|
||||
</div>
|
||||
@ -62,19 +67,26 @@ type LayoutProps = {
|
||||
export const BaseLayout: React.FC<LayoutProps> = ({children}) => {
|
||||
return (<Layout>
|
||||
<CommonHeader/>
|
||||
<Content style={{padding: '15px', backgroundColor: 'var(--semi-color-fill-0,#fafafa)',}}>
|
||||
{children}
|
||||
</Content>
|
||||
<Footer
|
||||
style={{
|
||||
textAlign: 'center',
|
||||
padding: '20px',
|
||||
color: 'var(--semi-color-text-2)',
|
||||
backgroundColor: 'rgba(var(--semi-color-bg-0), 1)',
|
||||
}}
|
||||
>
|
||||
<span>Copyright © 2024 星图比特. All Rights Reserved. </span>
|
||||
</Footer>
|
||||
<Layout style={{
|
||||
backgroundColor: '#f8f9fa'
|
||||
}}>
|
||||
<Sider style={{width: '250px'}}>Sider</Sider>
|
||||
<Content style={{padding: '15px'}}>
|
||||
<div className="content-container" style={{backgroundColor: '#fff', minHeight: 300, borderRadius: 10}}>
|
||||
{children}
|
||||
</div>
|
||||
</Content>
|
||||
</Layout>
|
||||
{/*<Footer*/}
|
||||
{/* style={{*/}
|
||||
{/* textAlign: 'center',*/}
|
||||
{/* padding: '20px',*/}
|
||||
{/* color: 'var(--semi-color-text-2)',*/}
|
||||
{/* backgroundColor: 'rgba(var(--semi-color-bg-0), 1)',*/}
|
||||
{/* }}*/}
|
||||
{/*>*/}
|
||||
{/* <span>Copyright © 2024 星图比特. All Rights Reserved. </span>*/}
|
||||
{/*</Footer>*/}
|
||||
</Layout>)
|
||||
}
|
||||
|
||||
|
142
yarn.lock
142
yarn.lock
@ -175,7 +175,7 @@
|
||||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.24.0"
|
||||
|
||||
"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9":
|
||||
"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.21.0", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.9":
|
||||
version "7.24.5"
|
||||
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.24.5.tgz#230946857c053a36ccc66e1dd03b17dd0c4ed02c"
|
||||
integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==
|
||||
@ -826,6 +826,11 @@
|
||||
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
|
||||
integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
|
||||
|
||||
"@types/file-saver@^2.0.7":
|
||||
version "2.0.7"
|
||||
resolved "https://registry.npmmirror.com/@types/file-saver/-/file-saver-2.0.7.tgz#8dbb2f24bdc7486c54aa854eb414940bbd056f7d"
|
||||
integrity sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==
|
||||
|
||||
"@types/lodash@^4.17.1":
|
||||
version "4.17.4"
|
||||
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.4.tgz#0303b64958ee070059e3a7184048a55159fe20b7"
|
||||
@ -848,6 +853,11 @@
|
||||
resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6"
|
||||
integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==
|
||||
|
||||
"@types/raf@^3.4.0":
|
||||
version "3.4.3"
|
||||
resolved "https://registry.npmmirror.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04"
|
||||
integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==
|
||||
|
||||
"@types/react-dom@^18.2.22":
|
||||
version "18.3.0"
|
||||
resolved "https://registry.npmmirror.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0"
|
||||
@ -1029,6 +1039,11 @@ async-validator@^3.5.0:
|
||||
resolved "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz#68e866a96824e8b2694ff7a831c1a25c44d5e500"
|
||||
integrity sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==
|
||||
|
||||
atob@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
|
||||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||
|
||||
babel-plugin-macros@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1"
|
||||
@ -1043,6 +1058,11 @@ balanced-match@^1.0.0:
|
||||
resolved "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||
|
||||
base64-arraybuffer@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
|
||||
integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
|
||||
|
||||
bezier-easing@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/bezier-easing/-/bezier-easing-2.1.0.tgz#c04dfe8b926d6ecaca1813d69ff179b7c2025d86"
|
||||
@ -1080,6 +1100,11 @@ browserslist@^4.22.2:
|
||||
node-releases "^2.0.14"
|
||||
update-browserslist-db "^1.0.13"
|
||||
|
||||
btoa@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmmirror.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73"
|
||||
integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==
|
||||
|
||||
callsites@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||
@ -1090,6 +1115,20 @@ caniuse-lite@^1.0.30001587:
|
||||
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001620.tgz#78bb6f35b8fe315b96b8590597094145d0b146b4"
|
||||
integrity sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==
|
||||
|
||||
canvg@^3.0.6:
|
||||
version "3.0.10"
|
||||
resolved "https://registry.npmmirror.com/canvg/-/canvg-3.0.10.tgz#8e52a2d088b6ffa23ac78970b2a9eebfae0ef4b3"
|
||||
integrity sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
"@types/raf" "^3.4.0"
|
||||
core-js "^3.8.3"
|
||||
raf "^3.4.1"
|
||||
regenerator-runtime "^0.13.7"
|
||||
rgbcolor "^1.0.1"
|
||||
stackblur-canvas "^2.0.0"
|
||||
svg-pathdata "^6.0.3"
|
||||
|
||||
chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
@ -1178,6 +1217,11 @@ copy-text-to-clipboard@^2.1.1:
|
||||
resolved "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz#329dd6daf8c42034c763ace567418401764579ae"
|
||||
integrity sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==
|
||||
|
||||
core-js@^3.6.0, core-js@^3.8.3:
|
||||
version "3.37.1"
|
||||
resolved "https://registry.npmmirror.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9"
|
||||
integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==
|
||||
|
||||
cosmiconfig@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6"
|
||||
@ -1203,6 +1247,13 @@ cross-spawn@^7.0.2:
|
||||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
css-line-break@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0"
|
||||
integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==
|
||||
dependencies:
|
||||
utrie "^1.0.2"
|
||||
|
||||
csstype@^3.0.2, csstype@^3.1.3:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
|
||||
@ -1251,6 +1302,11 @@ doctrine@^3.0.0:
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
dompurify@^2.2.0:
|
||||
version "2.5.3"
|
||||
resolved "https://registry.npmmirror.com/dompurify/-/dompurify-2.5.3.tgz#bc901a9c40a7d97176c1d0ab9a24939db54270a2"
|
||||
integrity sha512-09uyBM2URzOfXMUAqGRnm9R9IUeSkzO9PktXc2eVQIsBmmJUqRmfL1xW2QPBxVJEtlEVs5d8ndrsIQsyAqs81g==
|
||||
|
||||
electron-to-chromium@^1.4.668:
|
||||
version "1.4.774"
|
||||
resolved "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.774.tgz#1017d1758aaeeefe5423aa9d67b4b1e5d1d0a856"
|
||||
@ -1452,6 +1508,11 @@ fastq@^1.6.0:
|
||||
dependencies:
|
||||
reusify "^1.0.4"
|
||||
|
||||
fflate@^0.4.8:
|
||||
version "0.4.8"
|
||||
resolved "https://registry.npmmirror.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae"
|
||||
integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==
|
||||
|
||||
file-entry-cache@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
|
||||
@ -1459,6 +1520,11 @@ file-entry-cache@^6.0.1:
|
||||
dependencies:
|
||||
flat-cache "^3.0.4"
|
||||
|
||||
file-saver@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38"
|
||||
integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
@ -1604,6 +1670,14 @@ html-parse-stringify@^3.0.1:
|
||||
dependencies:
|
||||
void-elements "3.1.0"
|
||||
|
||||
html2canvas@^1.0.0-rc.5:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543"
|
||||
integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==
|
||||
dependencies:
|
||||
css-line-break "^2.1.0"
|
||||
text-segmentation "^1.0.3"
|
||||
|
||||
i18next@^23.11.4:
|
||||
version "23.11.4"
|
||||
resolved "https://registry.npmmirror.com/i18next/-/i18next-23.11.4.tgz#3f0e620fd2cff3825324191615d0ab0a1eec3baf"
|
||||
@ -1750,6 +1824,26 @@ json5@^2.2.3:
|
||||
resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
|
||||
integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
|
||||
|
||||
jspdf-autotable@^3.8.2:
|
||||
version "3.8.2"
|
||||
resolved "https://registry.npmmirror.com/jspdf-autotable/-/jspdf-autotable-3.8.2.tgz#44d4c4e18494ccd6e31765e4d2adadda25b9713e"
|
||||
integrity sha512-zW1ix99/mtR4MbIni7IqvrpfHmuTaICl6iv6wqjRN86Nxtwaw/QtOeDbpXqYSzHIJK9JvgtLM283sc5x+ipkJg==
|
||||
|
||||
jspdf@^2.5.1:
|
||||
version "2.5.1"
|
||||
resolved "https://registry.npmmirror.com/jspdf/-/jspdf-2.5.1.tgz#00c85250abf5447a05f3b32ab9935ab4a56592cc"
|
||||
integrity sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.14.0"
|
||||
atob "^2.1.2"
|
||||
btoa "^1.2.1"
|
||||
fflate "^0.4.8"
|
||||
optionalDependencies:
|
||||
canvg "^3.0.6"
|
||||
core-js "^3.6.0"
|
||||
dompurify "^2.2.0"
|
||||
html2canvas "^1.0.0-rc.5"
|
||||
|
||||
keyv@^4.5.3:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
||||
@ -1976,6 +2070,11 @@ path-type@^4.0.0:
|
||||
resolved "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||
|
||||
performance-now@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==
|
||||
|
||||
picocolors@^1.0.0, picocolors@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1"
|
||||
@ -2029,6 +2128,13 @@ queue-microtask@^1.2.2:
|
||||
resolved "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
|
||||
|
||||
raf@^3.4.1:
|
||||
version "3.4.1"
|
||||
resolved "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
|
||||
integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
|
||||
dependencies:
|
||||
performance-now "^2.1.0"
|
||||
|
||||
react-countup@^6.5.3:
|
||||
version "6.5.3"
|
||||
resolved "https://registry.npmmirror.com/react-countup/-/react-countup-6.5.3.tgz#e892aa3eab2d6ba9c3cdba30bf4ed6764826d848"
|
||||
@ -2118,6 +2224,11 @@ react@^18.2.0:
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
|
||||
regenerator-runtime@^0.13.7:
|
||||
version "0.13.11"
|
||||
resolved "https://registry.npmmirror.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.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f"
|
||||
@ -2147,6 +2258,11 @@ reusify@^1.0.4:
|
||||
resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
|
||||
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
|
||||
|
||||
rgbcolor@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.npmmirror.com/rgbcolor/-/rgbcolor-1.0.1.tgz#d6505ecdb304a6595da26fa4b43307306775945d"
|
||||
integrity sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==
|
||||
|
||||
rimraf@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
|
||||
@ -2262,6 +2378,11 @@ source-map@~0.6.0:
|
||||
resolved "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||
|
||||
stackblur-canvas@^2.0.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.npmmirror.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6"
|
||||
integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==
|
||||
|
||||
strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
@ -2298,6 +2419,18 @@ supports-preserve-symlinks-flag@^1.0.0:
|
||||
resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
svg-pathdata@^6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.npmmirror.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac"
|
||||
integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==
|
||||
|
||||
text-segmentation@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943"
|
||||
integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==
|
||||
dependencies:
|
||||
utrie "^1.0.2"
|
||||
|
||||
text-table@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
@ -2372,6 +2505,13 @@ utility-types@^3.10.0:
|
||||
resolved "https://registry.npmmirror.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c"
|
||||
integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==
|
||||
|
||||
utrie@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645"
|
||||
integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==
|
||||
dependencies:
|
||||
base64-arraybuffer "^1.0.2"
|
||||
|
||||
vite@^5.2.0:
|
||||
version "5.2.11"
|
||||
resolved "https://registry.npmmirror.com/vite/-/vite-5.2.11.tgz#726ec05555431735853417c3c0bfb36003ca0cbd"
|
||||
|
Loading…
x
Reference in New Issue
Block a user