From 2c11b8e726056c579492042f7748d4ca3d215e5f Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 16:32:49 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=AB=E6=A0=BC?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icon57.png | Bin 0 -> 317 bytes src/components/SpeakerModeModal/index.tsx | 4 +- src/page/Meeting/index.module.scss | 123 +++++++++++++++++-- src/page/Meeting/index.tsx | 136 +++++++++++++++++----- src/utils/package/imageUrl.ts | 4 +- 5 files changed, 230 insertions(+), 37 deletions(-) create mode 100644 src/assets/icon57.png diff --git a/src/assets/icon57.png b/src/assets/icon57.png new file mode 100644 index 0000000000000000000000000000000000000000..71452a1a1ccade1b5ae029767424c9ae4827847d GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^@*vE?1|rvqSpq4}0*}aI1_o|n5N2eUHAey{$XFcY z?!>U}oXkrghb7(7*O7r?V?XzwL{=dGlBbJfNCo5DX$N@^DM++7R&7@<$hxHahOO@b z+pfk!7WEC<7L9io6-*M`#qhw{_J4tL=6`$5B_~h+b~;q;c<%F>RsnU#{@1_jOpe7Q z_2jx)oB3X@df#t(URG@FlwCnunopAEZm(rGHsA8N@|tmZ { }) const FreedomMode: React.FC = ({ onClick, meetingMode }) => { - // 自由者模式 + // 宫格模式 return ( <>
{[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16].map(item =>
)}
- 自由者模式 + 宫格模式
) diff --git a/src/page/Meeting/index.module.scss b/src/page/Meeting/index.module.scss index 53680e0..b5bfa47 100644 --- a/src/page/Meeting/index.module.scss +++ b/src/page/Meeting/index.module.scss @@ -10,7 +10,7 @@ .meetingContentUserName { display: flex; align-items: center; - background-color: #0000009E; + background-color: rgba(0, 0, 0, 0.62); border-radius: 6px; height: 24px; padding: 0 4px; @@ -285,14 +285,126 @@ } } + // 宫格模式 + // 1 + .meetingContentBodyLeftFreedomModeOne { + width: 100%; + height: 100%; - // 自由者模式 - .meetingContentBodyLeftFreedomMode { + .meetingContentSwiperCard { + width: 100%; + height: 100%; + } + } + + // 2 + .meetingContentBodyLeftFreedomModeTwo { + width: 100%; + height: 100%; + display: flex; + + .meetingContentSwiperCard { + width: 50%; + height: 100%; + } + } + + // 3 4 + .meetingContentBodyLeftFreedomModeThree { width: 100%; height: 100%; display: flex; flex-wrap: wrap; - overflow-y: auto; + justify-content: center; + + .meetingContentSwiperCard { + width: 50%; + height: 50%; + } + } + + //5 6 + .meetingContentBodyLeftFreedomModeFour { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + + .meetingContentSwiperCard { + width: calc(100% / 3); + height: 50%; + } + } + + // 7 + .meetingContentBodyLeftFreedomModeFive { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + + .meetingContentSwiperCard { + width: calc(100% / 4); + height: 50%; + } + } + + //8 9 + .meetingContentBodyLeftFreedomModeSix { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + + .meetingContentSwiperCard { + width: calc(100% / 3); + height: calc(100% / 3); + } + } + + // 10 11 12 + .meetingContentBodyLeftFreedomModeSeven { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + + .meetingContentSwiperCard { + width: calc(100% / 4); + height: calc(100% / 3); + } + } + + // 13 14 15 16 + .meetingContentBodyLeftFreedomModeEight { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + + .meetingContentSwiperCard { + width: calc(100% / 4); + height: calc(100% / 4); + } + } + + // 17 18 19 20 + .meetingContentBodyLeftFreedomModeNine { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + + .meetingContentSwiperCard { + width: calc(100% / 5); + height: calc(100% / 4); + } } // 标准模式 @@ -309,9 +421,6 @@ .meetingContentSwiperCard { width: 100%; - } - - .meetingContentSwiperCard { height: 160px; } } diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 0a62747..1cddf82 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -184,7 +184,7 @@ const Meeting: React.FC = () => { const [isClickLock, setIsClickLock] = useState(false) const [open, setOpen] = useState(false) const [modeOpen, setModeOpen] = useState(false) - const [meetingMode, setMeetingMode] = useState('') + const [meetingMode, setMeetingMode] = useState('FreedomMode') const [userSearchValue, setUserSearchValue] = useState('') const [noViewChatList, setNoViewChatList] = useState(0) const [currentLookUserAccount, setCurrentLookUserAccount] = useState('') @@ -235,7 +235,6 @@ const Meeting: React.FC = () => { } }) setKeyOpenChildWindow('shareScreenWindow', false) - setMeetingMode('StandardMode'); agoraInit() storage.setItem('noViewChatList', 0) window.addEventListener('customStorageChange', handleCustomStorageChange); @@ -639,18 +638,23 @@ const Meeting: React.FC = () => { if (isShare) { const item = roomUserList.find((item: any) => item.screenShareId === String(isShare)) setIsShareUser(item || null) + setMeetingMode('StandardMode') } }, [isShare, roomUserList]); useEffect(() => { roomUserList.forEach(async (item: any) => { - if (item.uid === currentVideoId) { + if (meetingMode === "FreedomMode") { await agora.setRemoteVideoStreamType(item.uid, VideoStreamType.VideoStreamHigh, true) } else { - await agora.setRemoteVideoStreamType(item.uid, VideoStreamType.VideoStreamLow, true) + if (item.uid === currentVideoId) { + await agora.setRemoteVideoStreamType(item.uid, VideoStreamType.VideoStreamHigh, true) + } else { + await agora.setRemoteVideoStreamType(item.uid, VideoStreamType.VideoStreamLow, true) + } } }); - }, [currentVideoId, roomUserList]); + }, [currentVideoId, roomUserList, meetingMode]); useEffect(() => { let item = roomUserList.find((item: any) => currentVideoId == item.uid) @@ -739,7 +743,7 @@ const Meeting: React.FC = () => { break; // 更新视图模式 case 'RefreshView': - setMeetingMode(item.type) + break; // 全员看他 case 'ShowUser': @@ -752,6 +756,7 @@ const Meeting: React.FC = () => { } } } + setMeetingMode('StandardMode') getShowUser() break; // 用户加入频道回调 @@ -990,12 +995,15 @@ const Meeting: React.FC = () => { uid: temp.uid, enableMicr: temp.enableMicr }) - } else { + } else if (temp.type === 'video') { await PostOpenCamera({ roomNum: temp.roomNum, uid: temp.uid, enableCamera: temp.enableCamera }) + } else if (temp.type === 'mode') { + message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) + setMeetingMode(temp.mode) } } catch (error) { @@ -1581,7 +1589,11 @@ const Meeting: React.FC = () => { item.isShow = true; } }); - setIsAdmin(res.filter((item: any) => (role.ID.includes(item.roleId) || item.isRoomManager) && item.isRoom).length) + const peoPleLength = res.filter((item: any) => (role.ID.includes(item.roleId) || item.isRoomManager) && item.isRoom).length + setIsAdmin(peoPleLength) + if (peoPleLength >= 6) { + setMeetingMode('StandardMode') + } return res }) } @@ -2236,6 +2248,9 @@ const Meeting: React.FC = () => { const handleCustomStorageChange = async (e: any): Promise => { switch (e.key) { case 'meetingMode': + if (e.value !== 'FreedomMode') { + await getShowUser() + } setMeetingMode(e.value) break; case 'quitMeeting': @@ -2456,10 +2471,37 @@ const Meeting: React.FC = () => { }) } // 获取当前模式样式 - const getMeetingContentBodyLeftModeClass = (): string => { + const getMeetingContentBodyLeftModeClass = (people: Number): string => { switch (meetingMode) { case 'FreedomMode': - return styles.meetingContentBodyLeftFreedomMode + switch (people) { + case 1: + return styles.meetingContentBodyLeftFreedomModeOne; + case 2: + return styles.meetingContentBodyLeftFreedomModeTwo; + case 3: + case 4: + return styles.meetingContentBodyLeftFreedomModeThree; + case 5: + case 6: + return styles.meetingContentBodyLeftFreedomModeFour; + case 7: + return styles.meetingContentBodyLeftFreedomModeFive; + case 8: + case 9: + return styles.meetingContentBodyLeftFreedomModeSix; + case 10: + case 11: + case 12: + return styles.meetingContentBodyLeftFreedomModeSeven; + case 13: + case 14: + case 15: + case 16: + return styles.meetingContentBodyLeftFreedomModeEight; + default: + return styles.meetingContentBodyLeftFreedomModeNine; + } case 'StandardMode': return styles.meetingContentBodyLeftStandardMode case 'SpeakerMode': @@ -2474,10 +2516,10 @@ const Meeting: React.FC = () => { return '' } // 获取当前模式文字 - const getMeetingContentBodyLeftModeText = (): string => { - switch (meetingMode) { + const getMeetingContentBodyLeftModeText = (mode?: string): string => { + switch (mode || meetingMode) { case 'FreedomMode': - return '自由者模式' + return '宫格模式' case 'StandardMode': return '标准模式' case 'SpeakerMode': @@ -2575,6 +2617,32 @@ const Meeting: React.FC = () => { } message.success('操作成功') } + // 设置模式 + const setSyncView = (mode: string) => { + confirm({ + title: '提示', + icon: , + content: `是否将当前房间切换为${getMeetingContentBodyLeftModeText(mode)}?`, + centered: true, + okText: '确定', + cancelText: '取消', + async onOk() { + await window.electron.onInvoke('sendOper2User', { + uid: userInfo.uid, + contentString: JSON.stringify({ + mode, + type: 'mode' + }) + }) + setModeOpen(false) + storage.setItem('meetingMode', mode) + }, + onCancel() { + setModeOpen(false) + storage.setItem('meetingMode', mode) + } + }) + } // 判断是否出现滚动条 const hasScrollbar = () => { let element = document.getElementById('videoView') as HTMLDivElement @@ -2773,19 +2841,23 @@ const Meeting: React.FC = () => {
-
{ - setModeOpen(false) - storage.setItem('meetingMode', 'StandardMode') + setSyncView('FreedomMode') + }}> + + 宫格模式 +
+
{ + setSyncView('StandardMode') }}> 标准模式
{ - setModeOpen(false) - storage.setItem('meetingMode', 'SpeakerMode') + setSyncView('SpeakerMode') }}> 演讲模式 @@ -2803,10 +2875,14 @@ const Meeting: React.FC = () => { onOpenChange={() => setModeOpen(true)} >
- {meetingMode === 'StandardMode' ? : } + {meetingMode === 'StandardMode' ? + : + meetingMode === 'FreedomMode' ? + : + } {getMeetingContentBodyLeftModeText()}
- + : null}
@@ -2814,7 +2890,7 @@ const Meeting: React.FC = () => {
{isAdmin && currentLookUserAccount ? getSettingIcon() : null} -
+
{roomUserList.map((item: any, index: number) => { return (item.isRoom && item.isAdmin ?
{
: null) } )} - {hasScrollbar() ?
+ {/*
+
+
+
+
+
*/} + {meetingMode !== "FreedomMode" && hasScrollbar() ?
{meetingMode === "StandardMode" ?
{ const container = document.getElementById('videoView') as HTMLElement; container.scrollLeft -= 100 @@ -2963,7 +3045,7 @@ const Meeting: React.FC = () => {
}
: null} - {currentLookUserStatus === 0 ? + {meetingMode !== "FreedomMode" && currentLookUserStatus === 0 ?
{
@@ -2974,7 +3056,7 @@ const Meeting: React.FC = () => { setIsVideoFullScreen(true)} />} {meetingContentUser(currentLookUserAccount, true)}
: null} - {currentLookUserStatus === 1 ? + {meetingMode !== "FreedomMode" && currentLookUserStatus === 1 ?
{
@@ -2986,7 +3068,7 @@ const Meeting: React.FC = () => { {meetingContentUser(currentLookUserAccount, true)} {currentLookUserAccount.enableCamera ? null : meetingContentError(currentLookUserAccount)}
: null} - {currentLookUserStatus === 2 ? + {meetingMode !== "FreedomMode" && currentLookUserStatus === 2 ?
@@ -2997,7 +3079,7 @@ const Meeting: React.FC = () => { setIsVideoFullScreen(true)} />} {meetingContentUser(currentLookUserAccount, true)}
: null} - {currentLookUserStatus === 3 ? + {meetingMode !== "FreedomMode" && currentLookUserStatus === 3 ?
@@ -3008,7 +3090,7 @@ const Meeting: React.FC = () => { setIsVideoFullScreen(true)} />} {meetingContentUser(currentLookUserAccount, true)}
: null} - {currentLookUserStatus === 4 ? + {meetingMode !== "FreedomMode" && currentLookUserStatus === 4 ?
diff --git a/src/utils/package/imageUrl.ts b/src/utils/package/imageUrl.ts index 2c349a4..7cbd15c 100644 --- a/src/utils/package/imageUrl.ts +++ b/src/utils/package/imageUrl.ts @@ -86,6 +86,7 @@ import icon54 from '@/assets/icon54.png' import icon55 from '@/assets/icon55.png' import icon56 from '@/assets/icon56.png' import icon56Active from '@/assets/icon56-active.png' +import icon57 from '@/assets/icon57.png' export default { loading, icon, @@ -174,5 +175,6 @@ export default { icon54, icon55, icon56, - icon56Active + icon56Active, + icon57, } \ No newline at end of file From 621ef06abab8f8b45ceb41fb96a6ef206ea6859f Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 16:50:10 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 50 ++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 1cddf82..cbf62bf 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -1591,7 +1591,7 @@ const Meeting: React.FC = () => { }); const peoPleLength = res.filter((item: any) => (role.ID.includes(item.roleId) || item.isRoomManager) && item.isRoom).length setIsAdmin(peoPleLength) - if (peoPleLength >= 6) { + if (peoPleLength > 6) { setMeetingMode('StandardMode') } return res @@ -2619,29 +2619,33 @@ const Meeting: React.FC = () => { } // 设置模式 const setSyncView = (mode: string) => { - confirm({ - title: '提示', - icon: , - content: `是否将当前房间切换为${getMeetingContentBodyLeftModeText(mode)}?`, - centered: true, - okText: '确定', - cancelText: '取消', - async onOk() { - await window.electron.onInvoke('sendOper2User', { - uid: userInfo.uid, - contentString: JSON.stringify({ - mode, - type: 'mode' + if (isShare && mode === 'FreedomMode') { + message.error('共享中,无法切换模式') + } else { + confirm({ + title: '提示', + icon: , + content: `是否将当前房间切换为${getMeetingContentBodyLeftModeText(mode)}?`, + centered: true, + okText: '确定', + cancelText: '取消', + async onOk() { + await window.electron.onInvoke('sendOper2User', { + uid: userInfo.uid, + contentString: JSON.stringify({ + mode, + type: 'mode' + }) }) - }) - setModeOpen(false) - storage.setItem('meetingMode', mode) - }, - onCancel() { - setModeOpen(false) - storage.setItem('meetingMode', mode) - } - }) + setModeOpen(false) + storage.setItem('meetingMode', mode) + }, + onCancel() { + setModeOpen(false) + storage.setItem('meetingMode', mode) + } + }) + } } // 判断是否出现滚动条 const hasScrollbar = () => { From 15233cf8de5e43145edb25b864ccdba4acd49ac3 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 16:56:35 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index cbf62bf..aedd97b 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -727,7 +727,13 @@ const Meeting: React.FC = () => { break; // 扩展操作 case 'Operation': - switch (item.contentString) { + try { + const temp = JSON.parse(item.contentString) + if (temp.type === 'mode') { + message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) + setMeetingMode(temp.mode) + } + } catch (error) { } break; @@ -1001,9 +1007,6 @@ const Meeting: React.FC = () => { uid: temp.uid, enableCamera: temp.enableCamera }) - } else if (temp.type === 'mode') { - message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) - setMeetingMode(temp.mode) } } catch (error) { @@ -2630,8 +2633,8 @@ const Meeting: React.FC = () => { okText: '确定', cancelText: '取消', async onOk() { - await window.electron.onInvoke('sendOper2User', { - uid: userInfo.uid, + await window.electron.onInvoke('sendOper', { + roomNum: state.channelId, contentString: JSON.stringify({ mode, type: 'mode' From c2ce66ed0d552dbc29c5626117a8e9dadf48f7ba Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 17:09:09 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index aedd97b..14813b0 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -224,6 +224,7 @@ const Meeting: React.FC = () => { const channel = new BroadcastChannel('meeting_channel'); let storeDevice: any; let agoraTime: NodeJS.Timeout; + let FreedomModeStatus = false useEffect(() => { window.electron.createChildWindow('hide') let time: NodeJS.Timeout; @@ -642,6 +643,17 @@ const Meeting: React.FC = () => { } }, [isShare, roomUserList]); + useEffect(() => { + if (meetingMode === 'FreedomMode') { + FreedomModeStatus = true; + } else { + if (FreedomModeStatus) { + FreedomModeStatus = false; + getShowUser() + } + } + }, [meetingMode]); + useEffect(() => { roomUserList.forEach(async (item: any) => { if (meetingMode === "FreedomMode") { @@ -2251,9 +2263,6 @@ const Meeting: React.FC = () => { const handleCustomStorageChange = async (e: any): Promise => { switch (e.key) { case 'meetingMode': - if (e.value !== 'FreedomMode') { - await getShowUser() - } setMeetingMode(e.value) break; case 'quitMeeting': From 58542e80b309c7d353eb9933008b424a75e34ca5 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 17:31:16 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 40 +++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 14813b0..0af3e37 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -217,6 +217,7 @@ const Meeting: React.FC = () => { } }); const [isVideoFullScreen, setIsVideoFullScreen] = useState(false) + const [freedomModeStatus, setFreedomModeStatus] = useState(false) const [observer, setObserver] = useState() const [_activeSpeaker, setActiveSpeaker] = useState('') let userInfo = JSON.parse(storage.getItem('user') as string) @@ -224,7 +225,6 @@ const Meeting: React.FC = () => { const channel = new BroadcastChannel('meeting_channel'); let storeDevice: any; let agoraTime: NodeJS.Timeout; - let FreedomModeStatus = false useEffect(() => { window.electron.createChildWindow('hide') let time: NodeJS.Timeout; @@ -644,14 +644,16 @@ const Meeting: React.FC = () => { }, [isShare, roomUserList]); useEffect(() => { - if (meetingMode === 'FreedomMode') { - FreedomModeStatus = true; - } else { - if (FreedomModeStatus) { - FreedomModeStatus = false; - getShowUser() + setFreedomModeStatus((res: boolean) => { + if (meetingMode === 'FreedomMode') { + return true + } else { + if (res) { + getShowUser(true) + } + return false } - } + }) }, [meetingMode]); useEffect(() => { @@ -1740,16 +1742,18 @@ const Meeting: React.FC = () => { }) } // 渲染视频 - const renderVideo = async (uid: string = ''): Promise => { - if (isClickLock) { - return - } - if (uid) { - if (currentVideoId === uid || currentVideoUid === uid) { + const renderVideo = async (uid: string = '', bool: boolean = false): Promise => { + if (!bool) { + if (isClickLock) { return } - } else { - uid = userInfo.uid + if (uid) { + if (currentVideoId === uid || currentVideoUid === uid) { + return + } + } else { + uid = userInfo.uid + } } await agora.destroyRendererByView(`video-source-camera-primary`) await agora.destroyRendererByView(`video-source-screen`) @@ -1787,11 +1791,11 @@ const Meeting: React.FC = () => { }, 500); } // 全员观看 - const getShowUser = async (): Promise => { + const getShowUser = async (bool: boolean = false): Promise => { if (location.href.indexOf('/meeting') !== -1) { await GetShowUser(state.channelId).then(async (res) => { if (res.code === 200 && res.data) { - renderVideo(res.data) + renderVideo(res.data, bool) } }) } From 883525787d3c4622c7ab2ef61b10e7e0fad5b473 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 17:45:57 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 0af3e37..b31755e 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -743,7 +743,7 @@ const Meeting: React.FC = () => { case 'Operation': try { const temp = JSON.parse(item.contentString) - if (temp.type === 'mode') { + if (temp.type === 'mode' && temp.msg) { message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) setMeetingMode(temp.mode) } @@ -776,7 +776,6 @@ const Meeting: React.FC = () => { } } } - setMeetingMode('StandardMode') getShowUser() break; // 用户加入频道回调 @@ -2175,6 +2174,14 @@ const Meeting: React.FC = () => { await PostStopSharedScreen(state.channelId) } else { await PostShowUser(state.channelId, uid, name) + await window.electron.onInvoke('sendOper', { + roomNum: state.channelId, + contentString: JSON.stringify({ + mode: 'StandardMode', + type: 'mode', + msg: false + }) + }) } } // 设置发言人 @@ -2650,7 +2657,8 @@ const Meeting: React.FC = () => { roomNum: state.channelId, contentString: JSON.stringify({ mode, - type: 'mode' + type: 'mode', + msg: true, }) }) setModeOpen(false) From 76e37eff1df94e6b62220304e947a8e778d66f6d Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Mon, 17 Mar 2025 17:50:33 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index b31755e..4dd3251 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -217,7 +217,7 @@ const Meeting: React.FC = () => { } }); const [isVideoFullScreen, setIsVideoFullScreen] = useState(false) - const [freedomModeStatus, setFreedomModeStatus] = useState(false) + const [_freedomModeStatus, setFreedomModeStatus] = useState(false) const [observer, setObserver] = useState() const [_activeSpeaker, setActiveSpeaker] = useState('') let userInfo = JSON.parse(storage.getItem('user') as string) From 26ae33e0aaee1c859b892b86201e2ec23cde7eb9 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Tue, 18 Mar 2025 10:37:17 +0800 Subject: [PATCH 08/13] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 4dd3251..3123734 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -743,8 +743,8 @@ const Meeting: React.FC = () => { case 'Operation': try { const temp = JSON.parse(item.contentString) - if (temp.type === 'mode' && temp.msg) { - message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) + if (temp.type === 'mode') { + temp.msg ? message.success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) : null; setMeetingMode(temp.mode) } } catch (error) { From 2faafe86477ddb6bf048316cb92b646bde2879c2 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Wed, 19 Mar 2025 17:17:18 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Meeting/index.module.scss | 76 ++++++++++++++++------- src/page/Meeting/index.tsx | 96 +++++++++++++++--------------- 2 files changed, 101 insertions(+), 71 deletions(-) diff --git a/src/page/Meeting/index.module.scss b/src/page/Meeting/index.module.scss index b5bfa47..1f2409d 100644 --- a/src/page/Meeting/index.module.scss +++ b/src/page/Meeting/index.module.scss @@ -1029,40 +1029,72 @@ } .modePopover { + display: flex; + flex-direction: column; + align-items: center; + >div { - width: 140px; - height: 30px; - line-height: 30px; - border-radius: 5px; - margin-bottom: 8px; - cursor: pointer; display: flex; align-items: center; - justify-content: center; - >span { - color: #EEEEEE; + >div { + width: 100px; + padding: 10px 0; + line-height: 30px; + border-radius: 5px; + cursor: pointer; + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + margin-right: 20px; + + >span { + color: #EEEEEE; + } + + >img { + height: 30px; + margin-bottom: 4px; + } } - >img { - height: 16px; - margin-right: 10px; + >div { + background-color: #101418; + + &:hover { + background-color: lighten(#101418, 4%); + } + + &:active { + background-color: darken(#101418, 4%); + } } - &:last-child { - margin: 0; + .active { + background-color: lighten(#101418, 8%); + cursor: not-allowed; + + &:hover { + background-color: lighten(#101418, 8%); + } + + &:active { + background-color: lighten(#101418, 8%); + } + } + + :last-child { + margin-right: 0px; } } - >div { - background-color: #101418; + >span { + margin-top: 4px; + color: white; - &:hover { - background-color: lighten(#101418, 4%); - } - - &:active { - background-color: darken(#101418, 4%); + >span { + margin-left: 4px; } } } diff --git a/src/page/Meeting/index.tsx b/src/page/Meeting/index.tsx index 3123734..75e7f91 100644 --- a/src/page/Meeting/index.tsx +++ b/src/page/Meeting/index.tsx @@ -2642,34 +2642,28 @@ const Meeting: React.FC = () => { } // 设置模式 const setSyncView = (mode: string) => { - if (isShare && mode === 'FreedomMode') { - message.error('共享中,无法切换模式') - } else { - confirm({ - title: '提示', - icon: , - content: `是否将当前房间切换为${getMeetingContentBodyLeftModeText(mode)}?`, - centered: true, - okText: '确定', - cancelText: '取消', - async onOk() { - await window.electron.onInvoke('sendOper', { - roomNum: state.channelId, - contentString: JSON.stringify({ - mode, - type: 'mode', - msg: true, - }) - }) - setModeOpen(false) - storage.setItem('meetingMode', mode) - }, - onCancel() { - setModeOpen(false) - storage.setItem('meetingMode', mode) - } - }) + if (meetingMode === mode) { + setModeOpen(false) + return message.error(`${getMeetingContentBodyLeftModeText(mode)}已开启,请勿重复操作!`) } + if (isAdmin > 6 && mode === 'FreedomMode') { + setModeOpen(false) + return message.error('发言人数超过6人,无法使用宫格模式!') + } + if (isShare && mode === 'FreedomMode') { + setModeOpen(false) + return message.error('共享中,无法切换模式') + } + window.electron.onInvoke('sendOper', { + roomNum: state.channelId, + contentString: JSON.stringify({ + mode, + type: 'mode', + msg: true, + }) + }) + setModeOpen(false) + storage.setItem('meetingMode', mode) } // 判断是否出现滚动条 const hasScrollbar = () => { @@ -2700,6 +2694,9 @@ const Meeting: React.FC = () => { <>
{ setContextMenu('') + if (modeOpen) { + setModeOpen(false) + } setIsNetworkQuality(false) }}> {isScreenCapture ?
@@ -2872,29 +2869,30 @@ const Meeting: React.FC = () => { {role.ID.includes(userInfo.roleId) ? -
{ - setSyncView('FreedomMode') - }}> - - 宫格模式 -
-
{ - setSyncView('StandardMode') - }}> - - 标准模式 -
-
{ - setSyncView('SpeakerMode') - }}> - - 演讲模式 -
-
{ - setModeOpen(false) - }}> - 取消 +
+
{ + setSyncView('FreedomMode') + }}> + + 宫格模式 +
+
{ + setSyncView('StandardMode') + }}> + + 标准模式 +
+
{ + setSyncView('SpeakerMode') + }}> + + 演讲模式 +
+ + + 改变布局将对所有成员生效 +
} title="" From 6cc27d80206d3265d9b23d63bec805e615667943 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 20 Mar 2025 09:45:46 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E5=B0=8F=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 1 + package-lock.json | 960 +++++++++++++++++++++++++++++++- package.json | 3 +- src/page/Home/index.module.scss | 2 +- src/page/Home/index.tsx | 12 +- vite.config.ts | 15 + 6 files changed, 988 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 1061ae2..ad859db 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@ + diff --git a/package-lock.json b/package-lock.json index ebeb9ba..93963e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "WGShare.Metting", - "version": "0.7.1", + "version": "0.8.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "WGShare.Metting", - "version": "0.7.1", + "version": "0.8.0", "dependencies": { "@ant-design/icons": "^5.3.7", "@microsoft/signalr": "^8.0.0", @@ -42,6 +42,7 @@ "electron-builder": "^23.1.0", "typescript": "^4.5.4", "vite": "^2.8.0", + "vite-plugin-html": "^3.2.2", "vite-plugin-resolve": "^2.5.1" } }, @@ -751,6 +752,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -809,6 +820,41 @@ "ws": "^7.4.5" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@radix-ui/number": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/@radix-ui/number/-/number-1.0.1.tgz", @@ -2626,6 +2672,18 @@ "node": ">=6.5" } }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", @@ -3545,6 +3603,12 @@ "bluebird": "^3.5.5" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/boolean": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz", @@ -3793,6 +3857,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-3.0.0.tgz", @@ -3933,6 +4007,27 @@ "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", @@ -4146,6 +4241,12 @@ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/colors/-/colors-1.0.3.tgz", @@ -4175,6 +4276,15 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/compare-version": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz", @@ -4258,6 +4368,21 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", @@ -4385,6 +4510,34 @@ "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", @@ -4776,6 +4929,71 @@ "node": ">=8" } }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/dotenv": { "version": "9.0.2", "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-9.0.2.tgz", @@ -5301,6 +5519,15 @@ "once": "^1.4.0" } }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz", @@ -6022,6 +6249,22 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6033,6 +6276,15 @@ "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==" }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -7082,6 +7334,15 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -7106,6 +7367,27 @@ "url": "https://jaywcjlove.github.io/#/sponsor" } }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -7926,6 +8208,15 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, "node_modules/lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -8151,6 +8442,73 @@ "node": ">=10" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", @@ -8428,6 +8786,16 @@ "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -8454,6 +8822,16 @@ } } }, + "node_modules/node-html-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmmirror.com/node-html-parser/-/node-html-parser-5.4.2.tgz", + "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", + "dev": true, + "dependencies": { + "css-select": "^4.2.1", + "he": "1.2.0" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz", @@ -8510,6 +8888,18 @@ "node": ">= 0.10" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -8714,6 +9104,16 @@ "node": ">=4" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -8754,6 +9154,16 @@ "node": ">=0.10.0" } }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", @@ -8816,6 +9226,12 @@ "node": ">=0.10.0" } }, + "node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", @@ -9043,6 +9459,26 @@ "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz", @@ -9949,6 +10385,15 @@ "node": ">=0.10.0" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -10110,6 +10555,16 @@ "node": ">=0.12" } }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/roarr": { "version": "2.15.4", "resolved": "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz", @@ -10157,6 +10612,29 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", @@ -11077,6 +11555,30 @@ "fs-extra": "^10.0.0" } }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/text-hex/-/text-hex-1.0.0.tgz", @@ -11909,6 +12411,50 @@ } } }, + "node_modules/vite-plugin-html": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz", + "integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.0", + "colorette": "^2.0.16", + "connect-history-api-fallback": "^1.6.0", + "consola": "^2.15.3", + "dotenv": "^16.0.0", + "dotenv-expand": "^8.0.2", + "ejs": "^3.1.6", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.1", + "html-minifier-terser": "^6.1.0", + "node-html-parser": "^5.3.3", + "pathe": "^0.2.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-html/node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/vite-plugin-html/node_modules/dotenv-expand": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz", + "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/vite-plugin-resolve": { "version": "2.5.1", "resolved": "https://registry.npmmirror.com/vite-plugin-resolve/-/vite-plugin-resolve-2.5.1.tgz", @@ -12734,6 +13280,16 @@ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", @@ -12788,6 +13344,32 @@ "ws": "^7.4.5" } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@radix-ui/number": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/@radix-ui/number/-/number-1.0.1.tgz", @@ -13877,6 +14459,12 @@ "event-target-shim": "^5.0.0" } }, + "acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", @@ -14585,6 +15173,12 @@ "bluebird": "^3.5.5" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "boolean": { "version": "3.2.0", "resolved": "https://registry.npmmirror.com/boolean/-/boolean-3.2.0.tgz", @@ -14768,6 +15362,16 @@ "set-function-length": "^1.2.1" } }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-3.0.0.tgz", @@ -14868,6 +15472,23 @@ "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, + "clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", @@ -15040,6 +15661,12 @@ "resolved": "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "colors": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/colors/-/colors-1.0.3.tgz", @@ -15063,6 +15690,12 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, "compare-version": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/compare-version/-/compare-version-0.1.2.tgz", @@ -15123,6 +15756,18 @@ } } }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmmirror.com/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", @@ -15215,6 +15860,25 @@ "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, "csstype": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", @@ -15501,6 +16165,53 @@ "verror": "^1.10.0" } }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "dotenv": { "version": "9.0.2", "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-9.0.2.tgz", @@ -15949,6 +16660,12 @@ "once": "^1.4.0" } }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz", @@ -16408,6 +17125,19 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -16419,6 +17149,15 @@ "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==" }, + "fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -17225,6 +17964,12 @@ "function-bind": "^1.1.2" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -17243,6 +17988,21 @@ "resolved": "https://registry.npmmirror.com/hotkeys-js/-/hotkeys-js-3.13.7.tgz", "integrity": "sha512-ygFIdTqqwG4fFP7kkiYlvayZppeIQX2aPpirsngkv1xM1lP0piDY5QEh68nQnIKvz64hfocxhBaD/uK3sSK1yQ==" }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, "http-cache-semantics": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", @@ -17871,6 +18631,15 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz", @@ -18045,6 +18814,57 @@ "escape-string-regexp": "^4.0.0" } }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "dependencies": { + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "mime": { "version": "2.6.0", "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", @@ -18251,6 +19071,16 @@ "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -18266,6 +19096,16 @@ "whatwg-url": "^5.0.0" } }, + "node-html-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmmirror.com/node-html-parser/-/node-html-parser-5.4.2.tgz", + "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", + "dev": true, + "requires": { + "css-select": "^4.2.1", + "he": "1.2.0" + } + }, "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz", @@ -18309,6 +19149,15 @@ "once": "^1.3.2" } }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -18464,6 +19313,16 @@ "p-finally": "^1.0.0" } }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -18492,6 +19351,16 @@ "resolved": "https://registry.npmmirror.com/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", @@ -18539,6 +19408,12 @@ "resolved": "https://registry.npmmirror.com/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" }, + "pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", @@ -18702,6 +19577,12 @@ "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz", @@ -19324,6 +20205,12 @@ } } }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -19445,6 +20332,12 @@ "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, + "reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true + }, "roarr": { "version": "2.15.4", "resolved": "https://registry.npmmirror.com/roarr/-/roarr-2.15.4.tgz", @@ -19478,6 +20371,15 @@ } } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "rxjs": { "version": "7.8.1", "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz", @@ -20211,6 +21113,26 @@ "fs-extra": "^10.0.0" } }, + "terser": { + "version": "5.39.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, "text-hex": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/text-hex/-/text-hex-1.0.0.tgz", @@ -20844,6 +21766,40 @@ } } }, + "vite-plugin-html": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz", + "integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.0", + "colorette": "^2.0.16", + "connect-history-api-fallback": "^1.6.0", + "consola": "^2.15.3", + "dotenv": "^16.0.0", + "dotenv-expand": "^8.0.2", + "ejs": "^3.1.6", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.1", + "html-minifier-terser": "^6.1.0", + "node-html-parser": "^5.3.3", + "pathe": "^0.2.0" + }, + "dependencies": { + "dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true + }, + "dotenv-expand": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz", + "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", + "dev": true + } + } + }, "vite-plugin-resolve": { "version": "2.5.1", "resolved": "https://registry.npmmirror.com/vite-plugin-resolve/-/vite-plugin-resolve-2.5.1.tgz", diff --git a/package.json b/package.json index 44f05de..6e1dab7 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "electron-builder": "^23.1.0", "typescript": "^4.5.4", "vite": "^2.8.0", + "vite-plugin-html": "^3.2.2", "vite-plugin-resolve": "^2.5.1" } -} \ No newline at end of file +} diff --git a/src/page/Home/index.module.scss b/src/page/Home/index.module.scss index 394ef0d..ff50af0 100644 --- a/src/page/Home/index.module.scss +++ b/src/page/Home/index.module.scss @@ -123,7 +123,7 @@ >div:nth-child(1) { color: #ccc; - font-size: 16px; + font-size: 14px; display: flex; align-items: center; diff --git a/src/page/Home/index.tsx b/src/page/Home/index.tsx index eef3ff8..0381369 100644 --- a/src/page/Home/index.tsx +++ b/src/page/Home/index.tsx @@ -45,6 +45,7 @@ const Home: React.FC = () => { ]); const [userInfo, setUserInfo] = useState({}) const [version, setVersion] = useState('') + const [buildTime, setBuildTime] = useState('0') const [update, setUpdate] = useState(false) const [dateInfo, setDateInfo] = useState<{ work: string; @@ -60,6 +61,13 @@ const Home: React.FC = () => { window.electron.getVersion().then(res => { setVersion(res) }) + try { + const buildStr = document.getElementById('build-time')?.getAttribute('content'); + const formattedTime = dayjs(Number(buildStr)).format('YYYYMMDDHHmm'); + setBuildTime(formattedTime) + } catch { + + } const updateTime = () => { setDateInfo({ work: dayjs().format('ddd'), @@ -136,7 +144,9 @@ const Home: React.FC = () => {
- 版本号:{version} + V{version}- + {buildTime} + {update ? new : null}
{update ?
diff --git a/vite.config.ts b/vite.config.ts index c700f85..3d499eb 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,6 +3,7 @@ import react from '@vitejs/plugin-react' import pxtovw from 'postcss-px-to-viewport-8-plugin' import { resolve as resolvePath } from 'path' import resolve from 'vite-plugin-resolve'; +import { createHtmlPlugin } from 'vite-plugin-html'; const loder_pxtovw = pxtovw({ viewportWidth: 1900, viewportUnit: 'vw', @@ -51,6 +52,20 @@ export default defineConfig({ base: './', // 这里更改打包相对绝对路径 plugins: [ react(), + createHtmlPlugin({ + minify: false, + pages: [ + { + template: 'index.html', + filename: 'index.html', + injectOptions: { + data: { + buildTime: +new Date() + } + } + } + ] + }), resolve({ 'agora-electron-sdk': ` const { From b6775f8e4020e1cbbd9f2d182d1fd7b37150d8a1 Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Thu, 20 Mar 2025 09:52:49 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=A1=B5=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=B0=8F=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/page/Login/index.module.scss | 2 +- src/page/Login/index.tsx | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/page/Login/index.module.scss b/src/page/Login/index.module.scss index df56c51..e6c1305 100644 --- a/src/page/Login/index.module.scss +++ b/src/page/Login/index.module.scss @@ -129,7 +129,7 @@ flex-shrink: 0; color: #ccc; text-align: right; - font-size: 16px; + font-size: 14px; } } } diff --git a/src/page/Login/index.tsx b/src/page/Login/index.tsx index 03d9011..92dd562 100644 --- a/src/page/Login/index.tsx +++ b/src/page/Login/index.tsx @@ -11,6 +11,7 @@ import { v4 as uuidv4 } from 'uuid'; import { GetCheckoutRoomNum, GetRoomInfo, GetRoomRtcToken } from '@/api/Home/Index'; import { ExclamationCircleFilled } from '@ant-design/icons'; import { isVersion } from '@/utils/package/public'; +import dayjs from 'dayjs'; const { confirm } = Modal; const Login: React.FC = () => { const navigate = useNavigate(); @@ -39,6 +40,7 @@ const Login: React.FC = () => { nickName: '', roomNum: '', }) + const [buildTime, setBuildTime] = useState('0') const [nameModal, setNameModal] = useState(false) const [env, setEnv] = useState('') useEffect(() => { @@ -50,6 +52,13 @@ const Login: React.FC = () => { window.electron.getEnv().then(res => { setEnv(res) }) + try { + const buildStr = document.getElementById('build-time')?.getAttribute('content'); + const formattedTime = dayjs(Number(buildStr)).format('YYYYMMDDHHmm'); + setBuildTime(formattedTime) + } catch { + + } if (storage.getItem('login')) { const login = JSON.parse(storage.getItem('login') as string); const data = { @@ -319,7 +328,8 @@ const Login: React.FC = () => { >
- 版本号:{version} + V{version}- + {buildTime}
From ed33bf6fa697cf20133ee6fe1c8b9f24394ba3bd Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Fri, 21 Mar 2025 11:06:53 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.js | 15 +++++++++++++++ index.html | 3 +++ package.json | 8 ++++---- 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 build.js diff --git a/build.js b/build.js new file mode 100644 index 0000000..f132ccf --- /dev/null +++ b/build.js @@ -0,0 +1,15 @@ +const fs = require('fs'); +const path = require('path'); + +const indexPath = path.resolve(__dirname, 'dist/index.html'); +let indexHtml = fs.readFileSync(indexPath, 'utf-8'); +const timestamp = new Date().getTime(); + +// 正则表达式匹配JS文件引用并添加时间戳 +indexHtml = indexHtml.replace(/`; + } + return match; +}); +fs.writeFileSync(indexPath, indexHtml); \ No newline at end of file diff --git a/index.html b/index.html index ad859db..5d1ed2c 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,9 @@ + + + diff --git a/package.json b/package.json index 6e1dab7..9a0e692 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,9 @@ "dev": "concurrently \"electron .\" \"cross-env BROWSER=none vite\"", "build": "vite build", "preview": "vite preview", - "build:dev": "vite build & electron-builder -w --config=./config/development.json", - "build:prod": "vite build & electron-builder -w --config=./config/production.json", - "build:xy": "vite build & electron-builder -w --config=./config/xy.json" + "build:dev": "vite build & node build.js & electron-builder -w --config=./config/development.json", + "build:prod": "vite build & node build.js & electron-builder -w --config=./config/production.json", + "build:xy": "vite build & node build.js & electron-builder -w --config=./config/xy.json" }, "agora_electron": { "platform": "win32", @@ -56,4 +56,4 @@ "vite-plugin-html": "^3.2.2", "vite-plugin-resolve": "^2.5.1" } -} +} \ No newline at end of file From 431bad2b9a806914812061c2ab0d7b2099fa405c Mon Sep 17 00:00:00 2001 From: yj <1336058017@qq.com> Date: Fri, 21 Mar 2025 11:14:50 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.js b/build.js index f132ccf..2c05509 100644 --- a/build.js +++ b/build.js @@ -8,7 +8,7 @@ const timestamp = new Date().getTime(); // 正则表达式匹配JS文件引用并添加时间戳 indexHtml = indexHtml.replace(/`; + return ``; } return match; });