From 3463c2cc8325d5fceb840a98d1bf18ee2d4feac7 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 11 Dec 2024 14:02:55 +0800 Subject: [PATCH 01/37] update README.md --- README.md | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 4277485..73fa1f2 100644 --- a/README.md +++ b/README.md @@ -54,35 +54,27 @@ And more features are coming soon. - Golden player, which shows the top 3 players(overall, potential) on same position. - Save all player change history(overall, potential, skill moves, weak foot), in notification page. -doc-images/2024-12-11/detail.webp -doc-images/2024-12-11/get-started.webp -doc-images/2024-12-11/list.webp -doc-images/2024-12-11/notification.webp -doc-images/2024-12-11/setting.webp -doc-images/2024-12-11/trends.webp - - -Player List: +**Player List:** list -Trends: +**Trends:** trends -Notification: +**Notification:** notification -Detail: +**Detail:** detail -Setting: +**Setting:** setting -Get Started: +**Get Started:** get-started From 4b72f6cfc49cf0c733632a97fe59eca2482fdc26 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 11 Dec 2024 14:06:27 +0800 Subject: [PATCH 02/37] update README.md --- README.md | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 73fa1f2..e26d040 100644 --- a/README.md +++ b/README.md @@ -28,24 +28,14 @@ And more features are coming soon. ### Dependencies -- Latest **xAranaktu/FC-24-Live-Editor**. ( - Click [here](https://www.patreon.com/collection/96422?view=expanded) to - download) -- **Secret API key**. (Get it from the settings page) -- [**lua code snippet**](./lua-scripts/client-script.lua) - -> Actually, you don't need to download the lua code snippet and replace the API -> key. -> I put everything in the GetStarted page, you can directly copy the code -> snippet and paste it into the Live Editor of your FC24. +- Latest **xAranaktu/FC-24-Live-Editor** or **xAranaktu/FC-25-Live-Editor** +- Lua code, will provide in the GetStarted page. ### Usage -- Open the FC24 with Live Editor. +- Open the FC24/FC25 with Live Editor. - Go to the Lua script tab in the live editor. -- Paste the code snippet in GetStarted page. -- Click the "Execute" button. It will send a init request to the backend. -- You can see the player list in the player list page. +- Paste the code snippet in GetStarted page and run the script. # Change log From 478f91d522827d1aa0fd11c1a9fc29fe132abd30 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 11 Dec 2024 14:06:51 +0800 Subject: [PATCH 03/37] update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index e26d040..864ced4 100644 --- a/README.md +++ b/README.md @@ -18,12 +18,11 @@ FC24 Career Dashboard: - Silent operation, real-time updates (weekly in-game updates, configurable) - Player details page - Notification when a player's overall rating or potential changes +- Notification when a player's weak foot or skill moves changes - Golden player, which shows the top 3 players(overall, potential) on same position. And more features are coming soon. -- Notification when a player's weak foot or skill moves changes - ## Installation ### Dependencies From 09e3d42f2d6f740d1159c4a141746e0bc6f8228d Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 11 Dec 2024 18:07:03 +0800 Subject: [PATCH 04/37] Optimize jump logic without refreshing the page --- src/components/NotificationPopover.tsx | 22 +++++++++++++++---- src/pages/PlayerListPage/PlayerListPage.tsx | 16 ++++++-------- .../PlayerTrendsPage/PlayerTrendsPage.tsx | 8 +++++-- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/components/NotificationPopover.tsx b/src/components/NotificationPopover.tsx index 2f7094b..aed3259 100644 --- a/src/components/NotificationPopover.tsx +++ b/src/components/NotificationPopover.tsx @@ -1,6 +1,7 @@ import { LocaleConsumer, Switch, Tooltip } from '@douyinfe/semi-ui'; import { IconCheckChoiceStroked } from '@douyinfe/semi-icons'; import { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; import { NotificationApis, NotificationBody, @@ -129,7 +130,11 @@ function getNotificationContent( } } -function getNotificationItem(notification: NotificationBody, localeData: any) { +function getNotificationItem( + notification: NotificationBody, + localeData: any, + navigate: any, +) { return (
))}
diff --git a/src/pages/PlayerListPage/PlayerListPage.tsx b/src/pages/PlayerListPage/PlayerListPage.tsx index 032399e..635fa33 100644 --- a/src/pages/PlayerListPage/PlayerListPage.tsx +++ b/src/pages/PlayerListPage/PlayerListPage.tsx @@ -1,3 +1,4 @@ +import * as React from 'react'; import { LocaleConsumer, Popover, @@ -5,8 +6,8 @@ import { Table, Typography, } from '@douyinfe/semi-ui'; -import * as React from 'react'; import { useEffect } from 'react'; +import { useNavigate } from 'react-router-dom'; import { PlayerApis, PlayerOverall } from '../../service/PlayerApis.ts'; import { getAvatarUrl, @@ -19,7 +20,7 @@ import { IconActivity } from '@douyinfe/semi-icons'; const { Text } = Typography; -const PlayerListColumn = (localeData: any) => [ +const PlayerListColumn = (localeData: any, navigate: any) => [ { title: '', dataIndex: 'imageUrl', @@ -50,11 +51,7 @@ const PlayerListColumn = (localeData: any) => [ }, }, { - title: ( - - {localeData.name} - - ), + title: localeData.name, dataIndex: 'playerName', render: (text: string, record: PlayerOverall, index: number) => { return ( @@ -67,7 +64,7 @@ const PlayerListColumn = (localeData: any) => [ }} underline onClick={() => { - window.location.href = `/players-detail?id=${record.playerID}`; + navigate(`/players-detail?id=${record.playerID}`); }} > {record.playerName} @@ -265,6 +262,7 @@ const PlayerListColumn = (localeData: any) => [ function PlayerListPage(): React.ReactElement { const [isLoading, setIsLoading] = React.useState(true); const [data, setData] = React.useState([]); + const navigate = useNavigate(); const getPlayerList = async () => { const players: PlayerOverall[] = await PlayerApis.getPlayerList(); @@ -303,7 +301,7 @@ function PlayerListPage(): React.ReactElement { marginBottom: '100px', scroll: null, }} - columns={PlayerListColumn(localeData)} + columns={PlayerListColumn(localeData, navigate)} dataSource={data} pagination={false} size="small" diff --git a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx index 28d05a6..e3d17c9 100644 --- a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx +++ b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx @@ -18,6 +18,7 @@ import { getColorByPositionType, } from '../../common/player-helper.ts'; import { LoadingComponent, NoDataComponent } from '../../components/Other.tsx'; +import { useNavigate } from 'react-router-dom'; function formatDate(inputDate: string) { const [, month, day] = inputDate.split('-').map(Number); @@ -93,6 +94,7 @@ export const CustomTooltip: React.FC<{ function PlayerTrendsPage(): React.ReactElement { const [isLoading, setIsLoading] = React.useState(true); const [data, setData] = React.useState([]); + const navigate = useNavigate(); const fetchPlayerTrends = async () => { const res = await PlayerApis.getPlayerTrends(); @@ -180,7 +182,7 @@ function PlayerTrendsPage(): React.ReactElement { cursor: 'pointer', }} onClick={() => { - window.location.href = `/players-detail?id=${player.playerID}`; + navigate(`/players-detail?id=${player.playerID}`); }} > { - window.location.href = `/players-detail?id=${player.playerID}`; + navigate( + `/players-detail?id=${player.playerID}`, + ); }} > {player.playerName} From 014ab9e1cef237dddd300668cc3ee5500a5c922b Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 11 Dec 2024 19:17:50 +0800 Subject: [PATCH 05/37] UI fixing... --- src/App.css | 3 +- .../PlayerDetailPage/PlayerDetailPage.tsx | 331 +++++++++--------- 2 files changed, 160 insertions(+), 174 deletions(-) diff --git a/src/App.css b/src/App.css index 73cd9bb..762e43b 100644 --- a/src/App.css +++ b/src/App.css @@ -17,7 +17,8 @@ } .content { - flex: 1; /* 使内容区域占据剩余空间 */ + flex-grow: 1; /* 使内容区域占据剩余空间 */ + width: 100vw; margin-top: 60px; overflow: auto; /* 使内容区域上下滚动 */ } diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx index 5ba5498..b2aed1f 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx @@ -1,7 +1,6 @@ import * as React from 'react'; import { useEffect, useState } from 'react'; import { - Button, Col, Image, LocaleConsumer, @@ -94,20 +93,13 @@ function PlayerDetailPage(): React.ReactElement { return playerDetail ? ( {(localeData: any, localeCode: string, dateFnsLocale: any) => ( - +
{/* Player picker */}
{playerDetail?.allPlayer @@ -126,12 +118,13 @@ function PlayerDetailPage(): React.ReactElement { }) .map((player) => { return ( - +
); })}
- {/* Basic info */} - {/* Basic info*/} - -
- - player_avatar - - - {playerDetail?.thisPlayer?.player_name} - -

- { - PLAYER_PRIMARY_POS_NAME[ - playerDetail?.thisPlayer?.preferredposition1 || 0 - ] - } -

- - - {playerDetail?.thisPlayer?.overallrating} - - {'→'} - - {playerDetail?.thisPlayer?.potential} - - -
-
- - {/*Player ID*/} -
- - {localeData.BasicInfo.PlayerID}: - - - {playerDetail?.thisPlayer?.player_id} - +
+
+ {/* Image */} + player_avatar + {/* Name */} +
+ {playerDetail?.thisPlayer?.player_name}
- {/*Age*/} -
- - {localeData.BasicInfo.Age}: + {/* Position */} +

+ { + PLAYER_PRIMARY_POS_NAME[ + playerDetail?.thisPlayer?.preferredposition1 || 0 + ] + } +

+ {/* Overall Rating -> Potential */} + + + {playerDetail?.thisPlayer?.overallrating} - - {playerDetail?.thisPlayer?.age} + {'→'} + + {playerDetail?.thisPlayer?.potential} -
- {/*AcceleRATE Controlled Explosive*/} + +
- {/*Skills*/} -
- - {localeData.BasicInfo.Skills}: - - - {/*{playerDetail?.thisPlayer?.skillmoves}*/} - - -
- {/*Weak Foot*/} -
- - {localeData.BasicInfo.WeakFoot}: - - - - -
- {/*Foot Right*/} -
- - {localeData.BasicInfo.Foot}: - - - {(playerDetail?.thisPlayer?.preferredfoot || 1) === 1 - ? 'Right' - : 'Left'} - -
- {/*Height 177cm | 5'10"*/} -
- - {localeData.BasicInfo.Height}: - - - {playerDetail?.thisPlayer?.height} cm - -
- {/*Weight 67*/} -
- - {localeData.BasicInfo.Weight}: - - - {playerDetail?.thisPlayer?.weight} kg - -
- {/*Att. WR High*/} -
- - {localeData.BasicInfo.AttackingWorkRate}: - - - {getWorkRateText( - playerDetail?.thisPlayer?.attackingworkrate, - )} - -
- {/*Def. WR High*/} -
- - {localeData.BasicInfo.DefensiveWorkRate}: - - - {getWorkRateText( - playerDetail?.thisPlayer?.defensiveworkrate, - )} - -
+ {/*Player ID*/} +
+ + {localeData.BasicInfo.PlayerID}: + + + {playerDetail?.thisPlayer?.player_id} +
- + {/*Age*/} +
+ {localeData.BasicInfo.Age}: + + {playerDetail?.thisPlayer?.age} + +
+ {/*AcceleRATE Controlled Explosive*/} + + {/*Skills*/} +
+ + {localeData.BasicInfo.Skills}: + + + {/*{playerDetail?.thisPlayer?.skillmoves}*/} + + +
+ {/*Weak Foot*/} +
+ + {localeData.BasicInfo.WeakFoot}: + + + + +
+ {/*Foot Right*/} +
+ {localeData.BasicInfo.Foot}: + + {(playerDetail?.thisPlayer?.preferredfoot || 1) === 1 + ? 'Right' + : 'Left'} + +
+ {/*Height 177cm | 5'10"*/} +
+ + {localeData.BasicInfo.Height}: + + + {playerDetail?.thisPlayer?.height} cm + +
+ {/*Weight 67*/} +
+ + {localeData.BasicInfo.Weight}: + + + {playerDetail?.thisPlayer?.weight} kg + +
+ {/*Att. WR High*/} +
+ + {localeData.BasicInfo.AttackingWorkRate}: + + + {getWorkRateText(playerDetail?.thisPlayer?.attackingworkrate)} + +
+ {/*Def. WR High*/} +
+ + {localeData.BasicInfo.DefensiveWorkRate}: + + + {getWorkRateText(playerDetail?.thisPlayer?.defensiveworkrate)} + +
+
{/* Details */}
@@ -454,8 +438,9 @@ function PlayerDetailPage(): React.ReactElement { />
- +
+ {/* Trends */} - +
)}
) : ( From cac6ff2d8701f95615f4fb50d1f90fa2ff0abef6 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 11 Dec 2024 19:58:04 +0800 Subject: [PATCH 06/37] STYLE CHANGE --- .../PlayerDetailPage/PlayerDetailPage.css | 1 + .../PlayerDetailPage/PlayerDetailPage.tsx | 92 +++++++++++-------- 2 files changed, 55 insertions(+), 38 deletions(-) diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.css b/src/pages/PlayerDetailPage/PlayerDetailPage.css index fe4b705..dda724b 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.css +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.css @@ -4,6 +4,7 @@ border: 0 solid var(--semi-color-border); max-width: 600px; margin: 3px; + border-radius: 8px; } .col-content h2 { diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx index b2aed1f..a9836a8 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx @@ -2,7 +2,6 @@ import * as React from 'react'; import { useEffect, useState } from 'react'; import { Col, - Image, LocaleConsumer, Progress, Rating, @@ -37,6 +36,7 @@ import { } from '../../common/player-helper.ts'; import { CustomTooltip } from '../PlayerTrendsPage/PlayerTrendsPage.tsx'; import { NoDataComponent } from '../../components/Other.tsx'; +import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.webp'; function PlayerDetailPage(): React.ReactElement { const [searchParams] = useSearchParams(); @@ -93,13 +93,13 @@ function PlayerDetailPage(): React.ReactElement { return playerDetail ? ( {(localeData: any, localeCode: string, dateFnsLocale: any) => ( -
+
{/* Player picker */}
{playerDetail?.allPlayer @@ -120,11 +120,15 @@ function PlayerDetailPage(): React.ReactElement { return (
{ @@ -140,7 +144,7 @@ function PlayerDetailPage(): React.ReactElement { > {player.position1} - {player.playerName} + {player.playerName}
); })} @@ -150,20 +154,37 @@ function PlayerDetailPage(): React.ReactElement {
{/* Basic info*/} -
-
+
+
{/* Image */} - player_avatar { + e.currentTarget.src = player_avatar_placeholder; + }} /> {/* Name */}
@@ -305,6 +326,27 @@ function PlayerDetailPage(): React.ReactElement { {/* Details */}
+ {playerDetail?.thisPlayer?.preferredposition1 == 0 && ( + + + + )} - - {/* - Diving - Handling - Kicking - Reflexes - Positioning - */} - -
From 2e093dcd11a93ff5ab8b0a085e504a9c7c963a18 Mon Sep 17 00:00:00 2001 From: Veeja Liu Date: Wed, 11 Dec 2024 20:25:35 +0800 Subject: [PATCH 07/37] fixed bug of wrap --- src/pages/PlayerDetailPage/PlayerDetailPage.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx index a9836a8..3ab9d7b 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx @@ -100,6 +100,7 @@ function PlayerDetailPage(): React.ReactElement { width: '100%', display: 'flex', backgroundColor: '#f4f5f5', + flexWrap: 'wrap', }} > {playerDetail?.allPlayer From 2ab8b37d8e4cde570655d0879681dbdcfc4d9405 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 12 Dec 2024 13:41:34 +0800 Subject: [PATCH 08/37] change the default avatar --- .../image/player_avatar_placeholder.svg | 18 ++++++++++++++++++ .../image/player_avatar_placeholder.webp | Bin 948 -> 0 bytes src/components/NotificationPopover.tsx | 2 +- .../PlayerDetailPage/PlayerDetailPage.tsx | 2 +- src/pages/PlayerListPage/PlayerListPage.tsx | 6 ++---- .../PlayerTrendsPage/PlayerTrendsPage.tsx | 3 ++- 6 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 src/assets/image/player_avatar_placeholder.svg delete mode 100644 src/assets/image/player_avatar_placeholder.webp diff --git a/src/assets/image/player_avatar_placeholder.svg b/src/assets/image/player_avatar_placeholder.svg new file mode 100644 index 0000000..99c32d8 --- /dev/null +++ b/src/assets/image/player_avatar_placeholder.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/assets/image/player_avatar_placeholder.webp b/src/assets/image/player_avatar_placeholder.webp deleted file mode 100644 index 10ba3b45499ece3353520ffccf208c81881cf03e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmV;l155l;Nk&Gj0{{S5MM6+kP&il$0000G0000n001!n06|PpNS^@!009Qcwr!iX zv!89h7u&X-(k+GM+)`}2WZSmwq-NWEwvDrcbMBsd^oPx@1iHrY?N^Xb?eu(-UkMp{Kx*vqIH=<5?XqbdrEHsX& z!PJb>;6J_!!()A6o@r^R%NBmO>D*?s*bj6*#G18Fro-(`ypBo2$GraWzDnt; z_dmAdsX@hHhcNG7Or>~$u(mOF>0k)79>wpr*LwWHGeQOKSawG3;)1VGm|z-{GxQEvQYG#?bt|CASl}$B976Q+Jh`)h{RX1`F&llv$wYP?H2j>~N{SCBG^rVnFq`1jS0xUy2Z|oB)zk>IFtpFuVlT z+@@hiuJx?U>35uGrfW;aS4{W+3xM{r4N!P857RY8#%6x+Xho$#1-RQX2Ens3IwJOv zB>qp?T*gg*5BUFyLz{e#DZKk6VS`x$(@5jkDRv!`%O)8&k-}?KaF7Y$`dnxN8uIVy z(0ZUb>C07{Tsg8&Q!Xw)8+@See9q&vQwajqrj(3KR=tan_8clauxDP<^1S+4yUULJ zei{Duj$3}tdM(#ClV%zu-k>tobqcJj+$vLG&rR_t7ZR&xKCb5)CMt|RiQ_(!c%&uM zfm9cEzOcR+zXr>MA>>qdsSd(>fC(vOavta%UwaGTH [ src={record.imageUrl} alt="player" onError={(e) => { - // Hide the image when the image fails to load - e.currentTarget.style.display = 'none'; - // Clear the src attribute to prevent the last loaded image from being displayed when loading fails - e.currentTarget.src = ''; + e.currentTarget.src = player_avatar_placeholder; }} onLoad={(e) => { e.currentTarget.style.display = 'block'; diff --git a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx index e3d17c9..cd5854c 100644 --- a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx +++ b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx @@ -19,6 +19,7 @@ import { } from '../../common/player-helper.ts'; import { LoadingComponent, NoDataComponent } from '../../components/Other.tsx'; import { useNavigate } from 'react-router-dom'; +import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.svg'; function formatDate(inputDate: string) { const [, month, day] = inputDate.split('-').map(Number); @@ -190,7 +191,7 @@ function PlayerTrendsPage(): React.ReactElement { src={getAvatarUrl(player.playerID)} alt="player" onError={(e) => { - e.currentTarget.style.display = 'none'; + e.currentTarget.src = player_avatar_placeholder; }} />
From 67a6a2930b351927003519d218246c68a56170b1 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 12 Dec 2024 17:36:15 +0800 Subject: [PATCH 09/37] style change --- .../PlayerDetailPage/PlayerDetailPage.tsx | 10 +- src/pages/PlayerListPage/PlayerListPage.tsx | 11 +- .../PlayerTrendsPage/PlayerTrendsPage.css | 2 + .../PlayerTrendsPage/PlayerTrendsPage.tsx | 220 +++++++++--------- 4 files changed, 124 insertions(+), 119 deletions(-) diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx index d62caf6..5e898a6 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx @@ -35,23 +35,27 @@ import { getWorkRateText, } from '../../common/player-helper.ts'; import { CustomTooltip } from '../PlayerTrendsPage/PlayerTrendsPage.tsx'; -import { NoDataComponent } from '../../components/Other.tsx'; +import { LoadingComponent, NoDataComponent } from '../../components/Other.tsx'; import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.svg'; function PlayerDetailPage(): React.ReactElement { const [searchParams] = useSearchParams(); + const [isLoading, setIsLoading] = useState(true); + const id = searchParams.get('id'); const [playerDetail, setPlayerDetail] = useState(); const [playerID, setPlayerID] = useState(id ? +id : 0); const getPlayerDetail = async () => { + setIsLoading(true); const data = await PlayerApis.getPlayerDetail({ playerID: playerID, }); if (data) { setPlayerDetail(data); } + setIsLoading(false); }; useEffect(() => { @@ -90,7 +94,9 @@ function PlayerDetailPage(): React.ReactElement { ); }; - return playerDetail ? ( + return isLoading ? ( + + ) : playerDetail ? ( {(localeData: any, localeCode: string, dateFnsLocale: any) => (
diff --git a/src/pages/PlayerListPage/PlayerListPage.tsx b/src/pages/PlayerListPage/PlayerListPage.tsx index 150197b..9623f5a 100644 --- a/src/pages/PlayerListPage/PlayerListPage.tsx +++ b/src/pages/PlayerListPage/PlayerListPage.tsx @@ -276,14 +276,7 @@ function PlayerListPage(): React.ReactElement { }, []); return ( - +
{isLoading ? ( ) : data.length === 0 ? ( @@ -307,7 +300,7 @@ function PlayerListPage(): React.ReactElement { )} )} - +
); } diff --git a/src/pages/PlayerTrendsPage/PlayerTrendsPage.css b/src/pages/PlayerTrendsPage/PlayerTrendsPage.css index ce31b17..dadbc2a 100644 --- a/src/pages/PlayerTrendsPage/PlayerTrendsPage.css +++ b/src/pages/PlayerTrendsPage/PlayerTrendsPage.css @@ -13,4 +13,6 @@ -webkit-box-orient: vertical; -webkit-line-clamp: 2; text-overflow: ellipsis; + margin-top: 5px; + cursor: pointer; } diff --git a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx index cd5854c..47b963b 100644 --- a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx +++ b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx @@ -114,7 +114,12 @@ function PlayerTrendsPage(): React.ReactElement { }, []); return ( - +
{isLoading ? ( ) : data.length === 0 ? ( @@ -142,134 +147,133 @@ function PlayerTrendsPage(): React.ReactElement { color: getColorByPositionType('GK'), }, ].map((item) => { + const thisPositionPlayers = data.filter( + (player) => player.positionType === item.position, + ); + if (thisPositionPlayers.length === 0) { + return null; + } return ( -
+

{item.text}

- {data - .filter((player) => player.positionType === item.position) - .map((player) => { - return ( + {thisPositionPlayers.map((player) => { + return ( + - - -

{player.preferredposition1}

-
-
{player.preferredposition1} + +
{ + navigate(`/players-detail?id=${player.playerID}`); + }} + > + player { + e.currentTarget.src = player_avatar_placeholder; }} + /> +
+ +

{player.playerName}

+ Player ID: {player.playerID} + + } + position={'right'} + > + { navigate(`/players-detail?id=${player.playerID}`); }} > - player { - e.currentTarget.src = player_avatar_placeholder; - }} - /> -
- -

{player.playerName}

- Player ID: {player.playerID} - - } - position={'right'} - > - { - navigate( - `/players-detail?id=${player.playerID}`, - ); - }} - > - {player.playerName} - {' '} -
-
- - - - - - } /> - - - + {player.playerName} + +
- ); - })} + + + + + + } /> + + + +
+ ); + })}
); }) )} - +
); } From 67804ec5b9b9d9f51f96207de1fc82ae6fd0f287 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 12 Dec 2024 18:57:39 +0800 Subject: [PATCH 10/37] set list page header height --- src/pages/PlayerListPage/PlayerListPage.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/pages/PlayerListPage/PlayerListPage.tsx b/src/pages/PlayerListPage/PlayerListPage.tsx index 9623f5a..a03b801 100644 --- a/src/pages/PlayerListPage/PlayerListPage.tsx +++ b/src/pages/PlayerListPage/PlayerListPage.tsx @@ -23,7 +23,7 @@ const { Text } = Typography; const PlayerListColumn = (localeData: any, navigate: any) => [ { - title: '', + title:
, dataIndex: 'imageUrl', render: (text: string, record: PlayerOverall, index: number) => { return ( @@ -288,8 +288,6 @@ function PlayerListPage(): React.ReactElement { sticky={{ top: 0 }} style={{ minWidth: '800px', - marginTop: '10px', - marginBottom: '100px', scroll: null, }} columns={PlayerListColumn(localeData, navigate)} From 21f5aaf0cab14875918fa4ebb93b88527381011c Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 12 Dec 2024 19:23:43 +0800 Subject: [PATCH 11/37] add search feature --- src/pages/PlayerListPage/PlayerListPage.tsx | 41 +++++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/src/pages/PlayerListPage/PlayerListPage.tsx b/src/pages/PlayerListPage/PlayerListPage.tsx index a03b801..29482c0 100644 --- a/src/pages/PlayerListPage/PlayerListPage.tsx +++ b/src/pages/PlayerListPage/PlayerListPage.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import { + Input, LocaleConsumer, Popover, Space, @@ -21,7 +22,12 @@ import player_avatar_placeholder from '../../assets/image/player_avatar_placehol const { Text } = Typography; -const PlayerListColumn = (localeData: any, navigate: any) => [ +const PlayerListColumn = ( + localeData: any, + navigate: any, + searchValue: string, + setSearchValue: React.Dispatch>, +) => [ { title:
, dataIndex: 'imageUrl', @@ -49,7 +55,19 @@ const PlayerListColumn = (localeData: any, navigate: any) => [ }, }, { - title: localeData.name, + title: ( + + {localeData.name} + { + setSearchValue(e); + }} + showClear + /> + + ), dataIndex: 'playerName', render: (text: string, record: PlayerOverall, index: number) => { return ( @@ -260,6 +278,8 @@ const PlayerListColumn = (localeData: any, navigate: any) => [ function PlayerListPage(): React.ReactElement { const [isLoading, setIsLoading] = React.useState(true); const [data, setData] = React.useState([]); + const [filteredData, setFilteredData] = React.useState([]); + const [searchValue, setSearchValue] = React.useState(''); const navigate = useNavigate(); const getPlayerList = async () => { @@ -267,6 +287,7 @@ function PlayerListPage(): React.ReactElement { players.forEach((player) => { player.imageUrl = getAvatarUrl(player.playerID); }); + setFilteredData(players); // 初始化过滤后的数据 setData(players); setIsLoading(false); }; @@ -275,6 +296,13 @@ function PlayerListPage(): React.ReactElement { getPlayerList().then(); }, []); + useEffect(() => { + const filtered = data.filter((player) => + player.playerName.toLowerCase().includes(searchValue.toLowerCase()), + ); + setFilteredData(filtered); + }, [searchValue, data]); + return (
{isLoading ? ( @@ -290,8 +318,13 @@ function PlayerListPage(): React.ReactElement { minWidth: '800px', scroll: null, }} - columns={PlayerListColumn(localeData, navigate)} - dataSource={data} + columns={PlayerListColumn( + localeData, + navigate, + searchValue, + setSearchValue, + )} // 传递 searchValue 和 setSearchValue + dataSource={filteredData} // 使用过滤后的数据 pagination={false} size="small" /> From e941936bea18959a7c474cb38bec87fdbbee1898 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Fri, 13 Dec 2024 16:15:17 +0800 Subject: [PATCH 12/37] add search icon --- src/pages/PlayerListPage/PlayerListPage.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/PlayerListPage/PlayerListPage.tsx b/src/pages/PlayerListPage/PlayerListPage.tsx index 29482c0..b5eae54 100644 --- a/src/pages/PlayerListPage/PlayerListPage.tsx +++ b/src/pages/PlayerListPage/PlayerListPage.tsx @@ -17,7 +17,7 @@ import { getRankingColor, } from '../../common/player-helper.ts'; import { LoadingComponent, NoDataComponent } from '../../components/Other.tsx'; -import { IconActivity } from '@douyinfe/semi-icons'; +import { IconActivity, IconSearch } from '@douyinfe/semi-icons'; import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.svg'; const { Text } = Typography; @@ -59,6 +59,7 @@ const PlayerListColumn = ( {localeData.name} } placeholder="" style={{ width: 100 }} onChange={(e: any) => { From 83dcf2d8003792a0ce94bca8983955a6c03dd170 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Fri, 13 Dec 2024 17:43:05 +0800 Subject: [PATCH 13/37] add PlayerPickerComponent.tsx --- .../PlayerPickerComponent.css | 28 ++++++ .../PlayerPickerComponent.tsx | 88 +++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 src/pages/PlayerDetailPage/PlayerPickerComponent.css create mode 100644 src/pages/PlayerDetailPage/PlayerPickerComponent.tsx diff --git a/src/pages/PlayerDetailPage/PlayerPickerComponent.css b/src/pages/PlayerDetailPage/PlayerPickerComponent.css new file mode 100644 index 0000000..40990b6 --- /dev/null +++ b/src/pages/PlayerDetailPage/PlayerPickerComponent.css @@ -0,0 +1,28 @@ +.player-picker-container { + width: 100%; + min-height: 100px; + display: flex; + background-color: #f4f5f5; + flex-wrap: wrap; + align-items: center; +} + +.player-item { + margin-left: 8px; + margin-top: 5px; + background-color: #eaecec; + color: black; + padding: 6px; + cursor: pointer; + border-radius: 3px; + font-weight: bold; +} + +.player-item.selected { + background-color: #aaef88; +} + +.player-position { + font-weight: bolder; + margin-right: 5px; +} diff --git a/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx b/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx new file mode 100644 index 0000000..637d8cd --- /dev/null +++ b/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx @@ -0,0 +1,88 @@ +import React, { useEffect, useState } from 'react'; +import { PlayerApis, PlayerOverall } from '../../service/PlayerApis.ts'; +import { + getAvatarUrl, + getColorByPositionType, +} from '../../common/player-helper.ts'; +import { LoadingComponent } from '../../components/Other.tsx'; +import './PlayerPickerComponent.css'; + +interface PlayerPickerComponentProps { + playerDetail: any; + playerID: number; + setPlayerID: (id: number) => void; +} + +const PlayerPickerComponent: React.FC = ({ + playerDetail, + playerID, + setPlayerID, +}) => { + const [playerList, setPlayerList] = useState([]); + const [isLoading, setIsLoading] = useState(true); + + const getPlayerList = async () => { + // sleep 3 seconds + await new Promise((resolve) => setTimeout(resolve, 3000)); + const players: PlayerOverall[] = await PlayerApis.getPlayerList(); + players.forEach((player) => { + player.imageUrl = getAvatarUrl(player.playerID); + }); + setPlayerList(players); + setIsLoading(false); + }; + + useEffect(() => { + getPlayerList().then(); + }, []); + + const handlePlayerSelect = (id: number) => { + setPlayerID(id); + }; + + return ( +
+ {isLoading ? ( + + ) : ( + playerList + ?.sort((a: PlayerOverall, b: PlayerOverall) => { + const positionTypeMap = { + GK: 1, + DEF: 2, + MID: 3, + FOR: 4, + }; + return ( + positionTypeMap[a.positionType] - + positionTypeMap[b.positionType] || + a.position1.localeCompare(b.position1) + ); + }) + .map((player: any) => { + return ( +
handlePlayerSelect(player.playerID)} + > + + {player.position1} + + {player.playerName} +
+ ); + }) + )} +
+ ); +}; + +export default PlayerPickerComponent; From 285065a5f0ece5836c68d630a3fc2531fefa434b Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Fri, 13 Dec 2024 17:44:59 +0800 Subject: [PATCH 14/37] remove chinese comment --- src/pages/PlayerListPage/PlayerListPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/PlayerListPage/PlayerListPage.tsx b/src/pages/PlayerListPage/PlayerListPage.tsx index b5eae54..9650f07 100644 --- a/src/pages/PlayerListPage/PlayerListPage.tsx +++ b/src/pages/PlayerListPage/PlayerListPage.tsx @@ -288,7 +288,7 @@ function PlayerListPage(): React.ReactElement { players.forEach((player) => { player.imageUrl = getAvatarUrl(player.playerID); }); - setFilteredData(players); // 初始化过滤后的数据 + setFilteredData(players); setData(players); setIsLoading(false); }; From 61228be258992e14c0d8da45d3d298d1a5f83d6c Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Fri, 13 Dec 2024 17:46:42 +0800 Subject: [PATCH 15/37] refactor the PlayerDetailPage.tsx --- .../PlayerDetailPage/PlayerDetailPage.tsx | 789 +++++++++--------- src/service/PlayerApis.ts | 1 - 2 files changed, 374 insertions(+), 416 deletions(-) diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx index 5e898a6..857b265 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx @@ -8,11 +8,7 @@ import { Row, Space, } from '@douyinfe/semi-ui'; -import { - PlayerApis, - PlayerDetail, - PlayerOverall, -} from '../../service/PlayerApis.ts'; +import { PlayerApis, PlayerDetail } from '../../service/PlayerApis.ts'; import './PlayerDetailPage.css'; import { Area, @@ -37,6 +33,7 @@ import { import { CustomTooltip } from '../PlayerTrendsPage/PlayerTrendsPage.tsx'; import { LoadingComponent, NoDataComponent } from '../../components/Other.tsx'; import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.svg'; +import PlayerPickerComponent from './PlayerPickerComponent'; function PlayerDetailPage(): React.ReactElement { const [searchParams] = useSearchParams(); @@ -94,436 +91,398 @@ function PlayerDetailPage(): React.ReactElement { ); }; - return isLoading ? ( - - ) : playerDetail ? ( + return playerDetail ? ( {(localeData: any, localeCode: string, dateFnsLocale: any) => (
- {/* Player picker */} -
- {playerDetail?.allPlayer - ?.sort((a: PlayerOverall, b: PlayerOverall) => { - const positionTypeMap = { - GK: 1, - DEF: 2, - MID: 3, - FOR: 4, - }; - return ( - positionTypeMap[a.positionType] - - positionTypeMap[b.positionType] || - a.position1.localeCompare(b.position1) - ); - }) - .map((player) => { - return ( + {/* Player picker ---- start */} + + {/* Player picker ---- end */} + + {isLoading ? ( + + ) : playerDetail?.thisPlayer == null ? ( + + ) : ( + // Detail info +
+
+ {/* Basic info*/} +
{ - setPlayerID(player.playerID); + padding: '10px', + alignItems: 'center', + justifyContent: 'center', + textAlign: 'center', }} > - { + e.currentTarget.src = player_avatar_placeholder; + }} + /> + {/* Name */} +
+ {playerDetail?.thisPlayer?.player_name} +
+ {/* Position */} +

- {player.position1} + { + PLAYER_PRIMARY_POS_NAME[ + playerDetail?.thisPlayer?.preferredposition1 || 0 + ] + } +

+ {/* Overall Rating -> Potential */} + + + {playerDetail?.thisPlayer?.overallrating} + + {'→'} + + {playerDetail?.thisPlayer?.potential} + + +
+ + {/*Player ID*/} +
+ + {localeData.BasicInfo.PlayerID}: + + + {playerDetail?.thisPlayer?.player_id} - {player.playerName}
- ); - })} -
+ {/*Age*/} +
+ + {localeData.BasicInfo.Age}: + + + {playerDetail?.thisPlayer?.age} + +
+ {/*AcceleRATE Controlled Explosive*/} + + {/*Skills*/} +
+ + {localeData.BasicInfo.Skills}: + + + {/*{playerDetail?.thisPlayer?.skillmoves}*/} + + +
+ {/*Weak Foot*/} +
+ + {localeData.BasicInfo.WeakFoot}: + + + + +
+ {/*Foot Right*/} +
+ + {localeData.BasicInfo.Foot}: + + + {(playerDetail?.thisPlayer?.preferredfoot || 1) === 1 + ? 'Right' + : 'Left'} + +
+ {/*Height 177cm | 5'10"*/} +
+ + {localeData.BasicInfo.Height}: + + + {playerDetail?.thisPlayer?.height} cm + +
+ {/*Weight 67*/} +
+ + {localeData.BasicInfo.Weight}: + + + {playerDetail?.thisPlayer?.weight} kg + +
+ {/*Att. WR High*/} +
+ + {localeData.BasicInfo.AttackingWorkRate}: + + + {getWorkRateText( + playerDetail?.thisPlayer?.attackingworkrate, + )} + +
+ {/*Def. WR High*/} +
+ + {localeData.BasicInfo.DefensiveWorkRate}: + + + {getWorkRateText( + playerDetail?.thisPlayer?.defensiveworkrate, + )} + +
+
- {/* Detail info */} -
- {/* Basic info*/} -
-
+ {playerDetail?.thisPlayer?.preferredposition1 == 0 && ( + + + + )} + + + + + + + + + + + + +
+
+ {/* Trends */} + - {/* Image */} - player_avatar { - e.currentTarget.src = player_avatar_placeholder; - }} - /> - {/* Name */} -
- {playerDetail?.thisPlayer?.player_name} -
- {/* Position */} -

- { - PLAYER_PRIMARY_POS_NAME[ - playerDetail?.thisPlayer?.preferredposition1 || 0 - ] - } -

- {/* Overall Rating -> Potential */} - - + - {playerDetail?.thisPlayer?.overallrating} - - {'→'} - - {playerDetail?.thisPlayer?.potential} - - -
- - {/*Player ID*/} -
- - {localeData.BasicInfo.PlayerID}: - - - {playerDetail?.thisPlayer?.player_id} - -
- {/*Age*/} -
- {localeData.BasicInfo.Age}: - - {playerDetail?.thisPlayer?.age} - -
- {/*AcceleRATE Controlled Explosive*/} - - {/*Skills*/} -
- - {localeData.BasicInfo.Skills}: - - - {/*{playerDetail?.thisPlayer?.skillmoves}*/} - - -
- {/*Weak Foot*/} -
- - {localeData.BasicInfo.WeakFoot}: - - - - -
- {/*Foot Right*/} -
- {localeData.BasicInfo.Foot}: - - {(playerDetail?.thisPlayer?.preferredfoot || 1) === 1 - ? 'Right' - : 'Left'} - -
- {/*Height 177cm | 5'10"*/} -
- - {localeData.BasicInfo.Height}: - - - {playerDetail?.thisPlayer?.height} cm - -
- {/*Weight 67*/} -
- - {localeData.BasicInfo.Weight}: - - - {playerDetail?.thisPlayer?.weight} kg - -
- {/*Att. WR High*/} -
- - {localeData.BasicInfo.AttackingWorkRate}: - - - {getWorkRateText(playerDetail?.thisPlayer?.attackingworkrate)} - -
- {/*Def. WR High*/} -
- - {localeData.BasicInfo.DefensiveWorkRate}: - - - {getWorkRateText(playerDetail?.thisPlayer?.defensiveworkrate)} - -
-
- - {/* Details */} -
- {playerDetail?.thisPlayer?.preferredposition1 == 0 && ( - - - - )} - - - - - - - - - - - - + {/* 网格 */} + + {/* X轴 */} + + {/* Y轴 */} + + {/* 提示 */} + } /> + {/* 数据 */} + + + + +
-
- - {/* Trends */} - - - - {/* 网格 */} - - {/* X轴 */} - - {/* Y轴 */} - - {/* 提示 */} - } /> - {/* 数据 */} - - - - - + )}
)}
diff --git a/src/service/PlayerApis.ts b/src/service/PlayerApis.ts index bd580d2..b8e674c 100644 --- a/src/service/PlayerApis.ts +++ b/src/service/PlayerApis.ts @@ -96,7 +96,6 @@ export interface PlayerModel { } export interface PlayerDetail { - allPlayer: PlayerOverall[]; thisPlayer: PlayerModel; trends: PlayerTrend[]; } From ba96f27fb6880cfef539445328ecaf8e6bdc0dd0 Mon Sep 17 00:00:00 2001 From: Veeja Liu Date: Fri, 13 Dec 2024 23:03:15 +0800 Subject: [PATCH 16/37] Change font-family --- src/index.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.css b/src/index.css index 93e6296..9e79ff0 100644 --- a/src/index.css +++ b/src/index.css @@ -1,5 +1,5 @@ #root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; + font-family: system-ui, -apple-system, BlinkMacSystemFont, PingFang SC, Hiragino Sans GB, Microsoft YaHei, "\5FAE\8F6F\96C5\9ED1", helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, Arial, sans-serif; font-size: 1rem; line-height: 1.5; font-weight: 400; From 71eae538a9b0e074c2a0697f76ce311369125cde Mon Sep 17 00:00:00 2001 From: Veeja Liu Date: Fri, 13 Dec 2024 23:03:56 +0800 Subject: [PATCH 17/37] notification style improvement --- src/App.tsx | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 5d785de..72b1f69 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -263,8 +263,6 @@ export default function App() { footer={
} - > - {unreadNotificationCount > 0 && ( - - )} - + style={{ + color: 'var(--semi-color-text-2)', + marginRight: '12px', + display: 'relative', + }} + > + {unreadNotificationCount > 0 && ( + + )} Date: Sat, 14 Dec 2024 11:30:06 +0800 Subject: [PATCH 18/37] UI improvement --- src/App.css | 1 + src/common/player-helper.ts | 27 +- .../PlayerDetailPage/BasicInfoComponent.css | 35 +++ .../PlayerDetailPage/BasicInfoComponent.tsx | 160 ++++++++++++ .../PlayerDetailPage/PlayerDetailPage.css | 36 +-- .../PlayerDetailPage/PlayerDetailPage.tsx | 230 ++---------------- .../PlayerPickerComponent.css | 40 +-- .../PlayerPickerComponent.tsx | 88 ++++--- 8 files changed, 319 insertions(+), 298 deletions(-) create mode 100644 src/pages/PlayerDetailPage/BasicInfoComponent.css create mode 100644 src/pages/PlayerDetailPage/BasicInfoComponent.tsx diff --git a/src/App.css b/src/App.css index 762e43b..f62dba2 100644 --- a/src/App.css +++ b/src/App.css @@ -2,6 +2,7 @@ display: flex; flex-direction: column; height: 100vh; + font-size: 14px; } .nav { diff --git a/src/common/player-helper.ts b/src/common/player-helper.ts index 214f171..fccec91 100644 --- a/src/common/player-helper.ts +++ b/src/common/player-helper.ts @@ -15,22 +15,21 @@ export function getColorByPositionType(positionType: string) { } export function getColorByOverallRating(overallRating: number) { - // 40 - #d31332 - // 50 - #d31332 - // 60 - #f7b702 - // 70 - #36b84b - // 80 - #268535 - // 90 - #268535 - if (overallRating < 50) { - return '#d31332'; - } else if (overallRating < 60) { - return '#f7b702'; - } else if (overallRating < 70) { - return '#36b84b'; + if (overallRating <= 50) { + // 40 < overallRating <= 50 + return '#e03131'; + } else if (overallRating <= 60) { + // 50 < overallRating <= 60 + return '#fd7e14'; + } else if (overallRating <= 70) { + // 60 < overallRating <= 70 + return '#fcc419'; } else if (overallRating < 80) { - return '#268535'; + // 70 < overallRating < 80 + return '#66a80f'; } else { - return '#268535'; + // 80 < overallRating + return '#2b8a3e'; } } diff --git a/src/pages/PlayerDetailPage/BasicInfoComponent.css b/src/pages/PlayerDetailPage/BasicInfoComponent.css new file mode 100644 index 0000000..163c05f --- /dev/null +++ b/src/pages/PlayerDetailPage/BasicInfoComponent.css @@ -0,0 +1,35 @@ +.basic-info-container { + width: 25%; + padding: 20px; + margin: 0 10px; + border-radius: 8px; + background: var(--semi-color-bg-0); +} + +.basic-info-container .image-and-name { + text-align: center; +} + + +.stat { + display: flex; + justify-content: space-between; +} + +.stat-label { + width: 80%; + font-weight: 200; +} + +.stat-info-value { + text-align: right; + width: 50%; +} + +.stat-value { + padding: 1px 3px; + margin: 1px; + text-align: right; + color: white; + border-radius: 2px; +} \ No newline at end of file diff --git a/src/pages/PlayerDetailPage/BasicInfoComponent.tsx b/src/pages/PlayerDetailPage/BasicInfoComponent.tsx new file mode 100644 index 0000000..da2307c --- /dev/null +++ b/src/pages/PlayerDetailPage/BasicInfoComponent.tsx @@ -0,0 +1,160 @@ +import { + getAvatarUrl, + getColorByOverallRating, + getColorByPositionType, + getWorkRateText, +} from '../../common/player-helper.ts'; +import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.svg'; +import { + PLAYER_PRIMARY_POS_NAME, + PLAYER_PRIMARY_POS_TYPE, +} from '../../constant/player.ts'; +import { Rating, Space } from '@douyinfe/semi-ui'; +import React, { useEffect, useState } from 'react'; +import { getDefaultGameVersion } from '../../common/common.ts'; +import './BasicInfoComponent.css'; + +interface BasicInfoComponentProps { + playerInfo: any; + localeData: any; +} + +const BasicInfoComponent: React.FC = ({ + playerInfo, + localeData, +}) => { + const [gameVersion, setGameVersion] = useState(0); + + useEffect(() => { + getDefaultGameVersion().then((version) => { + setGameVersion(version); + }); + }, []); + + return ( +
+
+ {/* Image */} + player_avatar { + e.currentTarget.src = player_avatar_placeholder; + }} + /> + {/* Name */} +
{playerInfo?.player_name}
+ {/* Position */} +

+ {PLAYER_PRIMARY_POS_NAME[playerInfo?.preferredposition1 || 0]} +

+ {/* Overall Rating -> Potential */} + + + {playerInfo?.overallrating} + + {'→'} + + {playerInfo?.potential} + + +
+ + {/*Player ID*/} +
+ {localeData.BasicInfo.PlayerID} + {playerInfo?.player_id} +
+ {/*Age*/} +
+ {localeData.BasicInfo.Age} + {playerInfo?.age} +
+ {/*AcceleRATE Controlled Explosive*/} + + {/*Skills*/} +
+ {localeData.BasicInfo.Skills} + + {/*{playerInfo?.skillmoves}*/} + + +
+ {/*Weak Foot*/} +
+ {localeData.BasicInfo.WeakFoot}: + + + +
+ {/*Foot Right*/} +
+ {localeData.BasicInfo.Foot}: + + {(playerInfo?.preferredfoot || 1) === 1 ? 'Right' : 'Left'} + +
+ {/*Height 177cm | 5'10"*/} +
+ {localeData.BasicInfo.Height}: + {playerInfo?.height} cm +
+ {/*Weight 67*/} +
+ {localeData.BasicInfo.Weight}: + {playerInfo?.weight} kg +
+ + {gameVersion === 24 && ( + <> + {/*Att. WR High*/} +
+ + {localeData.BasicInfo.AttackingWorkRate}: + + + {getWorkRateText(playerInfo?.attackingworkrate)} + +
+ {/*Def. WR High*/} +
+ + {localeData.BasicInfo.DefensiveWorkRate}: + + + {getWorkRateText(playerInfo?.defensiveworkrate)} + +
+ + )} +
+ ); +}; + +export default BasicInfoComponent; diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.css b/src/pages/PlayerDetailPage/PlayerDetailPage.css index dda724b..cc99130 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.css +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.css @@ -1,3 +1,13 @@ +.detail-page-root { + /* 隐藏滚动条 */ + scrollbar-width: none; + -ms-overflow-style: none; +} + +.detail-page-root::-webkit-scrollbar { + display: none; +} + .col-content { background: var(--semi-color-bg-0); padding: 10px; @@ -5,32 +15,12 @@ max-width: 600px; margin: 3px; border-radius: 8px; + font-size: 14px; } -.col-content h2 { +.col-content .title { margin-bottom: 5px; -} - -.stat { - display: flex; - justify-content: space-between; - padding: 1px 0; -} - -.stat-label { + font-size: 16px; font-weight: bold; - width: 50%; } -.stat-info-value { - text-align: right; - /*font-weight: bold;*/ - width: 50%; -} - -.stat-value { - text-align: right; - font-weight: bold; - color: #12AB13; - width: 50%; -} \ No newline at end of file diff --git a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx index 857b265..643b7e3 100644 --- a/src/pages/PlayerDetailPage/PlayerDetailPage.tsx +++ b/src/pages/PlayerDetailPage/PlayerDetailPage.tsx @@ -1,13 +1,6 @@ import * as React from 'react'; import { useEffect, useState } from 'react'; -import { - Col, - LocaleConsumer, - Progress, - Rating, - Row, - Space, -} from '@douyinfe/semi-ui'; +import { Col, LocaleConsumer, Progress, Row, Space } from '@douyinfe/semi-ui'; import { PlayerApis, PlayerDetail } from '../../service/PlayerApis.ts'; import './PlayerDetailPage.css'; import { @@ -19,21 +12,12 @@ import { XAxis, YAxis, } from 'recharts'; -import { - PLAYER_PRIMARY_POS_NAME, - PLAYER_PRIMARY_POS_TYPE, -} from '../../constant/player.ts'; import { useSearchParams } from 'react-router-dom'; -import { - getAvatarUrl, - getColorByOverallRating, - getColorByPositionType, - getWorkRateText, -} from '../../common/player-helper.ts'; import { CustomTooltip } from '../PlayerTrendsPage/PlayerTrendsPage.tsx'; import { LoadingComponent, NoDataComponent } from '../../components/Other.tsx'; -import player_avatar_placeholder from '../../assets/image/player_avatar_placeholder.svg'; import PlayerPickerComponent from './PlayerPickerComponent'; +import BasicInfoComponent from './BasicInfoComponent.tsx'; +import { getColorByOverallRating } from '../../common/player-helper.ts'; function PlayerDetailPage(): React.ReactElement { const [searchParams] = useSearchParams(); @@ -74,16 +58,19 @@ function PlayerDetailPage(): React.ReactElement { return (
-

{title}

- + {title} + {attributes.map((attr, index) => (
{attr.label} - {values[index]} + + {values[index]} +
))}
@@ -94,10 +81,9 @@ function PlayerDetailPage(): React.ReactElement { return playerDetail ? ( {(localeData: any, localeCode: string, dateFnsLocale: any) => ( -
+
{/* Player picker ---- start */} @@ -109,185 +95,19 @@ function PlayerDetailPage(): React.ReactElement { ) : ( // Detail info -
+
{/* Basic info*/} -
-
- {/* Image */} - player_avatar { - e.currentTarget.src = player_avatar_placeholder; - }} - /> - {/* Name */} -
- {playerDetail?.thisPlayer?.player_name} -
- {/* Position */} -

- { - PLAYER_PRIMARY_POS_NAME[ - playerDetail?.thisPlayer?.preferredposition1 || 0 - ] - } -

- {/* Overall Rating -> Potential */} - - - {playerDetail?.thisPlayer?.overallrating} - - {'→'} - - {playerDetail?.thisPlayer?.potential} - - -
- - {/*Player ID*/} -
- - {localeData.BasicInfo.PlayerID}: - - - {playerDetail?.thisPlayer?.player_id} - -
- {/*Age*/} -
- - {localeData.BasicInfo.Age}: - - - {playerDetail?.thisPlayer?.age} - -
- {/*AcceleRATE Controlled Explosive*/} - - {/*Skills*/} -
- - {localeData.BasicInfo.Skills}: - - - {/*{playerDetail?.thisPlayer?.skillmoves}*/} - - -
- {/*Weak Foot*/} -
- - {localeData.BasicInfo.WeakFoot}: - - - - -
- {/*Foot Right*/} -
- - {localeData.BasicInfo.Foot}: - - - {(playerDetail?.thisPlayer?.preferredfoot || 1) === 1 - ? 'Right' - : 'Left'} - -
- {/*Height 177cm | 5'10"*/} -
- - {localeData.BasicInfo.Height}: - - - {playerDetail?.thisPlayer?.height} cm - -
- {/*Weight 67*/} -
- - {localeData.BasicInfo.Weight}: - - - {playerDetail?.thisPlayer?.weight} kg - -
- {/*Att. WR High*/} -
- - {localeData.BasicInfo.AttackingWorkRate}: - - - {getWorkRateText( - playerDetail?.thisPlayer?.attackingworkrate, - )} - -
- {/*Def. WR High*/} -
- - {localeData.BasicInfo.DefensiveWorkRate}: - - - {getWorkRateText( - playerDetail?.thisPlayer?.defensiveworkrate, - )} - -
-
+ {/* Details */}
diff --git a/src/pages/PlayerDetailPage/PlayerPickerComponent.css b/src/pages/PlayerDetailPage/PlayerPickerComponent.css index 40990b6..fd00ab7 100644 --- a/src/pages/PlayerDetailPage/PlayerPickerComponent.css +++ b/src/pages/PlayerDetailPage/PlayerPickerComponent.css @@ -1,28 +1,32 @@ .player-picker-container { - width: 100%; - min-height: 100px; - display: flex; - background-color: #f4f5f5; - flex-wrap: wrap; - align-items: center; + padding: 5px; + min-height: 100px; + display: flex; + background-color: #f4f5f5; + flex-wrap: wrap; + align-items: center; + border-bottom: 1px solid #d3d3d3; + position: sticky; + top: 0; + z-index: 10; + } .player-item { - margin-left: 8px; - margin-top: 5px; - background-color: #eaecec; - color: black; - padding: 6px; - cursor: pointer; - border-radius: 3px; - font-weight: bold; + margin: 4px; + background-color: #eaecec; + color: black; + padding: 4px; + cursor: pointer; + border-radius: 4px; + font-size: 12px; } .player-item.selected { - background-color: #aaef88; + background-color: #aaef88; } .player-position { - font-weight: bolder; - margin-right: 5px; -} + font-weight: bolder; + margin-right: 5px; +} \ No newline at end of file diff --git a/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx b/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx index 637d8cd..ce6c8fd 100644 --- a/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx +++ b/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx @@ -6,15 +6,15 @@ import { } from '../../common/player-helper.ts'; import { LoadingComponent } from '../../components/Other.tsx'; import './PlayerPickerComponent.css'; +import { IconRefresh } from '@douyinfe/semi-icons'; +import { Button } from '@douyinfe/semi-ui'; interface PlayerPickerComponentProps { - playerDetail: any; playerID: number; setPlayerID: (id: number) => void; } const PlayerPickerComponent: React.FC = ({ - playerDetail, playerID, setPlayerID, }) => { @@ -22,8 +22,7 @@ const PlayerPickerComponent: React.FC = ({ const [isLoading, setIsLoading] = useState(true); const getPlayerList = async () => { - // sleep 3 seconds - await new Promise((resolve) => setTimeout(resolve, 3000)); + setIsLoading(true); const players: PlayerOverall[] = await PlayerApis.getPlayerList(); players.forEach((player) => { player.imageUrl = getAvatarUrl(player.playerID); @@ -45,41 +44,54 @@ const PlayerPickerComponent: React.FC = ({ {isLoading ? ( ) : ( - playerList - ?.sort((a: PlayerOverall, b: PlayerOverall) => { - const positionTypeMap = { - GK: 1, - DEF: 2, - MID: 3, - FOR: 4, - }; - return ( - positionTypeMap[a.positionType] - - positionTypeMap[b.positionType] || - a.position1.localeCompare(b.position1) - ); - }) - .map((player: any) => { - return ( -
handlePlayerSelect(player.playerID)} - > - + {playerList + ?.sort((a: PlayerOverall, b: PlayerOverall) => { + const positionTypeMap = { + GK: 1, + DEF: 2, + MID: 3, + FOR: 4, + }; + return ( + positionTypeMap[a.positionType] - + positionTypeMap[b.positionType] || + a.position1.localeCompare(b.position1) + ); + }) + .map((player: any) => { + return ( +
handlePlayerSelect(player.playerID)} > - {player.position1} - - {player.playerName} -
- ); - }) + + {player.position1} + + {player.playerName} +
+ ); + })} + + )}
); From afa34b9ddcb3bfe4e0c6055e612ee68798b7f31e Mon Sep 17 00:00:00 2001 From: Veeja Liu Date: Sat, 14 Dec 2024 12:16:34 +0800 Subject: [PATCH 19/37] UX improvement --- src/pages/PlayerDetailPage/PlayerPickerComponent.tsx | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx b/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx index ce6c8fd..7614ac1 100644 --- a/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx +++ b/src/pages/PlayerDetailPage/PlayerPickerComponent.tsx @@ -1,9 +1,6 @@ import React, { useEffect, useState } from 'react'; import { PlayerApis, PlayerOverall } from '../../service/PlayerApis.ts'; -import { - getAvatarUrl, - getColorByPositionType, -} from '../../common/player-helper.ts'; +import { getColorByPositionType } from '../../common/player-helper.ts'; import { LoadingComponent } from '../../components/Other.tsx'; import './PlayerPickerComponent.css'; import { IconRefresh } from '@douyinfe/semi-icons'; @@ -24,10 +21,10 @@ const PlayerPickerComponent: React.FC = ({ const getPlayerList = async () => { setIsLoading(true); const players: PlayerOverall[] = await PlayerApis.getPlayerList(); - players.forEach((player) => { - player.imageUrl = getAvatarUrl(player.playerID); - }); setPlayerList(players); + if (!playerID && players.length > 0) { + setPlayerID(players[0].playerID); + } setIsLoading(false); }; From cf9427d6036658ace2150d6b79a9ce9265d5a6ac Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Mon, 16 Dec 2024 11:26:07 +0800 Subject: [PATCH 20/37] Add pagination in Notification Popup --- src/components/NotificationPopover.css | 7 +++- src/components/NotificationPopover.tsx | 55 ++++++++++++++++++-------- src/service/NotificationApis.ts | 32 +++++++++++++-- 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/src/components/NotificationPopover.css b/src/components/NotificationPopover.css index 42e0a95..63261bb 100644 --- a/src/components/NotificationPopover.css +++ b/src/components/NotificationPopover.css @@ -1,5 +1,5 @@ .notification-item { - border-radius: 4px; + border-radius: 10px; padding: 10px; margin: 15px; } @@ -19,6 +19,7 @@ .notification-label { width: 100px; font-size: 0.8rem; + font-weight: 300; } .notification-values { @@ -32,3 +33,7 @@ .notification-arrow { width: 30px; } + +.notification-pagination { + margin: 8px auto; +} \ No newline at end of file diff --git a/src/components/NotificationPopover.tsx b/src/components/NotificationPopover.tsx index d1d1269..5d289c1 100644 --- a/src/components/NotificationPopover.tsx +++ b/src/components/NotificationPopover.tsx @@ -1,4 +1,4 @@ -import { LocaleConsumer, Switch, Tooltip } from '@douyinfe/semi-ui'; +import { LocaleConsumer, Pagination, Switch, Tooltip } from '@douyinfe/semi-ui'; import { IconCheckChoiceStroked } from '@douyinfe/semi-icons'; import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -180,7 +180,7 @@ function getNotificationItem( e.preventDefault(); navigate(`/players-detail/?id=${notification.player_id}`); }} - style={{ color: '#333' }} + style={{ color: '#333', cursor: 'pointer' }} > {notification.player_name} @@ -232,25 +232,39 @@ interface NotificationPopoverProps { updateUnreadCount: () => void; } +const PAGE_SIZE = 10; + export const NotificationPopover = ({ updateUnreadCount, }: NotificationPopoverProps) => { - const [notificationList, setNotificationList] = useState( - [], - ); + const [notificationList, setNotificationList] = useState<{ + total: number; + items: NotificationBody[]; + }>({ + total: 0, + items: [], + }); const [onlyShowUnread, setOnlyShowUnread] = useState(false); const navigate = useNavigate(); + const [currentPage, setCurrentPage] = useState(1); const fetchNotificationList = async () => { - const notificationList = await NotificationApis.getAllNotifications(); + const notificationList = await NotificationApis.getAllNotifications({ + page: currentPage, + limit: PAGE_SIZE, + onlyUnread: onlyShowUnread, + }); console.log('[fetchNotificationList] notificationList:', notificationList); setNotificationList(notificationList); + if (notificationList?.items?.length === 0) { + setCurrentPage(1); + } updateUnreadCount(); }; useEffect(() => { - fetchNotificationList(); - }, []); + fetchNotificationList().then(); + }, [currentPage, onlyShowUnread]); return ( @@ -315,15 +329,9 @@ export const NotificationPopover = ({ {/* Header ---- End */} {/* Content ---- Start */} -
- {notificationList - .filter( +
+ {notificationList?.items + ?.filter( (notification) => !onlyShowUnread || !notification.is_read, ) .map((notification: any, index: number) => ( @@ -343,6 +351,19 @@ export const NotificationPopover = ({
))}
+ + {/* Pagination */} + { + setCurrentPage(page); + }} + > + {/* Pagination ---- End */} + {/* Content ---- End */}
)} diff --git a/src/service/NotificationApis.ts b/src/service/NotificationApis.ts index 847356d..f085b7f 100644 --- a/src/service/NotificationApis.ts +++ b/src/service/NotificationApis.ts @@ -69,13 +69,31 @@ export class NotificationApis { * Get all notifications * @returns NotificationBody[] */ - static async getAllNotifications(): Promise { + static async getAllNotifications({ + page, + limit, + onlyUnread = false, + }: { + page: number; + limit: number; + onlyUnread?: boolean; + }): Promise<{ + total: number; + items: NotificationBody[]; + }> { try { const token = getToken(); const gameVersion = await getDefaultGameVersion(); + const params = new URLSearchParams({ + gameVersion: gameVersion.toString(), + page: page.toString(), + limit: limit.toString(), + onlyUnread: onlyUnread.toString(), + }); + const response = await axios.get( - `${BACKEND_URL}/api/v1/notification/?gameVersion=${gameVersion}`, + `${BACKEND_URL}/api/v1/notification/?${params.toString()}`, { headers: { Accept: '*/*', @@ -86,14 +104,20 @@ export class NotificationApis { if (response.status === 200) { return response.data; } - return []; + return { + total: 0, + items: [], + }; } catch (e: any) { console.log(`[getPlayerList] error code: ${e.response.status}`); console.log(`[getPlayerList] error message: ${e.message}`); if (e.response.status === 401) { Toast.error('Please login first'); } - return []; + return { + total: 0, + items: [], + }; } } From 71fcc0f4558e66fa203f4dc65029d37e2013e7f4 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Mon, 16 Dec 2024 11:30:03 +0800 Subject: [PATCH 21/37] Change the setting page style --- src/pages/SettingsPage/SettingsPage.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/SettingsPage/SettingsPage.tsx b/src/pages/SettingsPage/SettingsPage.tsx index 53224c5..31da79f 100644 --- a/src/pages/SettingsPage/SettingsPage.tsx +++ b/src/pages/SettingsPage/SettingsPage.tsx @@ -76,9 +76,9 @@ function SettingsPage(): React.ReactElement { @@ -87,7 +87,7 @@ function SettingsPage(): React.ReactElement { vertical align={'start'} style={{ - width: '90%', + width: '100%', padding: '10px', border: '1px solid #e8e8e8', borderRadius: '5px', @@ -165,7 +165,7 @@ function SettingsPage(): React.ReactElement { vertical align={'start'} style={{ - width: '90%', + width: '100%', padding: '10px', border: '1px solid #e8e8e8', borderRadius: '5px', From f326f185b9c9bf8b0a42379b5dfdbd883b69f224 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Mon, 16 Dec 2024 11:36:48 +0800 Subject: [PATCH 22/37] refactor ApiSecretKey Setting --- .../SettingsPage/ApiSecretKeyComponent.tsx | 125 ++++++++++++++++++ src/pages/SettingsPage/SettingsPage.tsx | 109 +-------------- 2 files changed, 128 insertions(+), 106 deletions(-) create mode 100644 src/pages/SettingsPage/ApiSecretKeyComponent.tsx diff --git a/src/pages/SettingsPage/ApiSecretKeyComponent.tsx b/src/pages/SettingsPage/ApiSecretKeyComponent.tsx new file mode 100644 index 0000000..cab2ea4 --- /dev/null +++ b/src/pages/SettingsPage/ApiSecretKeyComponent.tsx @@ -0,0 +1,125 @@ +import { Button, Input, Notification, Popover, Space } from '@douyinfe/semi-ui'; +import { IconCopy, IconRefresh2 } from '@douyinfe/semi-icons'; +import * as React from 'react'; +import { UserApis } from '../../service/UserApis.ts'; +import { useEffect } from 'react'; + +export interface ApiSecretKeyComponentProps { + localeData: any; +} + +function ApiSecretKeyComponent({ + localeData, +}: ApiSecretKeyComponentProps): React.ReactElement { + const [secretKey, setSecretKey] = React.useState(''); + const [isLoading, setIsLoading] = React.useState(true); + + async function fetchSecretKey() { + const key = await UserApis.getSecretKey(); + console.log(`[fetchSecretKey] key: ${key}`); + setSecretKey(key); + setIsLoading(false); + } + + async function doRefreshSecretKey() { + setIsLoading(true); + const key = await UserApis.doRefreshSecretKey(); + console.log(`[doRefreshSecretKey] key: ${key}`); + setSecretKey(key); + Notification.success({ + title: 'Success', + content: 'Secret key refreshed', + duration: 3, + }); + setIsLoading(false); + } + + useEffect(() => { + fetchSecretKey().then(); + }, []); + + return ( + <> +

{localeData?.Settings}

+ +
{localeData?.APISecretKey}
+ +
{localeData?.APISecretKey}:
+ + {localeData?.ClickToCopy}

} + > + +
+ {localeData?.ClickToRefresh}

} + > + +
+
+ + + {localeData?.DoNotShareSecretKey} + + +
+ + ); +} + +export default ApiSecretKeyComponent; diff --git a/src/pages/SettingsPage/SettingsPage.tsx b/src/pages/SettingsPage/SettingsPage.tsx index 31da79f..2dbd783 100644 --- a/src/pages/SettingsPage/SettingsPage.tsx +++ b/src/pages/SettingsPage/SettingsPage.tsx @@ -2,31 +2,19 @@ import * as React from 'react'; import { useEffect } from 'react'; import { Button, - Input, LocaleConsumer, - Popover, + Notification, Space, Switch, } from '@douyinfe/semi-ui'; import { UserApis } from '../../service/UserApis.ts'; -import { IconCopy, IconRefresh2 } from '@douyinfe/semi-icons'; -import { Notification } from '@douyinfe/semi-ui'; +import ApiSecretKeyComponent from './ApiSecretKeyComponent.tsx'; function SettingsPage(): React.ReactElement { - const [secretKey, setSecretKey] = React.useState(''); - const [isLoading, setIsLoading] = React.useState(true); - const [userSetting, setUserSetting] = React.useState(null); const [isUserSettingLoading, setIsUserSettingLoading] = React.useState(true); - async function fetchSecretKey() { - const key = await UserApis.getSecretKey(); - console.log(`[fetchSecretKey] key: ${key}`); - setSecretKey(key); - setIsLoading(false); - } - async function fetchUserSetting() { const userSetting = await UserApis.getUserSetting(); console.log(`[getUserSetting] userSetting: ${JSON.stringify(userSetting)}`); @@ -53,23 +41,9 @@ function SettingsPage(): React.ReactElement { } useEffect(() => { - fetchSecretKey().then(); fetchUserSetting().then(); }, []); - async function doRefreshSecretKey() { - setIsLoading(true); - const key = await UserApis.doRefreshSecretKey(); - console.log(`[doRefreshSecretKey] key: ${key}`); - setSecretKey(key); - Notification.success({ - title: 'Success', - content: 'Secret key refreshed', - duration: 3, - }); - setIsLoading(false); - } - return ( {(localeData: any, localeCode: string, dateFnsLocale: any) => ( @@ -82,84 +56,7 @@ function SettingsPage(): React.ReactElement { }} align={'start'} > -

{localeData?.Settings}

- -
{localeData?.APISecretKey}
- -
{localeData?.APISecretKey}:
- - {localeData?.ClickToCopy}

} - > - -
- {localeData?.ClickToRefresh}

} - > - -
-
- - - {localeData?.DoNotShareSecretKey} - - -
+ Date: Mon, 16 Dec 2024 13:47:03 +0800 Subject: [PATCH 23/37] add change password --- src/locales/en_GB.ts | 10 ++ src/locales/zh_CN.ts | 7 ++ .../SettingsPage/AccountSettingComponent.tsx | 80 +++++++++++++ src/pages/SettingsPage/ChangePassword.tsx | 112 ++++++++++++++++++ src/pages/SettingsPage/SettingsPage.tsx | 15 +-- src/service/UserApis.ts | 37 ++++++ 6 files changed, 254 insertions(+), 7 deletions(-) create mode 100644 src/pages/SettingsPage/AccountSettingComponent.tsx create mode 100644 src/pages/SettingsPage/ChangePassword.tsx diff --git a/src/locales/en_GB.ts b/src/locales/en_GB.ts index 2ac63e8..0bc7637 100644 --- a/src/locales/en_GB.ts +++ b/src/locales/en_GB.ts @@ -121,6 +121,7 @@ export default { SettingsPage: { Settings: 'Settings', + APISecretKey: 'API Secret Key', ClickToCopy: 'Click to copy your API secret key', ClickToRefresh: @@ -129,12 +130,21 @@ export default { FailedToCopyMessage: 'Failed to copy secret key to clipboard, please try again', DoNotShareSecretKey: 'Warning: Do not share your secret key with anyone!', + EnableNotifications: 'Enable Notifications', PlayerOverallPotentialUpdate: 'Player Ovr/Pot Update', PlayerSkillMoveUpdate: 'Player Skill Move Update', PlayerWeakFootUpdate: 'Player Weak Foot Update', + + AccountInfo: 'Account Info', + AccountUsername: 'Username', + AccountEmail: 'Email', + AccountChangePassword: 'Change Password', + AccountClickToChange: 'Click to change', + Logout: 'Logout', ClickToLogout: 'Click here to logout', + ChangePassword: 'Change Password', }, GetStartedPage: { diff --git a/src/locales/zh_CN.ts b/src/locales/zh_CN.ts index 1a271fc..dc4fe03 100644 --- a/src/locales/zh_CN.ts +++ b/src/locales/zh_CN.ts @@ -129,8 +129,15 @@ export default { PlayerSkillMoveUpdate: '球员 花式 能力更新', PlayerWeakFootUpdate: '球员 弱脚 能力更新', + AccountInfo: '账户信息', + AccountUsername: '用户名', + AccountEmail: '邮箱', + AccountChangePassword: '修改密码', + AccountClickToChange: '点击修改', + Logout: '登出', ClickToLogout: '点击登出', + ChangePassword: '修改密码', }, GetStartedPage: { GET_STARTED_TEXT: ` diff --git a/src/pages/SettingsPage/AccountSettingComponent.tsx b/src/pages/SettingsPage/AccountSettingComponent.tsx new file mode 100644 index 0000000..ca15b41 --- /dev/null +++ b/src/pages/SettingsPage/AccountSettingComponent.tsx @@ -0,0 +1,80 @@ +import { Space } from '@douyinfe/semi-ui'; +import * as React from 'react'; +import { useEffect } from 'react'; +import ChangePasswordComponent from './ChangePassword.tsx'; + +export interface ApiSecretKeyComponentProps { + localeData: any; +} + +function AccountSettingComponent({ + localeData, +}: ApiSecretKeyComponentProps): React.ReactElement { + const [showChangePassword, setShowChangePassword] = + React.useState(false); + + useEffect(() => { + // fetchSecretKey().then(); + }, []); + + return ( + <> +

{localeData?.AccountInfo}

+ + + {/* Account Info - Username */} +
+
+
{localeData?.AccountUsername}
+
+ Veeja Liu +
+ + {/* Account Info - Email */} +
+
+
{localeData?.AccountEmail}
+
+ + veejaliu@gmail.com + +
+ + {/* Account Info - Change Password ---- START*/} +
+ {/* Account Info - Change Password ---- END*/} + + + ); +} + +export default AccountSettingComponent; diff --git a/src/pages/SettingsPage/ChangePassword.tsx b/src/pages/SettingsPage/ChangePassword.tsx new file mode 100644 index 0000000..d8c829f --- /dev/null +++ b/src/pages/SettingsPage/ChangePassword.tsx @@ -0,0 +1,112 @@ +import { Button, Input, Notification } from '@douyinfe/semi-ui'; +import * as React from 'react'; +import { UserApis } from '../../service/UserApis.ts'; + +export interface ApiSecretKeyComponentProps { + localeData: any; +} + +function ChangePasswordComponent({ + localeData, +}: ApiSecretKeyComponentProps): React.ReactElement { + const [oldPassword, setOldPassword] = React.useState(''); + const [newPassword, setNewPassword] = React.useState(''); + const [confirmNewPassword, setCofirmNewPassword] = React.useState(''); + + const changePassword = async () => { + console.log(`Old Password: ${oldPassword}`); + console.log(`New Password: ${newPassword}`); + console.log(`Confirm New Password: ${confirmNewPassword}`); + + if (!oldPassword || !newPassword || !confirmNewPassword) { + Notification.error({ + title: 'Error', + content: 'Please fill in all fields', + duration: 3, + position: 'top', + }); + + return; + } + if (newPassword !== confirmNewPassword) { + // Show error message + Notification.error({ + title: 'Error', + content: 'New password and confirm password do not match', + duration: 3, + position: 'top', + }); + return; + } + // Call API to change password + await UserApis.changePassword({ + oldPassword, + newPassword, + confirmNewPassword, + }); + }; + + return ( +
+
+ Old Password + setOldPassword(e)} + /> +
+
+ New Password + setNewPassword(e)} + /> +
+
+ + Confirm Password + + setCofirmNewPassword(e)} + /> +
+
+ +
+
+ ); +} + +export default ChangePasswordComponent; diff --git a/src/pages/SettingsPage/SettingsPage.tsx b/src/pages/SettingsPage/SettingsPage.tsx index 2dbd783..a0ca1b8 100644 --- a/src/pages/SettingsPage/SettingsPage.tsx +++ b/src/pages/SettingsPage/SettingsPage.tsx @@ -9,6 +9,7 @@ import { } from '@douyinfe/semi-ui'; import { UserApis } from '../../service/UserApis.ts'; import ApiSecretKeyComponent from './ApiSecretKeyComponent.tsx'; +import AccountSettingComponent from './AccountSettingComponent.tsx'; function SettingsPage(): React.ReactElement { const [userSetting, setUserSetting] = React.useState(null); @@ -151,13 +152,12 @@ function SettingsPage(): React.ReactElement { -

- {localeData?.Logout} -

+ {/* Account Setting ---- START */} + + {/* Account Setting ---- END */} + + {/* Do logout ---- START */} +

{localeData?.Logout}

+ {/* Do logout ---- END */} )} diff --git a/src/service/UserApis.ts b/src/service/UserApis.ts index 878de73..a89026b 100644 --- a/src/service/UserApis.ts +++ b/src/service/UserApis.ts @@ -306,4 +306,41 @@ export class UserApis { return null; } } + + static async changePassword({ + oldPassword, + newPassword, + confirmNewPassword, + }: { + oldPassword: string; + newPassword: string; + confirmNewPassword: string; + }) { + try { + const token = getToken(); + // console.log(`[getPlayerList] token: ${token}`); + const response = await axios.post( + `${BACKEND_URL}/api/v1/user/password`, + { + oldPassword, + newPassword, + confirmNewPassword, + }, + { + headers: { + Accept: '*/*', + token: token, + }, + }, + ); + console.log(`[changePassword] response: ${JSON.stringify(response)}`); + return response.data; + } catch (e) { + console.log(`[changePassword] error: ${e}`); + return { + success: false, + message: 'Failed to change password', + }; + } + } } From 193707312782cedc19bdba5cb61a569050a296fb Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Mon, 16 Dec 2024 13:52:07 +0800 Subject: [PATCH 24/37] change password multi-language support --- src/locales/en_GB.ts | 6 +++++- src/locales/zh_CN.ts | 6 +++++- src/pages/SettingsPage/AccountSettingComponent.tsx | 2 +- src/pages/SettingsPage/ChangePassword.tsx | 12 ++++++++---- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/locales/en_GB.ts b/src/locales/en_GB.ts index 0bc7637..e37e97b 100644 --- a/src/locales/en_GB.ts +++ b/src/locales/en_GB.ts @@ -142,9 +142,13 @@ export default { AccountChangePassword: 'Change Password', AccountClickToChange: 'Click to change', + OldPassword: 'Old Password', + NewPassword: 'New Password', + ConfirmNewPassword: 'Confirm New Password', + Logout: 'Logout', ClickToLogout: 'Click here to logout', - ChangePassword: 'Change Password', + ChangePassword: 'Save', }, GetStartedPage: { diff --git a/src/locales/zh_CN.ts b/src/locales/zh_CN.ts index dc4fe03..0934447 100644 --- a/src/locales/zh_CN.ts +++ b/src/locales/zh_CN.ts @@ -135,9 +135,13 @@ export default { AccountChangePassword: '修改密码', AccountClickToChange: '点击修改', + OldPassword: '旧密码', + NewPassword: '新密码', + ConfirmNewPassword: '确认新密码', + ChangePassword: '保存', + Logout: '登出', ClickToLogout: '点击登出', - ChangePassword: '修改密码', }, GetStartedPage: { GET_STARTED_TEXT: ` diff --git a/src/pages/SettingsPage/AccountSettingComponent.tsx b/src/pages/SettingsPage/AccountSettingComponent.tsx index ca15b41..c8a141d 100644 --- a/src/pages/SettingsPage/AccountSettingComponent.tsx +++ b/src/pages/SettingsPage/AccountSettingComponent.tsx @@ -63,7 +63,7 @@ function AccountSettingComponent({ }} onClick={() => setShowChangePassword(!showChangePassword)} > - Click to Change + {localeData.AccountClickToChange}
diff --git a/src/pages/SettingsPage/ChangePassword.tsx b/src/pages/SettingsPage/ChangePassword.tsx index d8c829f..9b91fde 100644 --- a/src/pages/SettingsPage/ChangePassword.tsx +++ b/src/pages/SettingsPage/ChangePassword.tsx @@ -63,7 +63,9 @@ function ChangePasswordComponent({ alignItems: 'center', }} > - Old Password + + {localeData.OldPassword} + - New Password + + {localeData.NewPassword} + - Confirm Password + {localeData.ConfirmNewPassword}
From 38389bcdcd8d0686ccca99ef15a7f388b2671e5b Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 25 Dec 2024 17:14:40 +0800 Subject: [PATCH 25/37] refactor the RegisterComponent.tsx --- src/pages/LoginPage/RegisterComponent.tsx | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/pages/LoginPage/RegisterComponent.tsx b/src/pages/LoginPage/RegisterComponent.tsx index ab2b5f1..1eb9599 100644 --- a/src/pages/LoginPage/RegisterComponent.tsx +++ b/src/pages/LoginPage/RegisterComponent.tsx @@ -24,15 +24,8 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { content: 'Passwords do not match.', duration: 3, }); + return; } - console.log( - `[doRegister] formInfo: ${JSON.stringify({ - username: registerUsername, - email: registerEmail, - password: registerPassword, - passwordConfirm: registerPasswordConfirm, - })}`, - ); // setShowModal(true); const response = await UserApis.registerUser({ username: registerUsername, @@ -55,7 +48,7 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { position: 'top', title: 'Error', content: response.message, - duration: 3, + duration: 10, }); } } From 45f3b9eef300374f62f707f0c342b86de844abb5 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Wed, 25 Dec 2024 18:49:37 +0800 Subject: [PATCH 26/37] refactor the registerUser --- src/service/UserApis.ts | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/service/UserApis.ts b/src/service/UserApis.ts index a89026b..6237a5e 100644 --- a/src/service/UserApis.ts +++ b/src/service/UserApis.ts @@ -26,6 +26,7 @@ export class UserApis { password, confirmPassword, }); + if (response.status !== 200) { return { success: false, @@ -33,8 +34,35 @@ export class UserApis { }; } return response.data; - } catch (e) { + } catch (e: any) { console.log(`[registerUser] error: ${e}`); + + const errorStatus = e?.response?.status; + // 400 + // { + // "errors": [ + // { + // "type": "field", + // "value": "221231231232", + // "msg": "Email must be a valid email", + // "path": "email", + // "location": "body" + // } + // ] + // } + console.error('e.response.status: ', errorStatus); + + if (errorStatus === 400) { + const { errors } = e?.response?.data; + if (errors && errors.length > 0) { + const errorMessages: string[] = errors.map((error: any) => error.msg); + return { + success: false, + message: errorMessages.join(', '), + }; + } + } + return { success: false, message: 'Something went wrong, please try again', From ceb74a0bfd7468d096542a34fbee8488a448be44 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 26 Dec 2024 11:51:01 +0800 Subject: [PATCH 27/37] refactor the RegisterComponent.tsx --- src/locales/en_GB.ts | 13 +++ src/locales/zh_CN.ts | 11 +++ .../LoginPage/RegisterComponent.module.scss | 9 +- src/pages/LoginPage/RegisterComponent.tsx | 97 +++++++++++++++++-- src/service/UserApis.ts | 2 +- 5 files changed, 117 insertions(+), 15 deletions(-) diff --git a/src/locales/en_GB.ts b/src/locales/en_GB.ts index e37e97b..269b25b 100644 --- a/src/locales/en_GB.ts +++ b/src/locales/en_GB.ts @@ -21,6 +21,19 @@ export default { confirmPasswordPlaceholder: 'confirm your password', register: 'Register', loginPrompt: 'Already have an account? Login', + + invalidUsername: + 'Username must start with a letter, be 6 to 20 characters long, and only allow letters, numbers, underscores, and dots.', + + invalidEmail: 'Please enter a valid email address.', + + passwordError: + 'Password must contain at least three of the following: uppercase letters, lowercase letters, numbers, or special characters, and must be at least 6 characters long.', + passwordMismatch: + 'The passwords do not match. Please make sure both entries are the same.', + + registerSuccess: + 'Register success! Will redirect to login page in 3 seconds', }, WebsiteLogoComponent: { title: 'Career.Top', diff --git a/src/locales/zh_CN.ts b/src/locales/zh_CN.ts index 0934447..3f9a3ec 100644 --- a/src/locales/zh_CN.ts +++ b/src/locales/zh_CN.ts @@ -21,6 +21,17 @@ export default { confirmPasswordPlaceholder: '确认您的密码', register: '注册', loginPrompt: '已经有账号? 登录', + + invalidUsername: + '用户名必须以字母开头,长度为6到20位,仅允许字母、数字、下划线和点。', + + invalidEmail: '请输入有效的电子邮件地址。', + + passwordError: + '密码必须包含大小写字母、数字或特殊符号中的三种,并且不少于6位。', + passwordMismatch: '密码不匹配。请确保两次输入的密码一致。', + + registerSuccess: '注册成功!将在3秒后重定向到登录页面', }, WebsiteLogoComponent: { title: 'Career.Top', diff --git a/src/pages/LoginPage/RegisterComponent.module.scss b/src/pages/LoginPage/RegisterComponent.module.scss index d2cfdcd..bde3082 100644 --- a/src/pages/LoginPage/RegisterComponent.module.scss +++ b/src/pages/LoginPage/RegisterComponent.module.scss @@ -37,10 +37,6 @@ min-width: 163px; vertical-align: middle; flex-shrink: 0; - - .text { - font-family: Inter; - } } } } @@ -62,6 +58,11 @@ align-self: stretch; } + .errorMessage { + color: red; + font-size: 14px; + } + .button { height: 40px; width: 440px; diff --git a/src/pages/LoginPage/RegisterComponent.tsx b/src/pages/LoginPage/RegisterComponent.tsx index 1eb9599..b934850 100644 --- a/src/pages/LoginPage/RegisterComponent.tsx +++ b/src/pages/LoginPage/RegisterComponent.tsx @@ -15,18 +15,43 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { const [registerEmail, setRegisterEmail] = useState(''); const [registerPassword, setRegisterPassword] = useState(''); const [registerPasswordConfirm, setRegisterPasswordConfirm] = useState(''); + const [errorMessage, setErrorMessage] = useState(' '); - async function doRegister() { + async function doRegister(localeData: any) { + // Check if username is valid + const validPattern = /^[a-zA-Z][a-zA-Z0-9_.]{5,19}$/; + if (!validPattern.test(registerUsername)) { + setErrorMessage(localeData.invalidUsername); + return; + } + + // Check if email is valid + const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailPattern.test(registerEmail)) { + setErrorMessage(localeData.invalidEmail); + return; + } + + // Check if password and confirm password match if (registerPassword !== registerPasswordConfirm) { - Notification.error({ - position: 'top', - title: 'Error', - content: 'Passwords do not match.', - duration: 3, - }); + setErrorMessage(localeData.passwordNotMatch); return; } - // setShowModal(true); + + // Check if password meets criteria + const hasUpperCase = /[A-Z]/.test(registerPassword); + const hasLowerCase = /[a-z]/.test(registerPassword); + const hasNumber = /\d/.test(registerPassword); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test(registerPassword); + const lengthValid = registerPassword.length >= 6; + const criteriaMet = + [hasUpperCase, hasLowerCase, hasNumber, hasSpecialChar].filter(Boolean) + .length >= 3; + if (!lengthValid || !criteriaMet) { + setErrorMessage(localeData.passwordError); + return; + } + const response = await UserApis.registerUser({ username: registerUsername, email: registerEmail, @@ -37,7 +62,7 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { Notification.success({ position: 'top', title: 'Welcome!!!', - content: 'Register success! Will redirect to login page in 3 seconds', + content: localeData.registerSuccess, duration: 3, }); // 3 seconds later, redirect to login page @@ -73,6 +98,14 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { placeholder={localeData.usernamePlaceholder} fieldStyle={{ alignSelf: 'stretch', padding: 0 }} onChange={(e) => setRegisterUsername(e)} + onBlur={() => { + const validPattern = /^[a-zA-Z][a-zA-Z0-9_.]{5,19}$/; + if (!validPattern.test(registerUsername)) { + setErrorMessage(localeData.invalidUsername); + } else { + setErrorMessage(' '); + } + }} /> { placeholder={localeData.emailPlaceholder} fieldStyle={{ alignSelf: 'stretch', padding: 0 }} onChange={(e) => setRegisterEmail(e)} + onBlur={() => { + const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailPattern.test(registerEmail)) { + setErrorMessage(localeData.invalidEmail); + } else { + setErrorMessage(' '); + } + }} /> { placeholder={localeData.passwordPlaceholder} fieldStyle={{ alignSelf: 'stretch', padding: 0 }} onChange={(e) => setRegisterPassword(e)} + // 失去焦点时,校验密码是否符合规则 + onBlur={() => { + const hasUpperCase = /[A-Z]/.test(registerPassword); + const hasLowerCase = /[a-z]/.test(registerPassword); + const hasNumber = /\d/.test(registerPassword); + const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/.test( + registerPassword, + ); + const lengthValid = registerPassword.length >= 6; + + const criteriaMet = + [ + hasUpperCase, + hasLowerCase, + hasNumber, + hasSpecialChar, + ].filter(Boolean).length >= 3; + + if (!lengthValid || !criteriaMet) { + setErrorMessage(localeData.passwordError); + } else { + setErrorMessage(' '); + } + }} /> { placeholder={localeData.confirmPasswordPlaceholder} fieldStyle={{ alignSelf: 'stretch', padding: 0 }} onChange={(e) => setRegisterPasswordConfirm(e)} + onBlur={() => { + if (registerPassword !== registerPasswordConfirm) { + setErrorMessage(localeData.passwordMismatch); + } else { + setErrorMessage(' '); + } + }} /> +
+

{errorMessage}

+
diff --git a/src/service/UserApis.ts b/src/service/UserApis.ts index 6237a5e..41fa8b2 100644 --- a/src/service/UserApis.ts +++ b/src/service/UserApis.ts @@ -53,7 +53,7 @@ export class UserApis { console.error('e.response.status: ', errorStatus); if (errorStatus === 400) { - const { errors } = e?.response?.data; + const { errors } = e?.response?.data || {}; if (errors && errors.length > 0) { const errorMessages: string[] = errors.map((error: any) => error.msg); return { From c1c92dae16ff80130f923660915f28193d0fd488 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 26 Dec 2024 12:13:16 +0800 Subject: [PATCH 28/37] change logo --- index.html | 2 +- public/img_logo.png | Bin 219145 -> 0 bytes public/img_logo.webp | Bin 2488 -> 0 bytes public/logo.png | Bin 0 -> 23215 bytes public/logo.svg | 29 +++++++++++++++++++++++++++++ 5 files changed, 30 insertions(+), 1 deletion(-) delete mode 100644 public/img_logo.png delete mode 100644 public/img_logo.webp create mode 100644 public/logo.png create mode 100644 public/logo.svg diff --git a/index.html b/index.html index c99dd7e..4d72e8d 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ - + FIFA Career Dashboard diff --git a/public/img_logo.png b/public/img_logo.png deleted file mode 100644 index 56e2d3d1120757a36537fe61612c15d327192fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 219145 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ν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�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%0D6rS~n~7vug-O0wWl*dw9a{(ydV%O!Vx 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�#m z(MB%7O*^1kv+k(cv=^#0>S4li$1u88qg^d6o}?8aL6q=gIlAzEutGV1Zx#22Q3p#~ z!nT@;4i1S%qgDwRHU2p)`*Jn*r5{A*fg{MsIw*k7rGG*=Efq~xQFZ64KQ}HKTC7K> z4K_4NXCa=IRc996lESEeHNjqO@2C+@!_ODaTToy!cwA=pSoh1K+&=fQg}7V07@F^Z ze^VkC`67I=Vk2U^`~yL?nrR_%ReHTEuoD`~yK8hYnshBPWe^nUQbK1EPI_o5NN~5{ zh!7dcW;R@cZ;sfmcVX_^OYsxCnU=6Y5;N*-cytvd-Xfg{`sf8mb4$~p>N(V;H8qjm^x7Sj_m z=Pkj{m-4iD+T-QK%}6GE)T8?-qcB-n1LfASN7;stvV^fA-!xx~gh>|Ni?O<9;;(l2Fq~f{K)c-n+e$fDKeS zh+?~TuU%0@v0lZBy?3!oC%q?h=^(wOH+bIp%(d4!J3HZuKqBxvdyF|w>PgPt`>gd@ zb3OB!jdYBkd>2j+X^&>D5>$6d>n{3s8vvu7S62iJV4mKxgJ#&z>N*so#@&ebKKvM~ z)~r$3I|#P9X3J~BvavrrT+ofhtIMnniJs6&htOyX9xbR7(p{iVNsSgCa(mgyuuITx zk$&u)7;5-G3cwfsu>p@i{~CIpKN8K(>Vu%O1TH%aMbk3{&fA@fkhozEptBLm0GWhY z#MfUZXJ*oj?wYVUSbf5S1&)FUtMV8cXY{SiA~%cZtNPfWR`IIwZ{KAQuAh86-ud`z zEKSKkAst+DSs-dMfdp!!)ivAw{%|zCjuggf)3r#?>URnF@@Osc7-?xKNY6;anzetR zsHE6|^K!qGh#z~;cb#zC!|~kGYq=6%e)|gspEpvwm})^A2wzSdjIU|6IBghyzT*Ncd|){8UKo!J@7|8> z0_S_?K7kTu$d|sP5MK5>trnlvkEute%%xlay9_jzo%B{Q5{m`&TYYbUmD-HO$# zSF6sQG8w;a-4E?1du|#qshy*Jk2n$8vEMq~7?Nj~_j1Ehhd8=qc^iLYLc#F2^k^wUqhr?tV30H`<8 zam|?9@UPGg2#f5YzQJ@Lq4vCKcmkTX>8xJ6&7iY%Qv~3qknH8!L z2tLFX?-sZ#9ANgqxd+Vc&mK|uCL8x;U#W2JZ^d2Z6sNMl&A5cv;!}Q2yP2v}NDY>x zWn=WjTM*renX+zZcBX*LnF8Er4MWp*0_#5OI$E@u4u?7sYayDWT~*-pgC-lxuz8Ud zmpX1J&17N=ZfR^5JILaO8L0O^W(K`b-750(3td^lY@aKOza2ZXYVF(!wu?=PFWU8r2@*oElAS_Osr$z0*|n6 zpwSfS(GA8*fc(X!uCS5=r?^y`LJ{m$N+e&4=>=K_hDCMO`iHmP`y5-g?E!1k4pH{P zjBgcPVA!d2Kgu?zW7ncLG<#i2*~!8eu>Yr-nE%j7%)M!VfO$WBPxqH;=L(RYgYR!( zBP9B(50#Gx;(GyfX4Aix$Iqq=z!x_S#!vTLf?prJ9E+a30tK@tV$;WWVBhx-q4d`$ zQ88~Osunzh8UgT{MbD#Z(F>|IFPZ-g%IMspk26rV;3@TauUt42mGbiy^PZ9ajjk@U zv1!4Z_~?cI;L>vjAu9STb>Ik%GqS2s2MmpFx-OvmK;3aLF^)S7o?9!$;(beJp)PWr zI-py>i}1ncKdPgT(NG&$_FHuR@2Go!{O|DHYmQ8&zF?86EmXDHVf!^oCJ5~;P>)7o z1ONbl07*naRAr+je>c>+VZhxibZxNklm)4@G|kUjE+DW9$*Bc+^WCp;<#o5<>~803 z!D*9lW{vx*w9gbg4-hbw^BPBa7PbBMzI5(Qy)Kk|`L7WpOukR;dUN$Ek4IFyZkTYx z?f88`GWHcwj#7iFvI*Pgg^Lut*vI**uB<`r&2=B7{3+lwir?Jh){?G;7ldacB3zm~pq@v(JCPnm@MU zKoN`4D;C9Tu zbGx!ee%3a~Id}+ric0Y5H$URS#B0&IU3Y}V%EF|b062?91<-@zhH9~>=~!sO{ju+B z4ulefD089f3!A9~bCTESt$NSkHVFy=*G{+{Z@>Q)(lZMMnpX)(6hI5#vi+^t-PuBI zw{BfA9ANi<%?;@$Yi@y^kZvCtsj0~d?Hf04P)UP@CO1I+uWRD33E=PeGjn?GWmaca zy<8^urI`h|^7@<5B8m$;T6WSNkVSihbV`L-L`r!JEgDVnp3wv|^J|MAtptHT$4-&< zeD~8VuxUEe8If^awKHX^oJ&eE4jyFCRiYXPs}A5`@doV5`38IEy^8XA0?qTD7dU{t~_`+vVDUe>ifL&5elrP}d<>%&47odL%RSV_!*l~36 zf3Yw59b|s_A|AYXED}0(lJj@AKpwN`0@Z9|uQ14+2o^0%gS{9v$hj#CMazx=gXMLg1>-u~3 zeV-Y3{(qFnY~H+CGwu2L`TD-$`+|VZ_Yqx@vK7|zbf?O=B(d0(nRR)u<>U&e=OZU? znHDRj$i4f@+aF>0HIvY`V}DIda5s^Q>@e!kquBiD966`MU_I8UYqyrG#`@C8kZiEl zB1|4z%J*7C%NP@pfEE#*(7XS|czN~**tmHY4ibz7*vkpwb_YXu4Nb64z<s z3r@KxZyHWnq?|7q>zXugkJvMMV*JEA@cCCiWBsOWT3b|9QiKD=do}2}&P;j{n#$;W~^fsy}*(+r8>Ksp=bR34PSFEe6UO$}D8+l%)^pnh<{^Vs#x z!}#g$ixtLyBBW0>k6I)up#H6V{Q2a8_*mlmJ1$1vOH;7-yXmMF$giYj;*uFCS^5Nu zmPjm}F7c#%J_BV-1-h3!gVIIMpls1Bqd8w7P_IrdEF^sfRg0fN#c$K)|9DzJ{aKVO zc^RALy@ok6?!qPK4nstACwYAWJoKig?O&YP#WC4&I=OIXf*EyZSE3H6v(S`~K0xkm zcDEg@1-s26+2OXI!c=toe)#wOPaP)%{sI1uI#%0JrB4u2zI-7?^bB1lM$iazJH7-d#=K|fp==!Y4b=}=X)j{*}3vw z%9Vw3ULLXw3b8mX3o~DQ1B1`MLahra0}KhLql>_K#1H}YVGgVhbwHhCg9UX{NbLjl z*#6qFI4p)%j=j-B?(r5;@}7`IY;?Q6xZ$SzP_XO|c~2ga*GE{daP;Z~bn3}X_@Vk( zK;3HHyBtCcv{r#*y$loByQc)-e?K4NCfts=v-%>WWhXR`pvz59 zxvyv~Ys>}cRUamwHy4->mAT}sPW>@z?2Y*7^RKaa+YS_!mI$ctSADt`n(o<;{kson z0jkZepDZwWG94!qsPlb%-RSEv>gFWe@R5PfIzSqTdV@uzW1kp~D@R_X%+Q!e0Mr}l zxN6Le`2Rv<5ZtD{OzfS|YsjT|^y&X%X=W~V?q}yay0g%gg?h;{RLKOd86VBGnoPRQ z&bqVd-ii9CL!}nACn}RgXG?Pzr1Nvy^;OeOP!jfx3EC3z&w}Po9rm5YfIrCQf@0 z?|d>Bi_-FuTe!+VLv{{w1S0YTuyfMcNiR)*tEub^pi>f;3+X-rAOSv_#pVtO;(-qcS z7q(KbtT}{r8@FS|thW%?L7==vS2TB|LOi!Yk#Y_NAcGXtDHkGaxCNTeLRLW!8)8p~=)N}FU)FJr!#v%BLp6LSVU)?YWpHCf(4=44FMSAw4P63ylO_dEAGy#M)c*t)w|7geS{p;+F(#i(HiV0k|geEDd#;tc}o z|0DEgDjbt8YI+M5v5t`~yB+H3dZCXv*y zvtd>rghaBCRuX9Tx66K8bnE$`7A@ZAr;Vb|Uw>_5Pw({e33EvANjKN}~R z=1FY87C4UYak79q@5cupcn~A5N(yu!{ky>h&4-uastJj>@1FbgTsGzr0QE*XMvt3{ zh%>w3q7m0&)~j=nnzLL0y%c3NoYW6Ox5#yCmiAzD5iniw%48z3Sy=+#Uu9^IIvh>3 zonW;1tkOVwbyd0X3D#^nyH*+tMw$Dtb6>Fl^Vc}%(yP%TwyS_ocZ8k6iPQlc&7K=4 z7k1ZVMz^^lk`vrgix7y&*(H5qsCF<@+}sp5YX4i z_v@ylCm#+)#2KV~+NP`+{FMuG7i+LX%ONQ8s0AE^BB z;)N{>KK2^9uhUL| zeR8Z}??Lxi;#)}a@A3XEGr(Twe{sHMv+R_{Z2j|3todUN@&($dS2r2;Oo4QhQ75S9 z=b5i%Gs{j;r*tMKAB8GSTZwPKn~yv1eG1+BT#Qy+OtxWTx8AzbVHzgU(aF>R=-8od zG5xiflmdJ#i=vG@#ul4uK{_8JWntf@19}d)2y@>55_`B?sW!DThLzK8$GEiEjQa5b zb$2-D&UMc9WBceEEBLp$IFiK#7vmK**tBUIKKl4OjK2P6oE1MuAC)342T{B#4iEXm9-pRH>q8?D!NsWb~3_873n#@quL3Xk{gbkZ_ z;)$8F(Ye?8GC_7lXj@8MoJ@HvU0Mbxs1q2eDYX`B%mRnf^V`Xq1ye#m$%Z@zQFpD9 zguY-`RyyId>o^EkT{{hLy!9zkQ}YD|Rw6fVIWn_zktq;hEaqsZNO_CX+$Dpu7b9o! zOIrNdbZ+CbaE@?JAoofEG<=eQBMk33J%aE`U+Q#3^o66XmG2WccJC|0D{p*=u6-`h zw)E7P8*4#=4bLfIlM)v~I16@-%)|PzTS!WAOP` z-(uIcji}zW9DC9~P}$0%-=_ofXJYU7)A8edm*bnM1Muw){qV(DQ{2%T*SZpGS?lEPw^v^K)~Mmy;_W z3!uw;)qI?X+^l^0Iod-mM^^4KeEIFqn0nj&Na%CEz-MQp$EFO6J8#iuK@}Rq>qUtd z8+bX*&|+VYX@81APWxjt3u~rBb79d-kfAd{Oa!6qnMnvB*0$1&(7p zP6kk4w{9KAUOx`kOdWwKA6^=ey!_3WD(7p|ElHR(VKR2@+T}gH4Sobby^#(UWU2?b zdYU`hbDbbcb?ez?&RG~_g9EsQcW=}k{Es!LpEO&t{%vog>(sXL)YdZdTSdL}LF6v` z1GnA%D5B4#uW@g6V6bwQ)2W+|WpXPLt^^Kgxg154MLq_yfDWpvl<=LVTkM%xsmRD=5Y$Zr7ZXN* zZj0e)L&xknwYMBtIYHV?ryJBYL;g3T?m7MIu%PZODmB@4SB71iBAL*Z^VK!lM*W+g z=403;SII(&T_KHqBa0i2_FRBHk}@MB@34iX?uI?=xOuqX_u1hzEM^#t!%jCeYuN#D zXZFS|x7>wAzkZKhg}01idhvrd^G7G6Mj>o4r_Q&@E=u4+xg{`05E8sl~HA`L; zz@DX7|smET*)D(EW_Udigwo@A)%OwTOE2r{rtX1=ybySQk*2$Fc=8G}B%} zjr!8r*!bIQeDKUYxcq{1a-D*ugCRA5YM5ns8PNb(L*3g76-CmYSKIoU3(73JMVvn1I1iaSxJN! z?*4ap?~{KjyyK3JJv#pIV~$-$KEh1xu3bB@e*HSETCoBJc?AmPc{%y=$d3!;V}`tc zGY!Dg$33qg7X`}-kzG)L55N2t*H69`?Yj@v=0DBkyoS-PRmO>sDE3O=;>bj3937*W zSvT2rH?Z@XP!yga4)bdjk@Rbufu{YT?Ipv@7JaqL_m-hkd*H3lm_XP z?hrFy4tJEdD2<=U-Eq)KB1*h)zU#+|v%R*VnhcG(|yfh(gxi!Uia#f$}U^KUgm zzOJkE`KAQh%d0@$?oU2Cc|T>CXN^<6XPnpjE3wbhMB$2g>+uZ_(?wrlR17X)o@2J2I!k>R;WWd7= z_Kwwx-7smd+WufuGk7Cr3 z-q)$0AGz){C4uyZ9a3GQv;v-Yv-wO^&8r0rp%leyW&z}X?9ZazL`zz`VVDjm3aSN+ z7c#6zMs!f!U|RYN9hkm=+OcHF@fR|;>+&5KwKwvoSo4*1vgut*7{guQsl!*R%7daK zga35cLv5BUppnd->H!A$l-2wr9&+v2PqHIVLO~E-!0G8^VgSv1SKgC|0s`9IOTy`~ zjErdb64>Q*=-hLZ|9U+wLS=oA665=s4dz(peM-0fnJ$JX>!{V(sM_6SYizROM&iz+n~cYt-|Ykle%FDet^rtu6$gIJ^Kuy=*M|V<0A4`scCgpOSB$Zu~Gr#P-d^2axyQy*+Z=2VD z5}#4sO8f(a=pE4|r=>lwZ0Yo_qF`DA_#2O-kC)gbqNS}{M`RW=zjP6!DqI%Qs&+Yb z=yGVvrkorq@AMTOs^nbpyRqa31L^ZVT}Qv|20BN6Two%rrkYAXG==V5jw>dk=_2z( zqUOk{5O;-!pXL&ut?t&vJH`(}SDcOR8=DxsRq06bJC5qyo;}B`y+-)HyD#4z{qbeB z=(#{zs(MqeL2cB&@}n;q94}8-U7lf!MwdxOWlp|~$=_W|WvE?X&Ju7x*V1~4OGlO(+=op>MP0W(K7#mx>1(y7NP%s-`cvkJfSW5m^Kcsml_}<;)DG6II(ve@uPq2X zuTK;?gd!*u_Bhz<4ULTWooM-x1@HvLx?BRHS@H-1EF{hfH#=Yxo@Iz?K5tlzTNZ_6 z_>4DE449OTx<|X4MNh?g@FEYNl-^6+Wae|o9@EAAK3?#-Z0YaI|6c3-(~_nt@ttv5 zCbK%`gMicU+bDMUm=J&s&F!p!7@4ICgdmkLmZsGo6KVlmn-m!%RfPQY%Ow;%&VS?6 z`Y3Bj1JuzA;sH$C85d^#?Lh;#1SZ-PaVfB6pg#C9a-8^LFLXrX%R`goFw{#oDmVL9 zR>oDd+i=?94*5<(bIUqgf@WybA#y z-Z!94Oo&o9KDr2WTbk|@lT@XwlJ&?Om1HC{TbPd6XCxX5buWY(1z+n6gcBL?3q;!R z%t|pbmLM63`pv4-y%%NCV@LljZ#2}i&{_`|4VQiU%cRhIO_RfuFJe+SjU55{94#?l z%^i~E3Y)6JjI&a|bZldrWxf&`F7yroDiqu71GdydqzqIn#Y}PSB_#;48`BJC*jv!0 zV{#d{n?80z(hD2H5)7%%?JcYni|RUzA{fjbCc~$no|&;2LLE z9N$!oX{{0=8r=u}WQby@ufsaO)KsC0QF~3bfeS?}QGv+mP^re>gNM_81N9{gbC}lX zH3Fx{-NtH5_T!!WR-7P-EaZ$~0se%+-#Jg~&0BjK3YBs5BJoY@Ih3%L4l)cMoY*k4 zVtub<4D!1-r=U^plqZOqTpJn(fe`Laj1|Lr@>V`F2jOJa+-qqgW3)S^Jp1Jz&t3{D zeN#E~xyySZ??d@&XoxCn7)O(#NDeWhl>Qv|YakT8`)AwiKhV8@U^WTO%S0el9s~9o z&67i8%*=AoV%Zm4XZrJsO8!)gm%VK5l7pAO!&a=;<~@wiqY-1WIZqS+pq`kJ$V>mT7hTzYn2z(qaDRGg3SzKdHVa&&7g9loZTJl;aQRf9j4raj*BU zw=4_2X0PdhGFJYmC8LhUXYW{yFT*)5CVbVMrviE+?7Uk7WCWEg=PO%=CPSHdnqJMq zxEAOOOL{iB{Y}2RsKm@xFB>*xEKdS+b@Rc&uIku|<0{P`N|wDml=;YoW~$#x+RkS! zRqJekUk4a$j^ZbuCahvKzV2+6KM<=zg!%dh9z<@1)U5+@5lc(-Z*aE1pqxu%6(wav znWUtU_1yv2>TD*z?i0-U1KldxM<&Mx8}tLO*Ud+!3u}awt2M8$egOIv-`%zMviv%O zh(wVEGfRUw_6@Pl3ov`d3#}nzASHBdQ}{{>h&b*8*|{?OWpE#cw=AQ%*9PMKw0Lhp z`fhZse*&UIB%>>0z!#8VcyAmPEZ{t7EeCh2-FbU`WZTTItPr_ZZlNyUAo~6xhu!E~ zT3V6r-?$32y*?>{Kh*+m+aPkkf%|NS^vfIl_P5U6H(eUuxq$)(U(>T`>uPV4KP9+u z`F=U^xbGL*ZLd~sYcq$W;j&=A3>BdaCtaS%$+cOZaGptBD3ksN%@rvi*#vnJe(z4v z(YMTp`r*-L7ZDl|W665aj!>aMBu!psUv@-u)z@tX@#7jcxH%MDWfI6G++K;+J>M{L zW<9ZW8v<1o92XhF=O`yfi*23h#Nx3BPro$JE>u?j3hkL+D9+A9O+#&wg0ANT96vj> zAEMef=B9QMc_LOOCXX*2w2vq#^8_f-5(K*X<%nVO6ThEDW9HEko=(Ys6+{jV9j|lP z@H$P%Zf`pZ$d$Ku7?8r8F6Z#Hc~3G;KaDy4q1R%%@r7vGNa(O>CusSP!W_-|6#*PS zt-aC}c#Ca0DZx;4tlAkJq;EV6zQ(>Ip&O3BPTMW*B$JlO>FlW9Vc zfixDf9YEz3F^oN{K(5PO9yWF!A$0 z*87w9OorCu2Yas6OW11QPxuHp3y3JQ3Xy6dKmi5L@1MVYaYIpxCuMjef9qj{p@Pyu zxdJ&}jXF@A8R>2TIBk>QATYL-TUVa$^D$-U??U~2x*S}v4&E8(-tO{Xr#12f*$YcQ zDMTm~QQoD#HzvB0=#VJWcJ!2;8ofill=W|@!17b$)Qc02RH)ALDj6I%-khhhI*z&_ z9Gt-IX~}^U+|_S7X8NI)v$Z<6GhIfb7BypoZGCj5>x0?0!TtJ3HKnw!WsbyTmh*=o zA2R~x;qOs}v?>ihx~&w$l#w6qNg~{OUjO}WHus_JZmKw7{eVt_iO`Zzeh3-@uKDmH;e6-+N;epOlWeew4r*m3`jW5EQ}CX5xxWS0?;eFcWTtLQJB; zjP3RT)Cl_L#oDu!cFzw?C{HReU54ea{$hqDdc<`ip-ZgY0H1+=j7xO0jv1p-50uel zH=A0cH)q1J_pA?i8}=mFl|*5=cnGQmLUc8nhjL$#Ss{l;&S&?;*qb#1K`T8%6$0Ad zh<;UH{^>{KzNvlJ;zVptG!iljFl96JWhcyI4C^}|?{j(ISGWy^J7e6m4cBBUVr^1p zS@$0V-0w8g)>*%LqwPq^8{!&6OE=un0UW3V?i@Mk(0G2p{Q{Ij%L>{YZQCuRh=`69 z8z13lp0}UR0AKZvy)pSe-F&oo!u=QW;Mmg@UvQ0K?61bn=mK%tt+U=K&|`4+u@I! zVy~r2tnI#8>myaXBOBOl^3iAY!O$J~v<3C&!ka5kOBb~e1NQBi&1F`j#Zs5K1i3O2 z7I{&WY0xrxb)4lM-@hJGR|pxj*tO3yEpUn#)a1mw+81>FMiN=B<#U?KD|q9h^#J*U zh4VJ8P}*lAu?<--5NSat45<_sdpK^URptF*lm5HSe0ha$?No?L{P~fLSqqkeX)CU9 zJkW6DJzkZX+fN3@T+zjlHuZpG*xSbeV_X!(0sXrOMxPnZUKnzbe$`k${qIeCG>FRjeIxEhFY+T)?wz20xoqK+@tS=?kp?#!-1MB)Vbj(>UN!zRd!A%uY0_gn;V@<$%R~93WR^WKSc~3Eibt#-48>!=fh<_WD>2^K z-}7vKvX1yv(TY0T<=v(F*9mPDtCpfA6sw`F=#lwfF9O;xNlW7#dibOfw_d{B-!B}iOc;TOY?)gJ{Ou$tn|;?nAy@;MCN?Eb29 zbz_xrWX%+HFs*swx@G_f0tzK*Du}bjUGx)p@g4ndFdNX93!M)5_xJJXir4Cd51)B~ zlTjHO?(2FVpLu)hL^&MwS9IU5ANlFMrt2Z=ISe~~lZK*o(Kv=$;sULcUn<+>)q)qQ z%-bHO!r!}a1A2f6uAS&rcbv=L4q!vRFTKx*x91t@4RR&!BF``viH!|431cvxAMcPd zvkYmriq>Qrn7xeQ#Q<%PzU6ud{hi2)lW_!w>;ymNt9LeH&;G?|vI5ZPN`B5a$8i6l zy(LONu7W!oyr`a?JIh4*Xfy61QuQ>5eh7d%FRo*LY9oA-!;ew}OAN=dEC{0|aKdFS|)Q27jO^U0*pOoGO zpd#kDJF7CaY=Oiam$`dk||dI+b_T97pKM`l_3-m>rBSE*3ehVs$iY{?jAHS}ao7jRSs z8j~AS`la`Lp7&**j0HuhuTc|aaVr;7ccw3Uf+_nU{#?1bC5=36H#EYJ(M?)4`w}IkU!E=Go@!&u8-Xg*e&)zvMJF=Yi0Q{^Fcf9+vz->BM ze2Zno8D#=qEF9KSpJMK^r@?OR`Hc^&b`4gk`OLlJC^*`d{Xd;ISoz&r+#Hv#6mEs$ zBjrWcT1aO)Zgs54$Q)fST#r>OGy8dklJ2|@$KC*OA;b$$Pols~0I{DoPcshpIJnn8 z)({w-INy#ES+pO1h5ztoYE7^z0ox5wfMX^SCOY@IK;(AZK=pE%Cjf?SpMF;0g&3eS z4c!@1iBx&l&hFGKzv1>v#aj4*m>URvl+V{%-(~YS)*zl*u;tavObuh`%vd(;S?_%H zdDu8_JB>p9!Qv`5AK`#v+D|u3!-VnIlspswfA+HI9EDg`z$l*j#Hc`!oMH!%s%!x| zZ-itgCU%MsNqALjm75K>)y$|Z-}PTuE)f$g5c;X`TotT-Z+H>>NlktFUX>|8Nu{>0 z2KZF>( zp+ujQCQKnwHI-CSQ>i$)(?|^P9pI{Vf0!HG^`g=i{b}CG+;%w?o*-WNJJmJ;m|mM% zH^Imcom|#Nw0U7I%`&D@&oobxlGCHPY~T8(HabZNk&Orf=eY>41jjtpHhOJ;G~GD? zrpD>l=bX0(FBH&fncE`JS`mlxfnOVMA{%)e1i}GDI7>vY|XEcs+BwWSh7w37NQVBT;a3kPpj(_r1eMiy9dxq z>vJG7wP9nN7j_d?1;@j>hOH3pdkj&k<7cy1P6@-?P{>E7GU7{6^6y50N-3%QQ;A@X z?nmn9kWWg9E9p_H(T_3Rm~PhF26H877%`f%_YnyM&HvP!5~Q&hnGfj@y0~2bsPo%H zBH?!(5fFmnoxDm2DwYzxpjy&k+ftIHaXm=qiMa;~PSwuubb9Ms_h65wc~a9?a`xXi&Kc=G@U#;o8zEr42D2 zVS99HmzA^uC69 ze2z_$Nmy0b`EJ9n0vZu7K<*Rvt8%D7(M}5?+?_iUa57IZ+o7hXn|n-<@H^+I!+@$~^sY&3BRyW)saB7=4zyHLZnR`wA8 z)d=q8`A_2Cg`}Q^(bu)#p>J;oTd1*n(+%XJj@^zDMFQVPq^K@W^vF$yb6<2TRjCiZ zc2}*ehqIb-WP@!l2_U%;BG20YUXXSw%=7CUtDPqiP~gqukffjEGFa$Ooii>PI(i@0 zuaKLVi4xiLk&(1``uK6ZFmlADK(+&A`zBP&c=I_dY5YJfbt1S#+Gt|dH3*R&uS^|iXj zYP03bK;cSZ4}8as5cxZi2RJpv39OV^uETs6W?N7)NI#sa?YwKbtOs;}c|J{Q?U8pV ziGKbD!bCqjF!vixuzuByoXqB-5TcU8zhMtEV|uS`M45NZ_QCqJB*7r!+)q28_zSHK zY$tvrG|OyNK=@wCsxUBguqhJ&#`ROEvz$aak1w^KlHOh1OQe7xZ20~$=!nvcVBlhN zU@gglDL(`(T(8D+pL+Z}Hy`gY`1W^fCoAp83^l4C$UXN+;r(ySKsCx zqN1jj5(Dm8o04}eTL=rO_pzhy<)K1{6fVweKW|E!nCvnqpF$ESi3BUa%ala0pM;k$ zzya@5vlr-5bVEsd7;(Xu9}3Q=bbTvZm+CRn2=4xE4%M|NJG()?TYarF3DdtFj+;tX z`3nz7mRiKXqZN2n_?aklM6t6`t?TJ2GL7ws#<2T>Ig6Me2xq)SEB%`J!)|h) zGjNwsm(b>D&>e3MG`Z(x{B!%kQ6~yi{ZNmJ;LX2w!o_4@=im3EGTS-P%46haY%>br`LtQ!`}v;i_1dC~-Bb7a&rAdYclebERaH?vM|Z;ePv>-- z!8I3#MO5vEn|T6r7sAt#_?vI7OK)Hz8d6_YRh5m9Pt zCeq8;?Cy{Y%tlr>sTYl0@#AMS_6fS+stf3k!&>k85=UYzRuZt|zfFi%oC zGvHcnMp{)Vzg_JdZlR|DS#WjTZ{>J!GZ0hPTmc z`n9%LBpq@^y)=6;XrzO4sg1$t-q(Eau|Q5bbbg!iX*rTj)K~4nr)O@)G6F3PP?5DB z_)TbjXTh~_qq`P?{`kS;V%Bn|YM3i}hHJ{9MMp zFqjTW=?Zqx(+ID*8{BPABy|jASzNu2&szph{J)X{5K|a+5!T!n17cFZJ5_1P~ZLhhX;j>^3 z9@!8H_?I_QLsYfm2jp3LT?e|9PlfItLAAC_1LZzB*!fei^A0j>=(!B1;#-y_l)pR?^)>C96Ksh$S>JuPtf-(8Pj<2B~E1I+fJ#1MQTYU~h77EZ-@) zZ#*gUdTtB&r_h}$y-vMx5sZ?a^n64F`5J40(kL3oPTZ0{2MGKWZA2WEf8>HqBBanG zBOu)pW?AQvf@$+OUYLMB7-*%`8fUflphSoz@iMc9Gu1vmFaJp%AAbipQ(;fw3iiZe z?zIuL=($H~KwC04dJiJ0P+5#8}GAl;%N&!B>kX5_y{?XRCE$aRTQ0NDp)Fa%nDbd{(pal3)nnMCwTF?Zpd zeS)qb&kxs^;Lh`kZ$YCx=hGzT`S`gGpQ&(UOm3K{*bai_;S>C-C=!H^0T%PPm%HdJ zOMHiKW*51IuKWqAjv=PECyV?}9ZaZ9RoCK9P7tqZT(UT%1^d?7)qJq_t;VeK(_X{cm}v9R9a+FCi#dzg(UdsPve4_xKDHf-kR8L`bWZkwvc=5C zwgbh6QH~A!UdZ)!3*3o)c>iHG*`V7+%2I|>asgI8hpx7EJZW*k<8@gs+_BKUx54|h z0`jR&S3I!iww%xFZM=4;Uv$?i!?#5eaX{>)#Nku%0xX$t-u=x{2*5?@LBMO%#&@f> zpoZ8%_Fcf^tfall&jVw`yVDgaQ;S^qf|ed?%wub7CFzYAj&gc>{-I*?{oU7a3(7~v zz%wUi=Jx!QC&o0fOmvaMscjge89rGi%f-4g?!%_5U$ba|(AUno@w$@&Q znxLhWxIv%^=9PE!-Ub-W-T}Dm9u0{bEp^LMf0y_npq1HESebYHFB5 zL2#Ez+vaSz?4hX#2upUF!YM0`&C+av%2lL8zr?D~i z_au-5UyvCRlCt7yEvKYwU(<`^JL6A}>+mkKzaC|WPGURS_ z{snVWW{9D-yv2vy%6K%f`DhB$oV{LJQ(}a@kC`I=`y(4{blswIe)qe9>C^DsU>xUb zVEo>T@*$;wUciNeh z^4R9>kumM)aq8*PG`>1PrDF9|f|-k#SIK@IgWgLr%UFFV$)JobX?~BO4Yv@mv`EST z_L9BD2G6l(hS;ir)0+kz3HFjNm<-|eYv>J=0Ayziq9jw90Y3R|-{Ko<8#acnpFdTo zHt#$K*OBbpO0>_7+IG<}d;hRZ4JY{pp|4Rym!U8aTNo%2>8v5!iOUY*$9eyEd`xw6>&q9ZR7T25L_6Dz z?<_TvHbXxIAE9RY0-UImMb@B?@tr4{{^USWylQ*^&NpG*D~QGzP`J&{Y;o z!j_r5&+h_PeDx&#AoV!nA}$vVW*-?wJ3(+1F9_-gyj!g!gSj1wf~rNL;F0e}wN;51 z0GD|*PFYD6ogUI?jo*v`iNX!|e}8V_o9+YV7e*sutF?U;9Q_|3uY1s=$#&syRemxL ztask59SRK_kmK`@XAly`bMQk3XMqx0}!&F^%?StkRq0|1QMB@(zl*T`IRNnDY}7LPYKRyM^Uh z@p+FwtMIymVCjl&iwmCl+(rCHF6EP?qO-bgvUR_PKR}Lk(iEc@ zS+#T~4%3QGH9ytRkrP+eajRVfiW%f~Avtua37i~F1DTE#blDzniY@e(pyZ@tj>euJ z2VWN-kJB84a2Lz50X2&vIJef7lP|k0UQG~{Q2cSWO2biw#(|`VjWGsTBb}QwK9w*G zo&1frBZV6x*Y~JGC7D{0dBHN<84{v*`UG&*pJZ8J?8X6QX9C?NEjiO~;pE zeuC6q?3vhSY9S`V<8t}L%$9G>pcS3=`b%5m>mB zi5fkXpAv}(2l~2JW2E_;R!X25Zs2UmvZn{6$k92!c8)+R%aFU32)y68fMGGuZWMPt0H31LqNhKDWDmK!W!Cq7O9zt+V;@$ zHe$;@#ay0)ebDT5wT}SRg1tN3WLQTEWhr7xK8ul8VC{@+xQzLV95c+50ST z?1IRBdfu6&Y_v+c3!3<7X;zvkgFMxpn41-Y5orf!7ZoFO+@5i}4vGMM!X^`Q^gCIY z7E`&wZf`}hb^c*hyk4Y~t`_I*`sE4{7jJzs5=P9jQYVTzhW80!qYPF18 z>7e@Uop3eyb=bFZDJa$yii38rv31pMKpr)s9X{!S(!NI5pG`B-F&g&^CsXKG6+bo{ zfw%9+7^@~rZLfZ^=c|fr%18wBo7cOqJJTjf)6joI+Gif7&rp2ZX4mIpd(WfXsWE*W z>Gf|LRV%$Q(5{6hq1{S|ja7laU~4|lC1L13*P5XA`%F8#zkoDP0bhRpn)S4>auL+! ziAPMND%=MrOsiK+WL$)?l@t4(S2#qv%!z}H`nT8$m; za-XAiC+Jtbm5YTkXY>(cVgPm^vHH8&WjyA}?xHOz*>jOl&*XND*&)3jwNe17=nQbg zxeII!kvDp--=!j>?Bwq|Uvs+3uxIjcg|Mwa7x%vxW+>;rI4J)2ZtusRf5eNtYM+T( z8}LHHEV9)J;Xvib+6|v^lN~yg!9NX^hH?l2!#Z?HE3V09b!2aTvaQUlcBeEV1dF&# zg`Gumm3JT6Y}hqxH_Y5P0LTkwe-t&>eZbv+?>fk_7B*JhglpkCIs#L_KedQ_n453I zPF$89*K5o+cKc#~6}-oGh=*TrtYi)qF`rt=svJ^+W@X40W6tjhBikqv^=hD)|7B)viH(DJqGh`cOLSuV;#L)b5WnZp`17Kdj>(W^eoQ; zyr>1%HBW@(&Q)K!nv!6rV7Ej}$oU*CVRD7@vY+zT=@;xRb}A@QIeQfS9j7J?x4yjZ_qa$G4{@;HT6(R7yG z%`g95#`KG%%7<`^A+{A)}5!Rpq>-i>*>f` zUp?(BQBFx(?MZ_>a|4@s!_yxgk~nmEZBD4H=7-{nJU#gU_*4!mt*E$hznfeed&yyL z!vu)X7TU+3?@i;WoIP-cgwya6I!UJQZ`2e#|6>nxzkerupU@+twEqu7x=zx0P0r6q&yQ{`St&ao6EcLn~5@Ln@HNTl)oBoGMY&bN^NCE)uriq;F;IwW{!S|<&x>H{NP*=Bfip6}IQy~Jo32i&8k+~>&_OSr} zs9I|yl`_{T<3s7r`+_j_h0E-Hg#i(WSzj4n*7AR?@{4c5tM_~(c=ZhOeJ~AJW^Ad~u3BkhBPzds^_7{uDmbAV{6@TR+bm!_`Kj1tSv8qL zi3XTNAX5BuY(reD;Y8^M%qsk+)G5-q z(R_{U`Dt@_hJi*b`doq7ZT?m0vs(oHUzaZE7PA>Pf(eE*lV-9^Miq-Hf0Kr+8`&sM zx%c_KC*rsmB-GW&6tnTnh6ChJ?OUIW=ARqNUI7ve?f?DnxJb%e+=uCND=VDXS6tJ| zHIFq?pBdfVu*PCNRA4&w?~TvG&hD)Z8D6jN8E=Fvc`4T*;@S#=l>9fp`38r#A6CvO znFPq!+|N>_0vI_D$o~53>*y3gr-qz4=2uM5Vs34*sdrR4j7$k0u&%e1WE(B${%M&wC1F*IO+_5M=k(fW7mPlzDb5F)gT@=i#lYOxu*HCx-d-7r8 z1^4sK*e7r|xf~S^TilOym}2rRW0#_3W|_IvNDqf47haExdcVmviNoJc;=mp&BD6Sz?GmwHa=i7h)2xDVr zdv2=;0uvkz@kyWSB|EcJ3x;eUk0t2Tp|Ny5GM8@piRAhnGnujIh5MGIu5xK{9NH~{ zVK84d7EKZrGxvpS3uyT%fMn-2Z;L(T>sjj^wTHjZ{&$*U8}BkxuzyU{ZGY9aL^eZo z4RyP2{sw2CCTQ__T)R=Sr&YUWSSH9G-!CsOs?uuZPigeLgbB(Y)aAn$qjzPEBbkWP zVkww&sdQ3)&u;h+ryLTFx-XiotMmH z`u|4A6V&CxXk2_;QkqV??RCtP=Zt8bxOs%%mOn0`y&LSN=bg@ZE(++_j z18h?2rNqZDfL#@pLxf*v28e($lgC0G51yu&sNwx`_pxFbd#{$&B6Bm(oi6S&Z)z6q zMsTjj5&3i^^(S9G)goaP%QkipVBk5|;k>iuexrfVVz2py|NH<=U8|tiWh@73a(E8H zl-!uP-WUBl1r+$OU~dqk4Bj=H_nnzCQA51NE4G0zE26kA7{qiDPx(}J1r0bv^pxlG9PS)y7&MX3NB~D_#>1x8=HK>`#VJ+8+rPDg(u+F^ZVRvZFaenOY^g=j-Z zzZ+h%{2sBtci9d(VehqQ7-W(Dd(>9L_dDiok71GunLfc^W0cbV$2~E%dzqyVtk=te zekbxj4@b!Q1CM_viElmceJW&rf6c?u$`rq=eaxW$vI;wLtJc^ z&1O-LY{q5VqoD-%`~_DkjqcJ=fFDx_K~~dA1eO8P?#sL0B*d^|3|V`xtXD@vQAluy z-jxZE$WD601_}m3K}bWOWK%#zZsg-P6qbCTpfj(E<-)s@zusN6lfK6y$gg>|6`ZOD zstgn}O4{G0FH`s&W$-tbi6gv%OySLy;4*XcnaX~;^q<4<3na7Ow;!vWq_38g;GV>4 zZdfeR2kJC%ewcUg7j;L^mcC`HtI2l&8ZnlwRq=}f)8dp02Vntj04!5~m|N}hFmC(K zoxtI|!KrR!mC^mkyGGU@jA!u$>{8dOG0ExV#ZciBEvDI_#qGZ}24 z
-
-

- {/*Welcome to back*/} - {localeData.welcome} -

-

- FC-Career-Dashboard -

-
+ + {/* Header */} +
+
{localeData.welcome}
+
{'fccareer.top'}
+ + {/* Form */}
+ Discord:{' '} @@ -33,7 +25,7 @@ export function getContactUs() { }} underline > - FIFA-Career-Dashboard + VeejaLiu/FCT-Frontend @@ -52,47 +44,24 @@ export function getContactUs() { ); } -const LoginPage = () => { +const LoginOrRegisterPage = () => { const [isLogin, setIsLogin] = useState(true); - // const [showModal, setShowModal] = useState(false); - return ( - {/* Left */} - - {isLogin ? ( - - ) : ( - - )} - - - {/* Right */} - - {!isLogin ? ( - - ) : ( - - )} - + {isLogin ? ( + + ) : ( + + )} ); }; -export default LoginPage; +export default LoginOrRegisterPage; diff --git a/src/pages/LoginPage/RegisterComponent.module.scss b/src/pages/LoginPage/RegisterComponent.module.scss deleted file mode 100644 index bde3082..0000000 --- a/src/pages/LoginPage/RegisterComponent.module.scss +++ /dev/null @@ -1,71 +0,0 @@ -.register { - background: var(--semi-color-bg-0); - width: 450px; - min-width: 450px; - - .component66 { - align-items: center; - display: inline-flex; - flex-direction: column; - row-gap: 24px; - flex-shrink: 0; - - - .header { - align-items: center; - display: inline-flex; - flex-direction: column; - justify-content: center; - row-gap: 6px; - flex-shrink: 0; - - .title { - color: var(--semi-color-text-0); - font-size: 32px; - font-weight: 600; - line-height: 44px; - min-width: 128px; - vertical-align: middle; - flex-shrink: 0; - } - - & > .text { - color: var(--semi-color-text-2); - font-size: 16px; - font-weight: 400; - line-height: 22px; - min-width: 163px; - vertical-align: middle; - flex-shrink: 0; - } - } - } - - .form { - align-items: flex-start; - display: flex; - flex-direction: column; - flex-shrink: 0; - row-gap: 28px; - align-self: stretch; - - .inputs { - align-items: flex-start; - display: flex; - flex-direction: column; - flex-shrink: 0; - row-gap: 24px; - align-self: stretch; - } - - .errorMessage { - color: red; - font-size: 14px; - } - - .button { - height: 40px; - width: 440px; - } - } -} diff --git a/src/pages/LoginPage/RegisterComponent.tsx b/src/pages/LoginPage/RegisterComponent.tsx index b934850..9a5a777 100644 --- a/src/pages/LoginPage/RegisterComponent.tsx +++ b/src/pages/LoginPage/RegisterComponent.tsx @@ -5,10 +5,10 @@ import { Notification, Space, } from '@douyinfe/semi-ui'; -import { getContactUs } from './LoginPage.tsx'; +import { getContactUs } from './LoginOrRegisterPage.tsx'; import { UserApis } from '../../service/UserApis.ts'; import { useState } from 'react'; -import styles from './RegisterComponent.module.scss'; +import styles from './loginOrRegister.module.scss'; export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { const [registerUsername, setRegisterUsername] = useState(''); @@ -81,14 +81,10 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { return ( {(localeData: any, localeCode: string, dateFnsLocale: any) => ( - -
-
-

{localeData.title}

-

- {localeData.text} -

-
+ +
+
{localeData.title}
+
{localeData.text}
diff --git a/src/pages/LoginPage/loginOrRegister.module.scss b/src/pages/LoginPage/loginOrRegister.module.scss new file mode 100644 index 0000000..c830cd5 --- /dev/null +++ b/src/pages/LoginPage/loginOrRegister.module.scss @@ -0,0 +1,48 @@ +.loginOrRegister { + width: 90%; + min-width: 300px; + max-width: 550px; + + .header { + .title { + color: var(--semi-color-text-0); + font-size: 32px; + font-weight: bolder; + } + + .subtitle { + //background-color: red; + color: var(--semi-color-text-2); + font-size: 16px; + text-align: center; + } + } + + .form { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + row-gap: 28px; + align-self: stretch; + + .inputs { + align-items: flex-start; + display: flex; + flex-direction: column; + flex-shrink: 0; + row-gap: 24px; + align-self: stretch; + } + + .errorMessage { + color: red; + font-size: 14px; + } + + .button { + height: 40px; + width: 100%; + } + } +} \ No newline at end of file From 6e513e8eab1470edf9806b3cbeab4a9d1dee1e5d Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 26 Dec 2024 13:09:43 +0800 Subject: [PATCH 30/37] refactor the LoginOrRegister Page --- .../LoginPage/ContactUsComponent.module.css | 25 ++++++++++ src/pages/LoginPage/ContactUsComponent.tsx | 49 +++++++++++++++++++ src/pages/LoginPage/LoginComponent.tsx | 18 +++++-- ...e.scss => LoginOrRegisterPage.module.scss} | 28 +++++++---- src/pages/LoginPage/LoginOrRegisterPage.tsx | 45 ++--------------- src/pages/LoginPage/RegisterComponent.tsx | 18 +++++-- 6 files changed, 121 insertions(+), 62 deletions(-) create mode 100644 src/pages/LoginPage/ContactUsComponent.module.css create mode 100644 src/pages/LoginPage/ContactUsComponent.tsx rename src/pages/LoginPage/{loginOrRegister.module.scss => LoginOrRegisterPage.module.scss} (59%) diff --git a/src/pages/LoginPage/ContactUsComponent.module.css b/src/pages/LoginPage/ContactUsComponent.module.css new file mode 100644 index 0000000..8076039 --- /dev/null +++ b/src/pages/LoginPage/ContactUsComponent.module.css @@ -0,0 +1,25 @@ +.contactContainer { + margin-top: 50px; + display: flex; + flex-direction: column; + gap: 12px; +} + +.contactItem { + display: flex; + align-items: center; +} + +.contactLabel { + font-weight: bold; + min-width: 80px; + display: inline-block; + /*text-align: right;*/ + margin-right: 10px; +} + +.contactLink { + display: flex; + align-items: center; + gap: 4px; +} diff --git a/src/pages/LoginPage/ContactUsComponent.tsx b/src/pages/LoginPage/ContactUsComponent.tsx new file mode 100644 index 0000000..f84eeda --- /dev/null +++ b/src/pages/LoginPage/ContactUsComponent.tsx @@ -0,0 +1,49 @@ +import { IconGithubLogo, IconMailStroked1 } from '@douyinfe/semi-icons'; +import { Typography } from '@douyinfe/semi-ui'; +import styles from './ContactUsComponent.module.css'; + +const { Text } = Typography; + +const contactLinks = [ + { + label: 'Discord', + href: 'https://discord.gg/aKfWAtbJ8F', + text: 'https://discord.gg/aKfWAtbJ8F', + icon: null, + }, + { + label: 'GitHub', + href: 'https://github.com/VeejaLiu/FIFA-Career-Dashboard-Frontend', + text: 'VeejaLiu/FCT-Frontend', + icon: , + }, + { + label: 'Email', + href: 'mailto:support@fccareer.top', + text: 'support@fccareer.com', + icon: , + }, +]; + +export function ContactUsComponent() { + return ( +
+ {contactLinks.map((link, index) => ( +
+ {link.label} + + {link.text} + +
+ ))} +
+ ); +} diff --git a/src/pages/LoginPage/LoginComponent.tsx b/src/pages/LoginPage/LoginComponent.tsx index babb279..615f0e4 100644 --- a/src/pages/LoginPage/LoginComponent.tsx +++ b/src/pages/LoginPage/LoginComponent.tsx @@ -5,10 +5,9 @@ import { Notification, Space, } from '@douyinfe/semi-ui'; -import { getContactUs } from './LoginOrRegisterPage.tsx'; import { UserApis } from '../../service/UserApis.ts'; import { setToken } from '../../common/common.ts'; -import styles from './loginOrRegister.module.scss'; +import styles from './LoginOrRegisterPage.module.scss'; import { useState } from 'react'; export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { @@ -61,8 +60,18 @@ export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { {/* Header */}
-
{localeData.welcome}
-
{'fccareer.top'}
+
+ {'FCT +
+
+
{localeData.welcome}
+
{'fccareer.top'}
+
{/* Form */} @@ -98,7 +107,6 @@ export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { {localeData.registerPrompt}
- {getContactUs()}
)} diff --git a/src/pages/LoginPage/loginOrRegister.module.scss b/src/pages/LoginPage/LoginOrRegisterPage.module.scss similarity index 59% rename from src/pages/LoginPage/loginOrRegister.module.scss rename to src/pages/LoginPage/LoginOrRegisterPage.module.scss index c830cd5..b681ac9 100644 --- a/src/pages/LoginPage/loginOrRegister.module.scss +++ b/src/pages/LoginPage/LoginOrRegisterPage.module.scss @@ -4,17 +4,25 @@ max-width: 550px; .header { - .title { - color: var(--semi-color-text-0); - font-size: 32px; - font-weight: bolder; - } + display: flex; + align-items: center; + margin-top: 20px; + + .titles { + margin-left: 20px; + + .title { + color: var(--semi-color-text-0); + font-size: 20px; + font-weight: bolder; + } - .subtitle { - //background-color: red; - color: var(--semi-color-text-2); - font-size: 16px; - text-align: center; + .subtitle { + //background-color: red; + color: var(--semi-color-text-2); + font-size: 12px; + text-align: center; + } } } diff --git a/src/pages/LoginPage/LoginOrRegisterPage.tsx b/src/pages/LoginPage/LoginOrRegisterPage.tsx index 11cd8dc..521f25e 100644 --- a/src/pages/LoginPage/LoginOrRegisterPage.tsx +++ b/src/pages/LoginPage/LoginOrRegisterPage.tsx @@ -1,48 +1,8 @@ -import { IconGithubLogo, IconMailStroked1 } from '@douyinfe/semi-icons'; -import { Space, Typography } from '@douyinfe/semi-ui'; +import { Space } from '@douyinfe/semi-ui'; import { useState } from 'react'; import { LoginComponent } from './LoginComponent.tsx'; import { RegisterComponent } from './RegisterComponent.tsx'; - -const { Text } = Typography; - -export function getContactUs() { - return ( - - - Discord:{' '} - - https://discord.gg/aKfWAtbJ8F - - - - GitHub:{' '} - } - link={{ - href: 'https://github.com/VeejaLiu/FIFA-Career-Dashboard-Frontend', - target: '_blank', - }} - underline - > - VeejaLiu/FCT-Frontend - - - - Email:{' '} - } - link={{ - href: 'mailto:support@fccareer.top', - target: '_blank', - }} - > - support@fccareer.com - - - - ); -} +import { ContactUsComponent } from './ContactUsComponent.tsx'; const LoginOrRegisterPage = () => { const [isLogin, setIsLogin] = useState(true); @@ -60,6 +20,7 @@ const LoginOrRegisterPage = () => { ) : ( )} + ); }; diff --git a/src/pages/LoginPage/RegisterComponent.tsx b/src/pages/LoginPage/RegisterComponent.tsx index 9a5a777..04e7f34 100644 --- a/src/pages/LoginPage/RegisterComponent.tsx +++ b/src/pages/LoginPage/RegisterComponent.tsx @@ -5,10 +5,9 @@ import { Notification, Space, } from '@douyinfe/semi-ui'; -import { getContactUs } from './LoginOrRegisterPage.tsx'; import { UserApis } from '../../service/UserApis.ts'; import { useState } from 'react'; -import styles from './loginOrRegister.module.scss'; +import styles from './LoginOrRegisterPage.module.scss'; export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { const [registerUsername, setRegisterUsername] = useState(''); @@ -83,8 +82,18 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { {(localeData: any, localeCode: string, dateFnsLocale: any) => (
-
{localeData.title}
-
{localeData.text}
+
+ {'FCT +
+
+
{localeData.title}
+
{localeData.text}
+
@@ -188,7 +197,6 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { {localeData.loginPrompt}
- {getContactUs()}
)} From 044d11e77f5245d5b4e657343ffd8a786ab09bda Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 26 Dec 2024 13:16:27 +0800 Subject: [PATCH 31/37] refactor the LoginOrRegister Page --- src/assets/image/logo.png | Bin 0 -> 23215 bytes src/assets/image/logo.svg | 29 ++++++++++++++++++++++ src/pages/LoginPage/LoginComponent.tsx | 2 +- src/pages/LoginPage/RegisterComponent.tsx | 2 +- 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 src/assets/image/logo.png create mode 100644 src/assets/image/logo.svg diff --git a/src/assets/image/logo.png b/src/assets/image/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8070881da05115c7e9a518894a25571cdb7a73e7 GIT binary patch literal 23215 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
W#O+eGpA@}F>7jSmb>quq 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%0DI@}4mEQJWbOFx0gC-|)|5`HvN-KGZq>N zgifDcV7?*`qE2smPk@thm7to8-ETW*_@3?8hW17oKW{};d6Pb6B_`-@g&jmaes)7h z2|2DP@~=ScJP@cIgl8b9Qx?KUJ9kAdT)t~uYGN`k4D2MaeEIXGmB_8ExFVCc1%fSB zB+ujKTG#(TZuN)8c_w4A_AJAoWK}d#A1hKLA#(E%#0|5urdMfCJ>xE9bX>poHOG^C zQ*85R$2r3e(1Ut$+^h-P`HOPKvW0hOYXFIjq|4)UsbCp*ahLD`bk+>a$X8Qw!tBv< zMuR(2d#pG5c?L1`J@*YZP1^8+DgS9Y`>s05@a+D0!R_)$HMpVv)#_>Dcd2an1KT;l&~?+ zMD~kf)v?3Jw_J+FgF(<1X#c{eOLC)1SH{05=RMG1zeKj*fn7Xb{ZP^ce4btn-r!?0 z>wfa2vMq~|(~E;9qsbk+{)hYDmAR8`8sUN<=Jd@y_%GNstULEGI)pDf(2!CCgJwlS z-A8e9r9t<44FdF}ryw8>JncYlS*7hhk@wN17OJ@=%?R^5TN3)VpL{kwTjV|euV310 zA)`7xx(+}GHtnQ3tQNn3?PMsl*uA(vdbwrXYjD8dbMH0qB_=asfoKCj?Fw;%)*yq) zzq+FC>@(cJz0S(2J+iI2I$jVNN6I3FX3Vkr2|TvA595zYK-^DIh!&Jj#=gK&hcZM1 z?|{Zbx5jeL!Ag#DTl+b0=6)?a{K)gDb^TSi-ZGJ_C$@Pp#ZgIthSvKm@P|%SU&B8_ zs)(Q@l#jt9#7XG~syEaoQ`vmWLBR{=USllL<-k4)>6z++o)mw0oZP8Np%-Z2%!-G` zQ^X6`wJZf}PRJS^IzNneb8&kt;ue3$9hfrtQtr9Jv;mbovEk6Swkv~C-AW?DUnTEu zQkui9dn3*px;;?&Q)yl&CArcm)TFbXE3ZClrOzKP%U@@{k;eyT$VT?tNtMg zK71GV1MoPn`>{d_lz-%!>|j6NLiJAlx^mJaa;v&b8rP0msCE>WLOBa?F5W8s{V?3v z*Tngv$gM{DKvy_1qf4?0$ZmVr(GTQ}qjQ1-!_jKY8&L;(b9(#Zx80OivJ<6{Dp`|0 zVOEDT!LKa%yj%|_wzSvM*H6_GA?~L0w-HpwLvRZKD_HZqAZhp5)T!;%+br84fl_dJ z6z_vf9!VjyaLmXFC@^n`7PlK-(i$+{D5S2j)CWZC{y$A>Qkx*(p#LC`I7(E&jVU21 z5D)(<)S`)$M`V>jk5+!Qz0c;=C}9%}lwlPJUJGIDTK^He%I2)*Hy7MM-sG66g6eGP z$SD4=-nB6OysWAJ`&!>@EGRB^BeV06gZ=d~c6d%?)zF&eHpQxd1&$#>&9`sCIhTWW zN)VVjC}X%%=48S94i0=cu)Tm49(0$=;+oEYpX5qv`I0Kxify}zN=`^LzO7k9bSd2L zybse^YBd=J&#P%O{Y}7ag79E;CRe(*zCaPAXiIDIwzVIl|6-q{M-*_{Iw|_ax3mYe zOh)b-H6w91Abllew9babYffHas6anC`V*nq2@VNa(=?_BqP2+2^Ftm4L*u9O>vkfZ63 z#KLX&JkHNkk!4CP`(?Iu78+cT*$ZhzP86}8M)tX(K_0yIqQ?5f5KidE9I+@Wq4CNJ&FUpK1QZ<e9W(em&JWrfc*PJb%dq4}*AokD)PHWvOF zZ<^j9?V_+P@2cQ(z0k5CS^SDp?=cBp#0b^0Gt1(08yl0dPvBO>NzJCymGm+2VxhL= zssMNbZ>zzCxKQ1_ifW(U(B?bcfo(ndJ~K|Ui3edFJmPkOKcB&5*njK$OA*`0Wz8+N Qfry$$Ps<2ZinM?HKQq}q0{{R3 literal 0 HcmV?d00001 diff --git a/src/assets/image/logo.svg b/src/assets/image/logo.svg new file mode 100644 index 0000000..b8e539d --- /dev/null +++ b/src/assets/image/logo.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + diff --git a/src/pages/LoginPage/LoginComponent.tsx b/src/pages/LoginPage/LoginComponent.tsx index 615f0e4..fe07de0 100644 --- a/src/pages/LoginPage/LoginComponent.tsx +++ b/src/pages/LoginPage/LoginComponent.tsx @@ -64,7 +64,7 @@ export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { {'FCT
diff --git a/src/pages/LoginPage/RegisterComponent.tsx b/src/pages/LoginPage/RegisterComponent.tsx index 04e7f34..b318e30 100644 --- a/src/pages/LoginPage/RegisterComponent.tsx +++ b/src/pages/LoginPage/RegisterComponent.tsx @@ -86,7 +86,7 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { {'FCT
From ba4ba0ba4d8375daafcd2047e68bb9a13533e873 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 26 Dec 2024 13:20:19 +0800 Subject: [PATCH 32/37] refactor the LoginOrRegister Page --- src/pages/LoginPage/LoginComponent.tsx | 8 ++------ src/pages/LoginPage/RegisterComponent.tsx | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/pages/LoginPage/LoginComponent.tsx b/src/pages/LoginPage/LoginComponent.tsx index fe07de0..74653bc 100644 --- a/src/pages/LoginPage/LoginComponent.tsx +++ b/src/pages/LoginPage/LoginComponent.tsx @@ -9,6 +9,7 @@ import { UserApis } from '../../service/UserApis.ts'; import { setToken } from '../../common/common.ts'; import styles from './LoginOrRegisterPage.module.scss'; import { useState } from 'react'; +import logo from '../../assets/image/logo.svg'; export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { const [loginUsername, setLoginUsername] = useState(''); @@ -61,12 +62,7 @@ export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { {/* Header */}
- {'FCT + {'FCT
{localeData.welcome}
diff --git a/src/pages/LoginPage/RegisterComponent.tsx b/src/pages/LoginPage/RegisterComponent.tsx index b318e30..16774bb 100644 --- a/src/pages/LoginPage/RegisterComponent.tsx +++ b/src/pages/LoginPage/RegisterComponent.tsx @@ -8,6 +8,7 @@ import { import { UserApis } from '../../service/UserApis.ts'; import { useState } from 'react'; import styles from './LoginOrRegisterPage.module.scss'; +import logo from '../../assets/image/logo.svg'; export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => { const [registerUsername, setRegisterUsername] = useState(''); @@ -83,12 +84,7 @@ export const RegisterComponent = ({ setIsLogin }: { setIsLogin: any }) => {
- {'FCT + {'FCT
{localeData.title}
From 03d7cc22b441a8a5b700c85125b60c295522b575 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 2 Jan 2025 14:38:59 +0800 Subject: [PATCH 33/37] Refactor the PlayerTrendsPage.tsx --- src/App.tsx | 4 +- .../PlayerTrendsPage/PlayerTrendsPage.tsx | 42 +++++++++---------- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 72b1f69..8554195 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -80,8 +80,10 @@ function WebsiteLogoComponent() {

{getLogoByVersion(defaultGameVersion)}

{localeData.title} diff --git a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx index 47b963b..78d6d8a 100644 --- a/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx +++ b/src/pages/PlayerTrendsPage/PlayerTrendsPage.tsx @@ -1,15 +1,7 @@ import * as React from 'react'; -import { - Area, - AreaChart, - CartesianGrid, - // CartesianGrid, - Tooltip, - XAxis, - YAxis, -} from 'recharts'; -import { PlayerApis, PlayerTrendData } from '../../service/PlayerApis.ts'; import { useEffect } from 'react'; +import { Area, AreaChart, Brush, Tooltip, XAxis, YAxis } from 'recharts'; +import { PlayerApis, PlayerTrendData } from '../../service/PlayerApis.ts'; import { Popover, Space } from '@douyinfe/semi-ui'; import './PlayerTrendsPage.css'; import { @@ -98,12 +90,7 @@ function PlayerTrendsPage(): React.ReactElement { const navigate = useNavigate(); const fetchPlayerTrends = async () => { - const res = await PlayerApis.getPlayerTrends(); - res.forEach((player) => { - player.trends.forEach((trend) => { - trend.inGameDate = formatDate(trend.inGameDate); - }); - }); + const res: PlayerTrendData[] = await PlayerApis.getPlayerTrends(); setData(res); }; @@ -154,7 +141,7 @@ function PlayerTrendsPage(): React.ReactElement { return null; } return ( -

+

{item.text}

{thisPositionPlayers.map((player) => { @@ -229,11 +216,10 @@ function PlayerTrendsPage(): React.ReactElement { - + {/**/} + ); From 46480c40bff9320a00d9632e5f4861b99500018a Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 2 Jan 2025 16:06:34 +0800 Subject: [PATCH 34/37] Refactor page with Tailwind css --- package.json | 3 + pnpm-lock.yaml | 530 +++++++++++++++++- postcss.config.js | 6 + src/index.css | 4 + src/locales/en_GB.ts | 1 + src/locales/zh_CN.ts | 1 + .../SettingsPage/AccountSettingComponent.tsx | 30 +- .../SettingsPage/ApiSecretKeyComponent.tsx | 41 +- src/pages/SettingsPage/ChangePassword.tsx | 18 +- src/pages/SettingsPage/SettingsPage.tsx | 68 +-- tailwind.config.js | 8 + 11 files changed, 595 insertions(+), 115 deletions(-) create mode 100644 postcss.config.js create mode 100644 tailwind.config.js diff --git a/package.json b/package.json index eea4763..31051b5 100644 --- a/package.json +++ b/package.json @@ -30,13 +30,16 @@ "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react": "^4.0.3", + "autoprefixer": "^10.4.20", "eslint": "^8.45.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", + "postcss": "^8.4.49", "prettier": "^3.2.2", "sass": "^1.77.8", + "tailwindcss": "^3.4.17", "typescript": "^5.5.4", "vite": "5.4.6" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b733735..f8ddced 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -51,6 +51,9 @@ importers: '@vitejs/plugin-react': specifier: ^4.0.3 version: 4.3.1(vite@5.4.6(@types/node@22.2.0)(sass@1.77.8)) + autoprefixer: + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.49) eslint: specifier: ^8.45.0 version: 8.57.0 @@ -66,12 +69,18 @@ importers: eslint-plugin-react-refresh: specifier: ^0.4.3 version: 0.4.9(eslint@8.57.0) + postcss: + specifier: ^8.4.49 + version: 8.4.49 prettier: specifier: ^3.2.2 version: 3.3.3 sass: specifier: ^1.77.8 version: 1.77.8 + tailwindcss: + specifier: ^3.4.17 + version: 3.4.17 typescript: specifier: ^5.5.4 version: 5.5.4 @@ -81,6 +90,10 @@ importers: packages: + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} @@ -404,6 +417,10 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@jridgewell/gen-mapping@0.3.5': resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} @@ -437,6 +454,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -469,55 +490,46 @@ packages: resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.20.0': resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.20.0': resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.20.0': resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.20.0': resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.20.0': resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.20.0': resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.20.0': resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.20.0': resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} @@ -705,6 +717,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -713,10 +729,20 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -734,6 +760,13 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + axios@1.7.4: resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} @@ -769,6 +802,10 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + caniuse-lite@1.0.30001649: resolution: {integrity: sha512-fJegqZZ0ZX8HOWr6rcafGr72+xcgJKI9oWfDW5DrD7ExUtgZC7a7R7ZYmZqplh7XDocFdGeIFn7roAxhOeYrPQ==} @@ -833,6 +870,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + compute-scroll-into-view@1.0.20: resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} @@ -850,6 +891,11 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -935,10 +981,16 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -946,9 +998,18 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + electron-to-chromium@1.5.4: resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -1112,10 +1173,17 @@ packages: debug: optional: true + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1124,6 +1192,9 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -1136,6 +1207,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -1163,6 +1238,10 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} @@ -1214,6 +1293,10 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -1221,6 +1304,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} @@ -1246,6 +1333,13 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1279,6 +1373,13 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -1299,6 +1400,9 @@ packages: lottie-web@5.12.2: resolution: {integrity: sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -1469,8 +1573,8 @@ packages: micromark@4.0.0: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -1488,9 +1592,20 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1506,10 +1621,18 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -1525,6 +1648,9 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -1544,6 +1670,13 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -1557,12 +1690,60 @@ packages: picocolors@1.1.0: resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -1657,6 +1838,9 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1693,6 +1877,11 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -1738,6 +1927,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -1757,6 +1950,14 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} @@ -1764,6 +1965,10 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -1774,6 +1979,11 @@ packages: style-to-object@1.0.6: resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -1782,13 +1992,29 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + synckit@0.9.1: resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} + tailwindcss@3.4.17: + resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} + engines: {node: '>=14.0.0'} + hasBin: true + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -1812,6 +2038,9 @@ packages: peerDependencies: typescript: '>=4.2.0' + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -1864,6 +2093,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utility-types@3.11.0: resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} engines: {node: '>= 4'} @@ -1917,12 +2149,25 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -1932,6 +2177,8 @@ packages: snapshots: + '@alloc/quick-lru@5.2.0': {} + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 @@ -2021,7 +2268,7 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 '@babel/parser@7.25.3': dependencies: @@ -2268,6 +2515,15 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 @@ -2325,6 +2581,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@pkgjs/parseargs@0.11.0': + optional: true + '@pkgr/core@0.1.1': {} '@remix-run/router@1.19.0': {} @@ -2585,6 +2844,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.1.0: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -2593,11 +2854,17 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 + arg@5.0.2: {} + argparse@2.0.1: {} array-union@2.1.0: {} @@ -2608,6 +2875,16 @@ snapshots: asynckit@0.4.0: {} + autoprefixer@10.4.20(postcss@8.4.49): + dependencies: + browserslist: 4.23.3 + caniuse-lite: 1.0.30001649 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.0 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + axios@1.7.4: dependencies: follow-redirects: 1.15.6 @@ -2646,6 +2923,8 @@ snapshots: callsites@3.1.0: {} + camelcase-css@2.0.1: {} + caniuse-lite@1.0.30001649: {} ccount@2.0.1: {} @@ -2707,6 +2986,8 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@4.1.1: {} + compute-scroll-into-view@1.0.20: {} concat-map@0.0.1: {} @@ -2721,6 +3002,8 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cssesc@3.0.0: {} + csstype@3.1.3: {} d3-array@3.2.4: @@ -2789,10 +3072,14 @@ snapshots: dependencies: dequal: 2.0.3 + didyoumean@1.2.2: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + dlv@1.1.3: {} + doctrine@3.0.0: dependencies: esutils: 2.0.3 @@ -2802,8 +3089,14 @@ snapshots: '@babel/runtime': 7.25.0 csstype: 3.1.3 + eastasianwidth@0.2.0: {} + electron-to-chromium@1.5.4: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -2973,7 +3266,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -3006,17 +3299,26 @@ snapshots: follow-redirects@1.15.6: {} + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + fraction.js@4.3.7: {} + fs.realpath@1.0.0: {} fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + gensync@1.0.0-beta.2: {} glob-parent@5.1.2: @@ -3027,6 +3329,15 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -3057,6 +3368,10 @@ snapshots: has-flag@4.0.0: {} + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + hast-util-to-estree@3.1.0: dependencies: '@types/estree': 1.0.5 @@ -3137,10 +3452,16 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + is-decimal@2.0.1: {} is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -3159,6 +3480,14 @@ snapshots: isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.7: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -3184,6 +3513,10 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -3200,6 +3533,8 @@ snapshots: lottie-web@5.12.2: {} + lru-cache@10.4.3: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -3639,7 +3974,7 @@ snapshots: transitivePeerDependencies: - supports-color - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -3658,8 +3993,20 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minipass@7.1.2: {} + ms@2.1.2: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -3668,8 +4015,12 @@ snapshots: normalize-path@3.0.0: {} + normalize-range@0.1.2: {} + object-assign@4.1.1: {} + object-hash@3.0.0: {} + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -3691,6 +4042,8 @@ snapshots: dependencies: p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -3712,6 +4065,13 @@ snapshots: path-key@3.1.1: {} + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-type@4.0.0: {} periscopic@3.1.0: @@ -3724,12 +4084,49 @@ snapshots: picocolors@1.1.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} - postcss@8.4.47: + pify@2.3.0: {} + + pirates@4.0.6: {} + + postcss-import@15.1.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.4.49): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.49 + + postcss-load-config@4.0.2(postcss@8.4.49): + dependencies: + lilconfig: 3.1.3 + yaml: 2.7.0 + optionalDependencies: + postcss: 8.4.49 + + postcss-nested@6.2.0(postcss@8.4.49): + dependencies: + postcss: 8.4.49 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.49: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -3821,6 +4218,10 @@ snapshots: dependencies: loose-envify: 1.4.0 + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -3887,6 +4288,12 @@ snapshots: resolve-from@4.0.0: {} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + reusify@1.0.4: {} rimraf@3.0.2: @@ -3943,6 +4350,8 @@ snapshots: shebang-regex@3.0.0: {} + signal-exit@4.1.0: {} + slash@3.0.0: {} source-map-js@1.2.0: {} @@ -3953,6 +4362,18 @@ snapshots: space-separated-tokens@2.0.2: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + stringify-entities@4.0.4: dependencies: character-entities-html4: 2.1.0 @@ -3962,6 +4383,10 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + strip-json-comments@3.1.1: {} style-to-object@0.4.4: @@ -3972,6 +4397,16 @@ snapshots: dependencies: inline-style-parser: 0.2.3 + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -3980,13 +4415,50 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.3 + tailwindcss@3.4.17: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + tiny-invariant@1.3.3: {} to-fast-properties@2.0.0: {} @@ -4003,6 +4475,8 @@ snapshots: dependencies: typescript: 5.5.4 + ts-interface-checker@0.1.13: {} + tslib@2.6.3: {} type-check@0.4.0: @@ -4061,12 +4535,14 @@ snapshots: dependencies: browserslist: 4.23.3 escalade: 3.1.2 - picocolors: 1.0.1 + picocolors: 1.1.0 uri-js@4.4.1: dependencies: punycode: 2.3.1 + util-deprecate@1.0.2: {} + utility-types@3.11.0: {} vfile-message@4.0.2: @@ -4100,7 +4576,7 @@ snapshots: vite@5.4.6(@types/node@22.2.0)(sass@1.77.8): dependencies: esbuild: 0.21.5 - postcss: 8.4.47 + postcss: 8.4.49 rollup: 4.20.0 optionalDependencies: '@types/node': 22.2.0 @@ -4113,10 +4589,24 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + wrappy@1.0.2: {} yallist@3.1.1: {} + yaml@2.7.0: {} + yocto-queue@0.1.0: {} zwitch@2.0.4: {} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..2aa7205 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/src/index.css b/src/index.css index 9e79ff0..acb55d7 100644 --- a/src/index.css +++ b/src/index.css @@ -1,3 +1,7 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + #root { font-family: system-ui, -apple-system, BlinkMacSystemFont, PingFang SC, Hiragino Sans GB, Microsoft YaHei, "\5FAE\8F6F\96C5\9ED1", helvetica neue, helvetica, ubuntu, roboto, noto, segoe ui, Arial, sans-serif; font-size: 1rem; diff --git a/src/locales/en_GB.ts b/src/locales/en_GB.ts index 269b25b..cbea462 100644 --- a/src/locales/en_GB.ts +++ b/src/locales/en_GB.ts @@ -144,6 +144,7 @@ export default { 'Failed to copy secret key to clipboard, please try again', DoNotShareSecretKey: 'Warning: Do not share your secret key with anyone!', + Notifications: 'Notifications', EnableNotifications: 'Enable Notifications', PlayerOverallPotentialUpdate: 'Player Ovr/Pot Update', PlayerSkillMoveUpdate: 'Player Skill Move Update', diff --git a/src/locales/zh_CN.ts b/src/locales/zh_CN.ts index 52bc9ce..5b63935 100644 --- a/src/locales/zh_CN.ts +++ b/src/locales/zh_CN.ts @@ -135,6 +135,7 @@ export default { FailedToCopyMessage: '无法复制秘钥到剪贴板,请重试', DoNotShareSecretKey: '警告: 不要与任何人分享您的秘钥!', + Notifications: '通知', EnableNotifications: '启用通知', PlayerOverallPotentialUpdate: '球员 总评/潜力 更新', PlayerSkillMoveUpdate: '球员 花式 能力更新', diff --git a/src/pages/SettingsPage/AccountSettingComponent.tsx b/src/pages/SettingsPage/AccountSettingComponent.tsx index c8a141d..3c90626 100644 --- a/src/pages/SettingsPage/AccountSettingComponent.tsx +++ b/src/pages/SettingsPage/AccountSettingComponent.tsx @@ -1,4 +1,3 @@ -import { Space } from '@douyinfe/semi-ui'; import * as React from 'react'; import { useEffect } from 'react'; import ChangePasswordComponent from './ChangePassword.tsx'; @@ -18,21 +17,14 @@ function AccountSettingComponent({ }, []); return ( - <> -

{localeData?.AccountInfo}

+
+
+ {localeData?.AccountInfo} +
- +
{/* Account Info - Username */} -
+
{localeData?.AccountUsername}
@@ -40,7 +32,7 @@ function AccountSettingComponent({
{/* Account Info - Email */} -
+
{localeData?.AccountEmail}
@@ -50,8 +42,8 @@ function AccountSettingComponent({
{/* Account Info - Change Password ---- START*/} -
-
+
+
{localeData?.AccountChangePassword}
@@ -72,8 +64,8 @@ function AccountSettingComponent({ )}
{/* Account Info - Change Password ---- END*/} - - +
+
); } diff --git a/src/pages/SettingsPage/ApiSecretKeyComponent.tsx b/src/pages/SettingsPage/ApiSecretKeyComponent.tsx index cab2ea4..335124f 100644 --- a/src/pages/SettingsPage/ApiSecretKeyComponent.tsx +++ b/src/pages/SettingsPage/ApiSecretKeyComponent.tsx @@ -1,8 +1,8 @@ -import { Button, Input, Notification, Popover, Space } from '@douyinfe/semi-ui'; import { IconCopy, IconRefresh2 } from '@douyinfe/semi-icons'; +import { Button, Input, Notification, Popover } from '@douyinfe/semi-ui'; import * as React from 'react'; -import { UserApis } from '../../service/UserApis.ts'; import { useEffect } from 'react'; +import { UserApis } from '../../service/UserApis.ts'; export interface ApiSecretKeyComponentProps { localeData: any; @@ -40,19 +40,9 @@ function ApiSecretKeyComponent({ return ( <> -

{localeData?.Settings}

- -
{localeData?.APISecretKey}
- +
+
{localeData?.APISecretKey}
+
{localeData?.APISecretKey}:
- - - - {localeData?.DoNotShareSecretKey} - - - +
+ +
+ {localeData?.DoNotShareSecretKey} +
+
); } diff --git a/src/pages/SettingsPage/ChangePassword.tsx b/src/pages/SettingsPage/ChangePassword.tsx index 9b91fde..c361c6d 100644 --- a/src/pages/SettingsPage/ChangePassword.tsx +++ b/src/pages/SettingsPage/ChangePassword.tsx @@ -63,7 +63,7 @@ function ChangePasswordComponent({ alignItems: 'center', }} > - + {localeData.OldPassword} - - {localeData.NewPassword} - + {localeData.NewPassword} setNewPassword(e)} />
-
- +
+ {localeData.ConfirmNewPassword} setCofirmNewPassword(e)} />
-
+
diff --git a/src/pages/SettingsPage/SettingsPage.tsx b/src/pages/SettingsPage/SettingsPage.tsx index a0ca1b8..42d1fe3 100644 --- a/src/pages/SettingsPage/SettingsPage.tsx +++ b/src/pages/SettingsPage/SettingsPage.tsx @@ -57,23 +57,17 @@ function SettingsPage(): React.ReactElement { }} align={'start'} > + {/* Title */} +
{localeData?.Settings}
+ - -
Notifications
- - - {localeData?.EnableNotifications} - +
+
{localeData?.Notifications}
+ + {/* Enable Notifications */} +
+
{localeData?.EnableNotifications}
- - - +
+ + {/* Notification Itemss */} + + {/* Overall Rating and Potential */} +
+
{localeData?.PlayerOverallPotentialUpdate} - +
- - - +
+ + {/* Skill Move */} +
+
{localeData?.PlayerSkillMoveUpdate} - +
- - - +
+ + {/* Weak Foot */} +
+
{localeData?.PlayerWeakFootUpdate} - +
- - +
+
{/* Account Setting ---- START */} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..4dda98e --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,8 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ['./src/**/*.{js,jsx,ts,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +}; From 4b8fcccbbe277caaaf8b4ce684583847790e0a9e Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 2 Jan 2025 16:16:05 +0800 Subject: [PATCH 35/37] Fetch and display user account information in AccountSettingComponent --- .../SettingsPage/AccountSettingComponent.tsx | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/pages/SettingsPage/AccountSettingComponent.tsx b/src/pages/SettingsPage/AccountSettingComponent.tsx index 3c90626..25bb8b3 100644 --- a/src/pages/SettingsPage/AccountSettingComponent.tsx +++ b/src/pages/SettingsPage/AccountSettingComponent.tsx @@ -1,6 +1,7 @@ import * as React from 'react'; import { useEffect } from 'react'; import ChangePasswordComponent from './ChangePassword.tsx'; +import { UserApis } from '../../service/UserApis.ts'; export interface ApiSecretKeyComponentProps { localeData: any; @@ -11,9 +12,23 @@ function AccountSettingComponent({ }: ApiSecretKeyComponentProps): React.ReactElement { const [showChangePassword, setShowChangePassword] = React.useState(false); + const [accountInfo, setAccountInfo] = React.useState<{ + userID?: string; + username?: string; + email?: string; + }>({}); + + async function fetchAccountInfo() { + const res = await UserApis.getUserInfo(); + console.log(`[fetchAccountInfo] res: ${JSON.stringify(res)}`); + if (!res) { + return; + } + setAccountInfo(res); + } useEffect(() => { - // fetchSecretKey().then(); + fetchAccountInfo().then(); }, []); return ( @@ -28,7 +43,9 @@ function AccountSettingComponent({
{localeData?.AccountUsername}
- Veeja Liu + + {accountInfo?.username} +
{/* Account Info - Email */} @@ -37,7 +54,7 @@ function AccountSettingComponent({
{localeData?.AccountEmail}
- veejaliu@gmail.com + {accountInfo?.email}
From 8fbd81afdd8bed396e6ff51f6aa4d26b03286b8d Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 2 Jan 2025 16:44:52 +0800 Subject: [PATCH 36/37] Refactor AccountSettingComponent and ApiSecretKeyComponent for improved structure and usability --- .../SettingsPage/AccountSettingComponent.tsx | 4 ++-- .../SettingsPage/ApiSecretKeyComponent.tsx | 22 ++++++++++++++----- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/pages/SettingsPage/AccountSettingComponent.tsx b/src/pages/SettingsPage/AccountSettingComponent.tsx index 25bb8b3..3c7a8cc 100644 --- a/src/pages/SettingsPage/AccountSettingComponent.tsx +++ b/src/pages/SettingsPage/AccountSettingComponent.tsx @@ -32,7 +32,7 @@ function AccountSettingComponent({ }, []); return ( -
+ <>
{localeData?.AccountInfo}
@@ -82,7 +82,7 @@ function AccountSettingComponent({
{/* Account Info - Change Password ---- END*/}
-
+ ); } diff --git a/src/pages/SettingsPage/ApiSecretKeyComponent.tsx b/src/pages/SettingsPage/ApiSecretKeyComponent.tsx index 335124f..6ae531d 100644 --- a/src/pages/SettingsPage/ApiSecretKeyComponent.tsx +++ b/src/pages/SettingsPage/ApiSecretKeyComponent.tsx @@ -1,5 +1,5 @@ import { IconCopy, IconRefresh2 } from '@douyinfe/semi-icons'; -import { Button, Input, Notification, Popover } from '@douyinfe/semi-ui'; +import { Input, Notification, Popover } from '@douyinfe/semi-ui'; import * as React from 'react'; import { useEffect } from 'react'; import { UserApis } from '../../service/UserApis.ts'; @@ -11,7 +11,7 @@ export interface ApiSecretKeyComponentProps { function ApiSecretKeyComponent({ localeData, }: ApiSecretKeyComponentProps): React.ReactElement { - const [secretKey, setSecretKey] = React.useState(''); + const [secretKey, setSecretKey] = React.useState('...'); const [isLoading, setIsLoading] = React.useState(true); async function fetchSecretKey() { @@ -51,12 +51,17 @@ function ApiSecretKeyComponent({ defaultValue={secretKey} value={secretKey} > + + {/* Copy Button */} {localeData?.ClickToCopy}

} > - +
+ + {/* Refresh Button */} {localeData?.ClickToRefresh}

} > - +
From a4208254140eeaa54bd6910c04bf3cf0eac6b9c4 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 2 Jan 2025 18:33:34 +0800 Subject: [PATCH 37/37] add filter in notification --- src/components/NotificationPopover.tsx | 38 ++++++++++++++++++++++++-- src/locales/en_GB.ts | 6 ++++ src/locales/zh_CN.ts | 12 ++++++-- src/service/NotificationApis.ts | 3 ++ 4 files changed, 54 insertions(+), 5 deletions(-) diff --git a/src/components/NotificationPopover.tsx b/src/components/NotificationPopover.tsx index 5d289c1..07c0f2b 100644 --- a/src/components/NotificationPopover.tsx +++ b/src/components/NotificationPopover.tsx @@ -1,4 +1,10 @@ -import { LocaleConsumer, Pagination, Switch, Tooltip } from '@douyinfe/semi-ui'; +import { + LocaleConsumer, + Pagination, + Select, + Switch, + Tooltip, +} from '@douyinfe/semi-ui'; import { IconCheckChoiceStroked } from '@douyinfe/semi-icons'; import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -247,11 +253,13 @@ export const NotificationPopover = ({ const [onlyShowUnread, setOnlyShowUnread] = useState(false); const navigate = useNavigate(); const [currentPage, setCurrentPage] = useState(1); + const [filterValue, setFilterValue] = useState('all'); const fetchNotificationList = async () => { const notificationList = await NotificationApis.getAllNotifications({ page: currentPage, limit: PAGE_SIZE, + filter: filterValue, onlyUnread: onlyShowUnread, }); console.log('[fetchNotificationList] notificationList:', notificationList); @@ -264,7 +272,7 @@ export const NotificationPopover = ({ useEffect(() => { fetchNotificationList().then(); - }, [currentPage, onlyShowUnread]); + }, [currentPage, onlyShowUnread, filterValue]); return ( @@ -330,6 +338,32 @@ export const NotificationPopover = ({ {/* Content ---- Start */}
+ + {notificationList?.items ?.filter( (notification) => !onlyShowUnread || !notification.is_read, diff --git a/src/locales/en_GB.ts b/src/locales/en_GB.ts index cbea462..a6d343e 100644 --- a/src/locales/en_GB.ts +++ b/src/locales/en_GB.ts @@ -232,5 +232,11 @@ Therefore, what I do is write this data to a file first and then concatenate the UnknownMessageType: 'Unknown message type', GameDate: 'Game Date', MarkAsRead: 'Mark as read', + FilterOption: { + All: 'All', + Overall: 'Ovr/Pot', + SkillMove: 'Skill Move', + WeakFoot: 'Weak Foot', + }, }, }; diff --git a/src/locales/zh_CN.ts b/src/locales/zh_CN.ts index 5b63935..a99dd02 100644 --- a/src/locales/zh_CN.ts +++ b/src/locales/zh_CN.ts @@ -69,7 +69,7 @@ export default { PlayerID: '球员ID', Age: '年龄', Skills: '技能', - WeakFoot: '弱脚', + WeakFoot: '逆足', Foot: '脚', Height: '身高', Weight: '体重', @@ -139,7 +139,7 @@ export default { EnableNotifications: '启用通知', PlayerOverallPotentialUpdate: '球员 总评/潜力 更新', PlayerSkillMoveUpdate: '球员 花式 能力更新', - PlayerWeakFootUpdate: '球员 弱脚 能力更新', + PlayerWeakFootUpdate: '球员 逆足 能力更新', AccountInfo: '账户信息', AccountUsername: '用户名', @@ -215,11 +215,17 @@ export default { SwitchOff: '关', MarkAllAsRead: '全部标记为已读', SkillMove: '花式', - WeakFoot: '弱脚', + WeakFoot: '逆足', Overall: '总评', Potential: '潜力', UnknownMessageType: '未知消息类型', GameDate: '游戏日期', MarkAsRead: '标记为已读', + FilterOption: { + All: '全部', + Overall: '总评/潜力', + SkillMove: '花式', + WeakFoot: '逆足', + }, }, }; diff --git a/src/service/NotificationApis.ts b/src/service/NotificationApis.ts index f085b7f..85dea1a 100644 --- a/src/service/NotificationApis.ts +++ b/src/service/NotificationApis.ts @@ -72,10 +72,12 @@ export class NotificationApis { static async getAllNotifications({ page, limit, + filter, onlyUnread = false, }: { page: number; limit: number; + filter?: string; onlyUnread?: boolean; }): Promise<{ total: number; @@ -89,6 +91,7 @@ export class NotificationApis { gameVersion: gameVersion.toString(), page: page.toString(), limit: limit.toString(), + filter: filter || 'all', onlyUnread: onlyUnread.toString(), });

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 Ctme)D diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8070881da05115c7e9a518894a25571cdb7a73e7 GIT binary patch literal 23215 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%0DI@}4mEQJWbOFx0gC-|)|5`HvN-KGZq>N zgifDcV7?*`qE2smPk@thm7to8-ETW*_@3?8hW17oKW{};d6Pb6B_`-@g&jmaes)7h z2|2DP@~=ScJP@cIgl8b9Qx?KUJ9kAdT)t~uYGN`k4D2MaeEIXGmB_8ExFVCc1%fSB zB+ujKTG#(TZuN)8c_w4A_AJAoWK}d#A1hKLA#(E%#0|5urdMfCJ>xE9bX>poHOG^C zQ*85R$2r3e(1Ut$+^h-P`HOPKvW0hOYXFIjq|4)UsbCp*ahLD`bk+>a$X8Qw!tBv< zMuR(2d#pG5c?L1`J@*YZP1^8+DgS9Y`>s05@a+D0!R_)$HMpVv)#_>Dcd2an1KT;l&~?+ zMD~kf)v?3Jw_J+FgF(<1X#c{eOLC)1SH{05=RMG1zeKj*fn7Xb{ZP^ce4btn-r!?0 z>wfa2vMq~|(~E;9qsbk+{)hYDmAR8`8sUN<=Jd@y_%GNstULEGI)pDf(2!CCgJwlS z-A8e9r9t<44FdF}ryw8>JncYlS*7hhk@wN17OJ@=%?R^5TN3)VpL{kwTjV|euV310 zA)`7xx(+}GHtnQ3tQNn3?PMsl*uA(vdbwrXYjD8dbMH0qB_=asfoKCj?Fw;%)*yq) zzq+FC>@(cJz0S(2J+iI2I$jVNN6I3FX3Vkr2|TvA595zYK-^DIh!&Jj#=gK&hcZM1 z?|{Zbx5jeL!Ag#DTl+b0=6)?a{K)gDb^TSi-ZGJ_C$@Pp#ZgIthSvKm@P|%SU&B8_ zs)(Q@l#jt9#7XG~syEaoQ`vmWLBR{=USllL<-k4)>6z++o)mw0oZP8Np%-Z2%!-G` zQ^X6`wJZf}PRJS^IzNneb8&kt;ue3$9hfrtQtr9Jv;mbovEk6Swkv~C-AW?DUnTEu zQkui9dn3*px;;?&Q)yl&CArcm)TFbXE3ZClrOzKP%U@@{k;eyT$VT?tNtMg zK71GV1MoPn`>{d_lz-%!>|j6NLiJAlx^mJaa;v&b8rP0msCE>WLOBa?F5W8s{V?3v z*Tngv$gM{DKvy_1qf4?0$ZmVr(GTQ}qjQ1-!_jKY8&L;(b9(#Zx80OivJ<6{Dp`|0 zVOEDT!LKa%yj%|_wzSvM*H6_GA?~L0w-HpwLvRZKD_HZqAZhp5)T!;%+br84fl_dJ z6z_vf9!VjyaLmXFC@^n`7PlK-(i$+{D5S2j)CWZC{y$A>Qkx*(p#LC`I7(E&jVU21 z5D)(<)S`)$M`V>jk5+!Qz0c;=C}9%}lwlPJUJGIDTK^He%I2)*Hy7MM-sG66g6eGP z$SD4=-nB6OysWAJ`&!>@EGRB^BeV06gZ=d~c6d%?)zF&eHpQxd1&$#>&9`sCIhTWW zN)VVjC}X%%=48S94i0=cu)Tm49(0$=;+oEYpX5qv`I0Kxify}zN=`^LzO7k9bSd2L zybse^YBd=J&#P%O{Y}7ag79E;CRe(*zCaPAXiIDIwzVIl|6-q{M-*_{Iw|_ax3mYe zOh)b-H6w91Abllew9babYffHas6anC`V*nq2@VNa(=?_BqP2+2^Ftm4L*u9O>vkfZ63 z#KLX&JkHNkk!4CP`(?Iu78+cT*$ZhzP86}8M)tX(K_0yIqQ?5f5KidE9I+@Wq4CNJ&FUpK1QZ<e9W(em&JWrfc*PJb%dq4}*AokD)PHWvOF zZ<^j9?V_+P@2cQ(z0k5CS^SDp?=cBp#0b^0Gt1(08yl0dPvBO>NzJCymGm+2VxhL= zssMNbZ>zzCxKQ1_ifW(U(B?bcfo(ndJ~K|Ui3edFJmPkOKcB&5*njK$OA*`0Wz8+N Qfry$$Ps<2ZinM?HKQq}q0{{R3 literal 0 HcmV?d00001 diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..b8e539d --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + From f77241df85c473d80ddd9a5bac7bc41a627f9d59 Mon Sep 17 00:00:00 2001 From: VeejaLiu Date: Thu, 26 Dec 2024 12:49:18 +0800 Subject: [PATCH 29/37] refactor the login page --- src/components/Auth.tsx | 4 +- src/locales/zh_CN.ts | 2 +- .../LoginPage/LoginComponent.module.scss | 70 ------------------ src/pages/LoginPage/LoginComponent.tsx | 22 +++--- ...{LoginPage.tsx => LoginOrRegisterPage.tsx} | 59 ++++----------- .../LoginPage/RegisterComponent.module.scss | 71 ------------------- src/pages/LoginPage/RegisterComponent.tsx | 16 ++--- .../LoginPage/loginOrRegister.module.scss | 48 +++++++++++++ 8 files changed, 80 insertions(+), 212 deletions(-) delete mode 100644 src/pages/LoginPage/LoginComponent.module.scss rename src/pages/LoginPage/{LoginPage.tsx => LoginOrRegisterPage.tsx} (50%) delete mode 100644 src/pages/LoginPage/RegisterComponent.module.scss create mode 100644 src/pages/LoginPage/loginOrRegister.module.scss diff --git a/src/components/Auth.tsx b/src/components/Auth.tsx index 9e3a088..461dd50 100644 --- a/src/components/Auth.tsx +++ b/src/components/Auth.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react'; import App from '../App.tsx'; import { UserApis } from '../service/UserApis.ts'; import { LocaleProvider, Spin } from '@douyinfe/semi-ui'; -import LoginPage from '../pages/LoginPage/LoginPage.tsx'; +import LoginOrRegisterPage from '../pages/LoginPage/LoginOrRegisterPage.tsx'; import zh_CN from '@douyinfe/semi-ui/lib/es/locale/source/zh_CN'; import en_GB from '@douyinfe/semi-ui/lib/es/locale/source/en_GB'; @@ -97,7 +97,7 @@ export const Auth = () => { ) : isAuthenticated ? ( ) : ( - + )} ); diff --git a/src/locales/zh_CN.ts b/src/locales/zh_CN.ts index 3f9a3ec..52bc9ce 100644 --- a/src/locales/zh_CN.ts +++ b/src/locales/zh_CN.ts @@ -10,7 +10,7 @@ export default { }, RegisterComponent: { title: '开始您的伟大旅程', - text: '免费使用, 永远', + text: '永久免费使用', username: '用户名', usernamePlaceholder: '您的用户名', email: '电子邮件', diff --git a/src/pages/LoginPage/LoginComponent.module.scss b/src/pages/LoginPage/LoginComponent.module.scss deleted file mode 100644 index b41a5b0..0000000 --- a/src/pages/LoginPage/LoginComponent.module.scss +++ /dev/null @@ -1,70 +0,0 @@ -.login { - background: var(--semi-color-bg-0); - width: 450px; - min-width: 450px; - - .component66 { - align-items: center; - display: inline-flex; - flex-direction: column; - row-gap: 24px; - flex-shrink: 0; - - - .header { - align-items: center; - display: inline-flex; - flex-direction: column; - justify-content: center; - row-gap: 6px; - flex-shrink: 0; - - .title { - color: var(--semi-color-text-0); - font-size: 32px; - font-weight: 600; - line-height: 44px; - min-width: 128px; - vertical-align: middle; - flex-shrink: 0; - } - - & > .text { - color: var(--semi-color-text-2); - font-size: 16px; - font-weight: 400; - line-height: 22px; - min-width: 163px; - vertical-align: middle; - flex-shrink: 0; - - .text { - font-family: Inter; - } - } - } - } - - .form { - align-items: flex-start; - display: flex; - flex-direction: column; - flex-shrink: 0; - row-gap: 28px; - align-self: stretch; - - .inputs { - align-items: flex-start; - display: flex; - flex-direction: column; - flex-shrink: 0; - row-gap: 24px; - align-self: stretch; - } - - .button { - height: 40px; - width: 440px; - } - } -} \ No newline at end of file diff --git a/src/pages/LoginPage/LoginComponent.tsx b/src/pages/LoginPage/LoginComponent.tsx index bc3d781..babb279 100644 --- a/src/pages/LoginPage/LoginComponent.tsx +++ b/src/pages/LoginPage/LoginComponent.tsx @@ -5,10 +5,10 @@ import { Notification, Space, } from '@douyinfe/semi-ui'; -import { getContactUs } from './LoginPage.tsx'; +import { getContactUs } from './LoginOrRegisterPage.tsx'; import { UserApis } from '../../service/UserApis.ts'; import { setToken } from '../../common/common.ts'; -import styles from './LoginComponent.module.scss'; +import styles from './loginOrRegister.module.scss'; import { useState } from 'react'; export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { @@ -58,18 +58,14 @@ export const LoginComponent = ({ setIsLogin }: { setIsLogin: any }) => { return ( {(localeData: any, localeCode: string, dateFnsLocale: any) => ( - -