diff --git a/build.js b/build.js
new file mode 100644
index 0000000..2c05509
--- /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/build/start-my.ico b/build/start-my.ico
new file mode 100644
index 0000000..5bf1ee2
Binary files /dev/null and b/build/start-my.ico differ
diff --git a/build/start-xatyz.ico b/build/start-xatyz.ico
new file mode 100644
index 0000000..bfc9474
Binary files /dev/null and b/build/start-xatyz.ico differ
diff --git a/config/my.json b/config/my.json
new file mode 100644
index 0000000..74be3b2
--- /dev/null
+++ b/config/my.json
@@ -0,0 +1,57 @@
+{
+ "appId": "agora.io.ElectronApiExample",
+ "asar": true,
+ "asarUnpack": [
+ "node_modules/agora-electron-sdk"
+ ],
+ "buildDependenciesFromSource": true,
+ "compression": "normal",
+ "productName": "绵阳中学人工智能教育发展共同体 · 教研平台",
+ "publish": [
+ {
+ "provider": "generic",
+ "url": "https://meeting-api.23544.com/meeting/my"
+ }
+ ],
+ "files": [
+ "!*.log"
+ ],
+ "win": {
+ "icon": "build/start-my.ico",
+ "requestedExecutionLevel": "highestAvailable",
+ "target": [
+ {
+ "target": "nsis",
+ "arch": [
+ "ia32"
+ ]
+ }
+ ]
+ },
+ "directories": {
+ "output": "electron"
+ },
+ "extraResources": [
+ {
+ "from": "src/assets/virtualBackground",
+ "to": "images",
+ "filter": [
+ "**/*"
+ ]
+ }
+ ],
+ "nsis": {
+ "oneClick": false,
+ "installerIcon": "build/start-my.ico",
+ "uninstallerIcon": "build/start-my.ico",
+ "installerHeaderIcon": "build/start-my.ico",
+ "allowToChangeInstallationDirectory": true,
+ "createDesktopShortcut": true,
+ "createStartMenuShortcut": true,
+ "deleteAppDataOnUninstall": true,
+ "shortcutName": "绵阳中学人工智能教育发展共同体 · 教研平台",
+ "allowElevation": true,
+ "perMachine": true,
+ "include": "build/install.nsh"
+ }
+}
\ No newline at end of file
diff --git a/config/xatyz.json b/config/xatyz.json
new file mode 100644
index 0000000..41b0bd5
--- /dev/null
+++ b/config/xatyz.json
@@ -0,0 +1,57 @@
+{
+ "appId": "agora.io.ElectronApiExample",
+ "asar": true,
+ "asarUnpack": [
+ "node_modules/agora-electron-sdk"
+ ],
+ "buildDependenciesFromSource": true,
+ "compression": "normal",
+ "productName": "西安铁一中教研平台",
+ "publish": [
+ {
+ "provider": "generic",
+ "url": "https://meeting-api.23544.com/meeting/xatyz"
+ }
+ ],
+ "files": [
+ "!*.log"
+ ],
+ "win": {
+ "icon": "build/start-xatyz.ico",
+ "requestedExecutionLevel": "highestAvailable",
+ "target": [
+ {
+ "target": "nsis",
+ "arch": [
+ "ia32"
+ ]
+ }
+ ]
+ },
+ "directories": {
+ "output": "electron"
+ },
+ "extraResources": [
+ {
+ "from": "src/assets/virtualBackground",
+ "to": "images",
+ "filter": [
+ "**/*"
+ ]
+ }
+ ],
+ "nsis": {
+ "oneClick": false,
+ "installerIcon": "build/start-xatyz.ico",
+ "uninstallerIcon": "build/start-xatyz.ico",
+ "installerHeaderIcon": "build/start-xatyz.ico",
+ "allowToChangeInstallationDirectory": true,
+ "createDesktopShortcut": true,
+ "createStartMenuShortcut": true,
+ "deleteAppDataOnUninstall": true,
+ "shortcutName": "西安铁一中教研平台",
+ "allowElevation": true,
+ "perMachine": true,
+ "include": "build/install.nsh"
+ }
+}
\ No newline at end of file
diff --git a/index.html b/index.html
index 1061ae2..5d1ed2c 100644
--- a/index.html
+++ b/index.html
@@ -6,6 +6,10 @@
+
+
+
+
diff --git a/main.js b/main.js
index f5fecb8..f9128b0 100644
--- a/main.js
+++ b/main.js
@@ -25,14 +25,12 @@ app.allowRendererProcessReuse = false;
let mainWindow = null;
let childWindow = {}
let isMaximized = false;
-let env = 'development'; //development production xy
let regKey;
let connection = null;
let startNumber = 0;
-let buildStatus = false; //true 打包开发版本 false 本地开发
+let env = 'my'; //development production xy xatyz my
+let buildStatus = true; //true 打包开发版本 false 本地开发
powerSaveBlocker.start('prevent-display-sleep')
-const id = powerSaveBlocker.start('prevent-display-sleep')
-powerSaveBlocker.stop(id)
class AppWindow extends BrowserWindow {
constructor(config) {
@@ -74,7 +72,13 @@ let tray;
// 检查网络状态
function checkNetworkStatus() {
if (!net.isOnline()) {
- dialog.showErrorBox(`${env === 'xy' ? '湖北襄阳四中教研平台' : '智汇享'}-网络连接错误', '当前无网络连接,请检查您的网络设置。`);
+ const titleMap = {
+ xy: '湖北襄阳四中教研平台',
+ xatyz: '西安铁一中教研平台',
+ my: '绵阳中学人工智能教育发展共同体 · 教研平台'
+ };
+ const title = `${titleMap[env] || '智汇享'}-网络连接错误`;
+ dialog.showErrorBox(title, '当前无网络连接,请检查您的网络设置。');
app.quit();
return false;
}
@@ -705,9 +709,9 @@ app.on('ready', () => {
childWindow[config.key].setBounds({ width: config.width, height: config.height })
break;
default:
- mainWindow.setMinimumSize(250, config.height);
- mainWindow.setMaximumSize(250, config.height);
- mainWindow.setSize(250, config.height)
+ mainWindow.setMinimumSize(config.width, config.height);
+ mainWindow.setMaximumSize(config.width, config.height);
+ mainWindow.setSize(config.width, config.height)
break;
}
});
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..5e081e2 100644
--- a/package.json
+++ b/package.json
@@ -9,9 +9,11 @@
"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",
+ "build:xatyz": "vite build & node build.js & electron-builder -w --config=./config/xatyz.json",
+ "build:my": "vite build & node build.js & electron-builder -w --config=./config/my.json"
},
"agora_electron": {
"platform": "win32",
@@ -53,6 +55,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/assets/icon57.png b/src/assets/icon57.png
new file mode 100644
index 0000000..71452a1
Binary files /dev/null and b/src/assets/icon57.png differ
diff --git a/src/assets/icon58.png b/src/assets/icon58.png
new file mode 100644
index 0000000..4a80630
Binary files /dev/null and b/src/assets/icon58.png differ
diff --git a/src/assets/icon59.png b/src/assets/icon59.png
new file mode 100644
index 0000000..7fe953d
Binary files /dev/null and b/src/assets/icon59.png differ
diff --git a/src/assets/icon60-active.png b/src/assets/icon60-active.png
new file mode 100644
index 0000000..0839e5d
Binary files /dev/null and b/src/assets/icon60-active.png differ
diff --git a/src/assets/icon60.png b/src/assets/icon60.png
new file mode 100644
index 0000000..1df0dc8
Binary files /dev/null and b/src/assets/icon60.png differ
diff --git a/src/assets/icon61-active.png b/src/assets/icon61-active.png
new file mode 100644
index 0000000..0201ddf
Binary files /dev/null and b/src/assets/icon61-active.png differ
diff --git a/src/assets/icon61.png b/src/assets/icon61.png
new file mode 100644
index 0000000..4ba4c6f
Binary files /dev/null and b/src/assets/icon61.png differ
diff --git a/src/assets/icon62.png b/src/assets/icon62.png
new file mode 100644
index 0000000..e4bb07d
Binary files /dev/null and b/src/assets/icon62.png differ
diff --git a/src/assets/icon63.png b/src/assets/icon63.png
new file mode 100644
index 0000000..6063e4a
Binary files /dev/null and b/src/assets/icon63.png differ
diff --git a/src/components/SpeakerModeModal/index.tsx b/src/components/SpeakerModeModal/index.tsx
index 73e5351..848aad9 100644
--- a/src/components/SpeakerModeModal/index.tsx
+++ b/src/components/SpeakerModeModal/index.tsx
@@ -53,14 +53,14 @@ const SpeakerModeModal = forwardRef((props: any, ref: any) => {
})
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/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/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..11634ef 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 = {
@@ -204,7 +213,23 @@ const Login: React.FC = () => {
<>
- {env ?

: null}
+ {env && (
+
)
{
+ switch (env) {
+ case 'xy':
+ return ImageUrl.icon53
+ case 'xatyz':
+ return ImageUrl.icon58
+ case 'my':
+ return ImageUrl.icon63
+ default:
+ return ImageUrl.icon1
+ }
+ })()}
+ alt=""
+ />
+ )}
@@ -319,7 +344,8 @@ const Login: React.FC = () => {
>

- 版本号:{version}
+ V{version}-
+ {buildTime}
diff --git a/src/page/Meeting/UserListWindow/index.module.scss b/src/page/Meeting/UserListWindow/index.module.scss
index 2cc7677..c8838c0 100644
--- a/src/page/Meeting/UserListWindow/index.module.scss
+++ b/src/page/Meeting/UserListWindow/index.module.scss
@@ -52,9 +52,15 @@
align-items: center;
>span {
- font-size: 14px;
+ display: flex;
+ flex-direction: column;
color: #F3F3F5;
margin-left: 4px;
+ font-size: 13px;
+
+ >span {
+ font-size: 12px;
+ }
}
>div {
diff --git a/src/page/Meeting/UserListWindow/index.tsx b/src/page/Meeting/UserListWindow/index.tsx
index 1630667..b7aa4a7 100644
--- a/src/page/Meeting/UserListWindow/index.tsx
+++ b/src/page/Meeting/UserListWindow/index.tsx
@@ -83,10 +83,10 @@ const UserListWindow: React.FC = () => {
- {item.userName}{item.uid === user.uid ? '(我)' : ''}
+ {item.userName}
{role.ID.includes(item.roleId) || item.isRoomManager ?
-
- {role.ID.includes(item.roleId) ? '管理员' : '发言人'}
+
+ {role.ID.includes(item.roleId) ? item.uid === user.uid ? '(管理员,我)' : '(管理员)' : item.uid === user.uid ? '(发言人,我)' : '(发言人)'}
: null}
diff --git a/src/page/Meeting/index.module.scss b/src/page/Meeting/index.module.scss
index 53680e0..080d1bc 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;
@@ -103,19 +103,43 @@
background-color: #1F2022;
left: 0;
top: 0;
- z-index: 3000;
- .meetingAbsoluteLoading {
- background: black;
+ .meetingAbsoluteHeader {
position: absolute;
- left: 0;
- top: 0;
width: 100%;
- height: 100%;
+ left: 0;
+ z-index: 3;
display: flex;
- justify-content: center;
- align-items: center;
- z-index: 1;
+ flex-direction: column;
+ background-color: rgba(0, 0, 0, 0.5);
+
+ >div {
+ width: 100%;
+ padding: 2px 10px;
+ box-sizing: border-box;
+ display: flex;
+ align-items: flex-start;
+
+ >span {
+ display: flex;
+ align-items: center;
+
+ >img {
+ height: 24px;
+ }
+ }
+ }
+
+ >span {
+ font-size: 14px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ color: white;
+ width: 100%;
+ padding: 0 10px;
+ box-sizing: border-box;
+ }
}
.meetingAbsoluteText {
@@ -124,7 +148,7 @@
left: 0;
color: white;
text-align: center;
- z-index: 2;
+ z-index: 3;
background-color: rgba(0, 0, 0, 0.5);
cursor: pointer;
font-size: 14px;
@@ -234,7 +258,6 @@
#videoView {
position: relative;
- border: 1px red solid;
}
.standardModeIcon {
@@ -285,14 +308,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,13 +444,18 @@
.meetingContentSwiperCard {
width: 100%;
- }
-
- .meetingContentSwiperCard {
height: 160px;
}
}
+ .meetingContentBodyLeftSpeakerModeNoScrollbar {
+ width: 246px !important;
+
+ &::-webkit-scrollbar {
+ display: none;
+ }
+ }
+
// 单画面模式
.meetingContentBodyLeftSingleScreenMode {
width: 100%;
@@ -920,40 +1060,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 0a62747..f1f5aa0 100644
--- a/src/page/Meeting/index.tsx
+++ b/src/page/Meeting/index.tsx
@@ -184,7 +184,8 @@ const Meeting: React.FC = () => {
const [isClickLock, setIsClickLock] = useState(false)
const [open, setOpen] = useState(false)
const [modeOpen, setModeOpen] = useState(false)
- const [meetingMode, setMeetingMode] = useState('')
+ const [showCaret, setShowCaret] = useState(false)
+ const [meetingMode, setMeetingMode] = useState('FreedomMode')
const [userSearchValue, setUserSearchValue] = useState('')
const [noViewChatList, setNoViewChatList] = useState(0)
const [currentLookUserAccount, setCurrentLookUserAccount] = useState('')
@@ -217,6 +218,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)
@@ -235,7 +237,6 @@ const Meeting: React.FC = () => {
}
})
setKeyOpenChildWindow('shareScreenWindow', false)
- setMeetingMode('StandardMode');
agoraInit()
storage.setItem('noViewChatList', 0)
window.addEventListener('customStorageChange', handleCustomStorageChange);
@@ -489,7 +490,7 @@ const Meeting: React.FC = () => {
title: '录制'
}, 1, 3)
} else {
- message.error('当前不在会议室!')
+ handleMessage().error('当前不在会议室!')
}
showSingIn()
},
@@ -639,18 +640,39 @@ const Meeting: React.FC = () => {
if (isShare) {
const item = roomUserList.find((item: any) => item.screenShareId === String(isShare))
setIsShareUser(item || null)
+ setIsScreenCapture(isScreenCaptureValue => {
+ setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : 'StandardMode')
+ return isScreenCaptureValue
+ })
}
}, [isShare, roomUserList]);
+ useEffect(() => {
+ setFreedomModeStatus((res: boolean) => {
+ if (meetingMode === 'FreedomMode') {
+ return true
+ } else {
+ if (res) {
+ getShowUser(true)
+ }
+ return false
+ }
+ })
+ }, [meetingMode]);
+
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)
@@ -723,32 +745,41 @@ const Meeting: React.FC = () => {
break;
// 扩展操作
case 'Operation':
- switch (item.contentString) {
+ try {
+ const temp = JSON.parse(item.contentString)
+ if (temp.type === 'mode') {
+ temp.msg ? handleMessage().success(`管理员已将会议室显示模式更新为${getMeetingContentBodyLeftModeText(temp.mode)}`) : null;
+ setIsScreenCapture(isScreenCaptureValue => {
+ setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : temp.mode)
+ return isScreenCaptureValue
+ })
+ }
+ } catch (error) {
}
break;
// 全员离开房间
case 'AllLeave':
- message.success('管理员已结束会议!')
+ handleMessage().success('管理员已结束会议!')
leaveChannel(false)
break;
// 移出会议
case 'ForceExitRoom':
- message.success('管理员已将你移出会议!')
+ handleMessage().success('管理员已将你移出会议!')
leaveChannel()
break;
// 更新视图模式
case 'RefreshView':
- setMeetingMode(item.type)
+
break;
// 全员看他
case 'ShowUser':
if (item.operUid && item.operUserName) {
if (item.operUid !== userInfo.uid) {
if (item.uid === userInfo.uid) {
- message.success(`${item.operUserName}设置全员看你`)
+ handleMessage().success(`${item.operUserName}设置全员看你`)
} else {
- message.success(`${item.operUserName}设置全员看${item.uname}`)
+ handleMessage().success(`${item.operUserName}设置全员看${item.uname}`)
}
}
}
@@ -770,7 +801,7 @@ const Meeting: React.FC = () => {
case 'OperMicr':
if (item.operUid !== userInfo.uid) {
if (item.user.uid === userInfo.uid) {
- message.success(item.user.enableMicr ? '管理员已取消你的静音' : '你已被管理员静音')
+ handleMessage().success(item.user.enableMicr ? '管理员已取消你的静音' : '你已被管理员静音')
}
}
setAllUserListData('OperMicr', item)
@@ -779,7 +810,7 @@ const Meeting: React.FC = () => {
case 'OperCamera':
if (item.operUid !== userInfo.uid) {
if (item.user.uid === userInfo.uid) {
- message.success(item.user.enableCamera ? '管理员已开启你的摄像头' : '管理员已关闭你摄像头')
+ handleMessage().success(item.user.enableCamera ? '管理员已开启你的摄像头' : '管理员已关闭你摄像头')
}
}
setAllUserListData('OperCamera', item)
@@ -798,20 +829,20 @@ const Meeting: React.FC = () => {
if (item.user.uid === item.uid) {
if (item.user.uid === userInfo.uid) {
await agora.allLeaveChannelEx()
- message.success(`操作成功`)
+ handleMessage().success(`操作成功`)
await agora.updateChannelMediaOptions(item.user.isRoomManager)
await postOpenMicrApi(item.user.isRoomManager, userInfo.uid, false)
await postOpenCameraApi(false, userInfo.uid) // 不管身份如何改变都关闭摄像头
await stopScreenCapture()
} else {
- message.success(`${item.user.userName}已结束发言`)
+ handleMessage().success(`${item.user.userName}已结束发言`)
}
} else {
if (item.user.uid === userInfo.uid) {
if (item.user.isRoomManager) {
await agora.allLeaveChannelEx()
}
- message.success(`管理员${item.user.isRoomManager ? '设置' : '取消'}您为发言人`)
+ handleMessage().success(`管理员${item.user.isRoomManager ? '设置' : '取消'}您为发言人`)
await agora.updateChannelMediaOptions(item.user.isRoomManager)
setCurrentRequestSpeakType(res => {
if (res === 'video') {
@@ -826,7 +857,7 @@ const Meeting: React.FC = () => {
})
await stopScreenCapture()
} else {
- message.success(`管理员${item.user.isRoomManager ? '设置' : '取消'}${item.user.userName}为发言人`)
+ handleMessage().success(`管理员${item.user.isRoomManager ? '设置' : '取消'}${item.user.userName}为发言人`)
}
}
})
@@ -990,7 +1021,7 @@ const Meeting: React.FC = () => {
uid: temp.uid,
enableMicr: temp.enableMicr
})
- } else {
+ } else if (temp.type === 'video') {
await PostOpenCamera({
roomNum: temp.roomNum,
uid: temp.uid,
@@ -1016,7 +1047,7 @@ const Meeting: React.FC = () => {
if (recorder) {
recorder.start()
recorder.onstart = async () => {
- message.success('开始录制')
+ handleMessage().success('开始录制')
}
recorder.onerror = async () => {
setRecorder('')
@@ -1025,7 +1056,7 @@ const Meeting: React.FC = () => {
changeStatusList({
title: '录制中'
}, 1, 3)
- message.error('录制失败,请重新录制!')
+ handleMessage().error('录制失败,请重新录制!')
}
recorder.onstop = async () => {
@@ -1140,13 +1171,7 @@ const Meeting: React.FC = () => {
useEffect(() => {
if (isScreenCapture) {
- agora.setupLocalVideo({
- uid: Number(user.uid),
- view: document.getElementById(`meetingAbsoluteVideo`) as HTMLElement,
- channelId: state.channelId,
- sourceType: VideoSourceType.VideoSourceCameraPrimary,
- type: true
- })
+
}
}, [isScreenCapture]);
@@ -1189,7 +1214,7 @@ const Meeting: React.FC = () => {
// GetApplySpeak(state.channelId).then(res => {
// if (res.code === 200) {
// setIsClicked(true);
- // message.success('申请发言成功')
+ // handleMessage().success('申请发言成功')
// }
// })
// },
@@ -1233,7 +1258,7 @@ const Meeting: React.FC = () => {
} else {
item.status--
if (item.status <= 0) {
- message.error(`设置${user.userName}发言人失败!`)
+ handleMessage().error(`设置${user.userName}发言人失败!`)
newApplyUserList.splice(index, 1)
}
}
@@ -1265,18 +1290,11 @@ const Meeting: React.FC = () => {
observer?.unobserve(element);
});
const observerObject = new IntersectionObserver(async (entries: IntersectionObserverEntry[], _observer: IntersectionObserver) => {
- setIsScreenCapture((bool: boolean) => {
- entries.forEach(async (entry) => {
- if (entry.target.id !== user.uid) {
- await agora.muteRemoteVideoStreamEx(Number(entry.target.id), bool ? true : !entry.isIntersecting)
- }
- });
- return bool
- })
- setIsScreenCapture((bool: boolean) => {
- agora.muteRemoteVideoStreamEx(Number(currentVideoId), bool)
- return bool
- })
+ entries.forEach(async (entry) => {
+ if (entry.target.id !== user.uid) {
+ await agora.muteRemoteVideoStreamEx(Number(entry.target.id), !entry.isIntersecting)
+ }
+ });
}, { threshold: 0, root: document.getElementById('videoView') });
setObserver(observerObject)
elements.forEach(element => {
@@ -1466,7 +1484,7 @@ const Meeting: React.FC = () => {
return bool
})
} else if (reason === 3 || reason === 4) {
- message.error({
+ handleMessage().error({
content: 检查摄像头是否正常、未被占用,或尝试重新加入频道。 {
stupWizardRef.current.changeModal(1);
}}>前往修改摄像头
,
@@ -1480,7 +1498,7 @@ const Meeting: React.FC = () => {
uid: userInfo.uid,
enableCamera: false
})
- message.error({
+ handleMessage().error({
content: 检查摄像头是否正常、未被占用,或尝试重新加入频道。 {
stupWizardRef.current.changeModal(1);
}}>前往修改摄像头
,
@@ -1581,7 +1599,14 @@ 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) {
+ setIsScreenCapture(isScreenCaptureValue => {
+ setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : 'StandardMode')
+ return isScreenCaptureValue
+ })
+ }
return res
})
}
@@ -1713,16 +1738,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`)
@@ -1760,11 +1787,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)
}
})
}
@@ -1814,7 +1841,7 @@ const Meeting: React.FC = () => {
GetApplySpeak(state.channelId).then(res => {
if (res.code === 200) {
setIsClicked(true);
- message.success('申请发言成功')
+ handleMessage().success('申请发言成功')
}
})
},
@@ -1858,7 +1885,7 @@ const Meeting: React.FC = () => {
}
})
} else {
- message.error(msgTips)
+ handleMessage().error(msgTips)
}
})
break;
@@ -1868,7 +1895,7 @@ const Meeting: React.FC = () => {
if (res) {
await stopScreenCapture()
} else {
- message.error(msgTips)
+ handleMessage().error(msgTips)
}
})
if (row.title === '停止共享') {
@@ -1887,7 +1914,7 @@ const Meeting: React.FC = () => {
setCurrentRequestSpeakType('audio')
requestSpeak()
} else {
- message.error('申请太频繁了,请稍后重试!');
+ handleMessage().error('申请太频繁了,请稍后重试!');
}
}
})
@@ -1904,7 +1931,7 @@ const Meeting: React.FC = () => {
setCurrentRequestSpeakType('video')
requestSpeak()
} else {
- message.error('申请太频繁了,请稍后重试!');
+ handleMessage().error('申请太频繁了,请稍后重试!');
}
}
})
@@ -1919,7 +1946,7 @@ const Meeting: React.FC = () => {
if (res) {
invitingPersonnelRef.current.changeInvitingPersonnelModal()
} else {
- message.error(msgTips)
+ handleMessage().error(msgTips)
}
})
break;
@@ -1975,25 +2002,25 @@ const Meeting: React.FC = () => {
setRecorder(mediaRecorder);
});
} else {
- message.error('录制太频繁了,请稍后重试!');
+ handleMessage().error('录制太频繁了,请稍后重试!');
}
} catch (error: any) {
if (error.code === 'ENOENT') {
- message.error({
+ handleMessage().error({
content: 文件夹不存在 {
stupWizardRef.current.changeModal(3);
}}>前往设置
});
return;
} else {
- message.error(error);
+ handleMessage().error(error);
}
}
break;
case '录制中':
if (isClickedMediaSteam) {
- message.error('录制时长不足3秒,请稍后重试!');
+ handleMessage().error('录制时长不足3秒,请稍后重试!');
} else {
footerListTemplate[itemIndex][rowIndex].title = '录制'
footerListTemplate[itemIndex][rowIndex].active = false
@@ -2008,7 +2035,7 @@ const Meeting: React.FC = () => {
if (!isClicked) {
requestSpeak()
} else {
- message.error('申请太频繁了,请稍后重试!');
+ handleMessage().error('申请太频繁了,请稍后重试!');
}
break;
case '会议监控':
@@ -2114,7 +2141,7 @@ const Meeting: React.FC = () => {
setKeyOpenChildWindow('shareScreenWindow', true)
window.electron.setMainWindowSize({
width: 250,
- height: 160,
+ height: 230,
})
window.electron.setPosition('right')
}
@@ -2144,12 +2171,20 @@ 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
+ })
+ })
}
}
// 设置发言人
const postRoomManager = async (data: any): Promise => {
if (isAdmin >= 20) {
- message.error('设置失败,已达最大发言人20个!')
+ handleMessage().error('设置失败,已达最大发言人20个!')
} else {
await PostRoomManager({
roomId: data.roomId,
@@ -2167,7 +2202,7 @@ const Meeting: React.FC = () => {
}
// 停止共享
const stopScreenCapture = async (): Promise => {
- await agora.destroyRendererByView(`meetingAbsoluteVideo`)
+ setMeetingMode('StandardMode')
const footerListTemplate = [...footerList]
await agora.leaveChannelEx(userInfo.screenShareId)
agora.stopScreenCapture()
@@ -2236,7 +2271,10 @@ const Meeting: React.FC = () => {
const handleCustomStorageChange = async (e: any): Promise => {
switch (e.key) {
case 'meetingMode':
- setMeetingMode(e.value)
+ setIsScreenCapture(isScreenCaptureValue => {
+ setMeetingMode(isScreenCaptureValue ? 'SpeakerMode' : e.value)
+ return isScreenCaptureValue
+ })
break;
case 'quitMeeting':
if (e.value) {
@@ -2245,7 +2283,7 @@ const Meeting: React.FC = () => {
break;
case 'reconnect':
if (e.value == true) {
- message.success('网络已连接。')
+ handleMessage().success('网络已连接。')
meetingDisconnectedRef.current.changeModal(false)
setIsAgoraDisconnected(false)
async function setUserStatus(res: any) {
@@ -2311,7 +2349,7 @@ const Meeting: React.FC = () => {
return res
})
} else {
- message.error('请输入内容!')
+ handleMessage().error('请输入内容!')
}
}
// 聊天框滚动到底部
@@ -2341,19 +2379,20 @@ const Meeting: React.FC = () => {
})
}
if (msg) {
- message.error(msg)
+ handleMessage().error(msg)
return
}
}
if (enableMicr) {
const enableMicrLenght = roomUserList.filter((item: any) => item.enableMicr).length
if (enableMicrLenght >= 20) {
- return message.error('房间内最多20个开启麦克风')
+ handleMessage().error('房间内最多20个开启麦克风')
+ return
}
}
await postOpenMicrApi(enableMicr, uid, isAll, true)
} else {
- message.error(msgTips)
+ handleMessage().error(msgTips)
}
})
}
@@ -2381,7 +2420,7 @@ const Meeting: React.FC = () => {
// })
}
if (isMessage) {
- // message.success('操作成功')
+ // handleMessage().success('操作成功')
}
}
// 开关视频
@@ -2397,18 +2436,19 @@ const Meeting: React.FC = () => {
})
}
if (msg) {
- message.error(msg)
+ handleMessage().error(msg)
return
}
if (enableCamera) {
const enableCameraLenght = roomUserList.filter((item: any) => item.enableCamera).length
if (enableCameraLenght >= 20) {
- return message.error('房间内最多20个开启摄像头')
+ handleMessage().error('房间内最多20个开启摄像头')
+ return
}
}
await postOpenCameraApi(enableCamera, uid, true)
} else {
- message.error(msgTips)
+ handleMessage().error(msgTips)
}
})
}
@@ -2434,7 +2474,7 @@ const Meeting: React.FC = () => {
// enableCamera
// })
if (isMessage) {
- // message.success('操作成功')
+ // handleMessage().success('操作成功')
}
}
// 演讲者模式
@@ -2456,14 +2496,41 @@ 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':
- return styles.meetingContentBodyLeftSpeakerMode
+ return `${styles.meetingContentBodyLeftSpeakerMode} ${isScreenCapture ? styles.meetingContentBodyLeftSpeakerModeNoScrollbar : ''}`
case 'SingleScreenMode':
return styles.meetingContentBodyLeftSingleScreenMode
case 'DualScreenMode':
@@ -2474,10 +2541,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':
@@ -2573,7 +2640,35 @@ const Meeting: React.FC = () => {
} else {
await allUserLook(item.uid, item.userName)
}
- message.success('操作成功')
+ handleMessage().success('操作成功')
+ }
+ // 设置模式
+ const setSyncView = (mode: string) => {
+ if (meetingMode === mode) {
+ setModeOpen(false)
+ handleMessage().error(`${getMeetingContentBodyLeftModeText(mode)}已开启,请勿重复操作!`)
+ return
+ }
+ if (isAdmin > 6 && mode === 'FreedomMode') {
+ setModeOpen(false)
+ handleMessage().error('发言人数超过6人,无法使用宫格模式!')
+ return
+ }
+ if (isShare && mode === 'FreedomMode') {
+ setModeOpen(false)
+ handleMessage().error('共享中,无法切换模式')
+ return
+ }
+ window.electron.onInvoke('sendOper', {
+ roomNum: state.channelId,
+ contentString: JSON.stringify({
+ mode,
+ type: 'mode',
+ msg: true,
+ })
+ })
+ setModeOpen(false)
+ storage.setItem('meetingMode', mode)
}
// 判断是否出现滚动条
const hasScrollbar = () => {
@@ -2594,30 +2689,64 @@ const Meeting: React.FC = () => {
cancelText: '取消',
async onOk() {
await GetRoomKickout(channelId, uid)
- message.success('操作成功')
+ handleMessage().success('操作成功')
},
onCancel() {
},
});
}
+ const handleMessage = () => {
+ const displayMessage = (
+ fn: (msg: any) => void,
+ msg: any
+ ) => {
+ setIsScreenCapture(bool => {
+ if (!bool) {
+ fn(msg);
+ }
+ return bool;
+ });
+ };
+
+ return {
+ error: (msg: any) => displayMessage(message.error, msg),
+ success: (msg: any) => displayMessage(message.success, msg)
+ };
+ };
return (
<>
{
setContextMenu('')
+ if (modeOpen) {
+ setModeOpen(false)
+ }
setIsNetworkQuality(false)
}}>
- {isScreenCapture ?
-
{currentSpeakUser.length ? '正在说话:' + currentSpeakUser.join(';') : '正在说话:'}
- {footerList[0][1].active ?
: null}
-
{
+ {isScreenCapture ?
+
+
+
{
+ setIsExpand(!isExpand)
+ window.electron.setChildWindow({
+ height: !isExpand ? 160 * 4 + 20 : 230,
+ width: 250,
+ key: 'main'
+ })
+ }}>
+
+
+
+
+
{currentSpeakUser.length ? '正在说话:' + currentSpeakUser.join(';') : '正在说话:'}
+
+
{
setIsExpand(!isExpand)
window.electron.setChildWindow({
- height: isExpand ? 160 : 40,
+ height: !isExpand ? 160 * 4 + 20 : 230,
+ width: 250,
key: 'main'
})
- }}>{isExpand ? '展开' : '收起'}
+ }}>
{isExpand ? '收起' : '查看参会者'}
: null}
{contextMenu ?
{
>移出会议 : null}
: null}
{contextHolder}
-
+ {isScreenCapture ? null :
- {isScreenCapture ? null :
setIsNetworkQuality(false)}>
@@ -2766,35 +2895,40 @@ const Meeting: React.FC = () => {
{networkIcon(currentEffective)}
详情
- }
+
{changeCurrentSeconds()}
会议号:{state.channelId} 会议名称:{state.roomName}
-
- {
- setModeOpen(false)
- storage.setItem('meetingMode', 'StandardMode')
- }}>
-

-
标准模式
-
- {
- setModeOpen(false)
- storage.setItem('meetingMode', 'SpeakerMode')
- }}>
-

-
演讲模式
-
- {
- setModeOpen(false)
- }}>
-
取消
+
+
{
+ setSyncView('FreedomMode')
+ }}>
+

+
宫格模式
+
+
{
+ setSyncView('StandardMode')
+ }}>
+

+
标准模式
+
+
{
+ setSyncView('SpeakerMode')
+ }}>
+

+
演讲模式
+
+
+
+ 改变布局将对所有成员生效
+
}
title=""
@@ -2803,24 +2937,35 @@ const Meeting: React.FC = () => {
onOpenChange={() => setModeOpen(true)}
>
- {meetingMode === 'StandardMode' ?

:

}
+ {meetingMode === 'StandardMode' ?
+

:
+ meetingMode === 'FreedomMode' ?
+

:
+

}
{getMeetingContentBodyLeftModeText()}
-
+ : null}
-
+
}
-
- {isAdmin && currentLookUserAccount ? getSettingIcon() : null}
-
+
setShowCaret(true)}
+ onMouseLeave={() => setShowCaret(false)}>
+ {isAdmin && currentLookUserAccount && !isScreenCapture ? getSettingIcon() : null}
+
{roomUserList.map((item: any, index: number) => {
return (item.isRoom && item.isAdmin ?
{
+ if (isScreenCapture) {
+ return
+ }
if (String(isShare) === item.screenShareId) {
renderVideo(item.screenShareId)
} else {
@@ -2828,6 +2973,9 @@ const Meeting: React.FC = () => {
}
}}
onContextMenu={(e: any) => {
+ if (isScreenCapture) {
+ return
+ }
if (role.ID.includes(userInfo.roleId)) {
setContextMenuStyle({
top: e.clientY,
@@ -2842,12 +2990,12 @@ const Meeting: React.FC = () => {
- {meetingContentUser(item)}
+ {meetingContentUser(item, false, isScreenCapture)}
{item.enableCamera ? null : meetingContentError(item)}
- {String(isShare) === item.screenShareId ?
+ {String(isShare) === item.screenShareId && !isScreenCapture ?
屏幕分享中
: null}
- {role.ID.includes(user.roleId) ?
{item.isRoomManager || role.ID.includes(item.roleId) ? : null)
}
)}
- {hasScrollbar() ?
+ {/*
*/}
+ {meetingMode !== "FreedomMode" && hasScrollbar() && showCaret ?
{meetingMode === "StandardMode" ?
{
const container = document.getElementById('videoView') as HTMLElement;
container.scrollLeft -= 100
@@ -2956,15 +3110,15 @@ const Meeting: React.FC = () => {
container.scrollLeft += 100
}}>
-
:
{
+
:
{
const container = document.getElementById('videoView') as HTMLElement;
container.scrollTop += 100
}}>
}
: null}
- {currentLookUserStatus === 0 ?
-
+ {meetingMode !== "FreedomMode" && currentLookUserStatus === 0 ?
+
{

@@ -2974,8 +3128,8 @@ const Meeting: React.FC = () => {
setIsVideoFullScreen(true)} />}
{meetingContentUser(currentLookUserAccount, true)}
: null}
- {currentLookUserStatus === 1 ?
-
+ {meetingMode !== "FreedomMode" && currentLookUserStatus === 1 ?
+
{
@@ -2986,8 +3140,8 @@ const Meeting: React.FC = () => {
{meetingContentUser(currentLookUserAccount, true)}
{currentLookUserAccount.enableCamera ? null : meetingContentError(currentLookUserAccount)}
: null}
- {currentLookUserStatus === 2 ?
-
+ {meetingMode !== "FreedomMode" && currentLookUserStatus === 2 ?
+
@@ -2997,8 +3151,8 @@ const Meeting: React.FC = () => {
setIsVideoFullScreen(true)} />}
{meetingContentUser(currentLookUserAccount, true)}
: null}
- {currentLookUserStatus === 3 ?
-
+ {meetingMode !== "FreedomMode" && currentLookUserStatus === 3 ?
+
@@ -3008,8 +3162,8 @@ const Meeting: React.FC = () => {
setIsVideoFullScreen(true)} />}
{meetingContentUser(currentLookUserAccount, true)}
: null}
- {currentLookUserStatus === 4 ?
-
+ {meetingMode !== "FreedomMode" && currentLookUserStatus === 4 ?
+
@@ -3026,7 +3180,7 @@ const Meeting: React.FC = () => {
{
- (statusList.userList || statusList.userChatList || statusList.userVideo) ? (
+ (statusList.userList || statusList.userChatList || statusList.userVideo) && !isScreenCapture ? (
{statusList.userList ?
@@ -3070,10 +3224,10 @@ const Meeting: React.FC = () => {
- {item.userName}{item.uid === user.uid ? '(我)' : ''}
+ {item.userName}
{role.ID.includes(item.roleId) || item.isRoomManager ?
-
- {role.ID.includes(item.roleId) ? '管理员' : '发言人'}
+
+ {role.ID.includes(item.roleId) ? item.uid === user.uid ? '(管理员,我)' : '(管理员)' : item.uid === user.uid ? '(发言人,我)' : '(发言人)'}
: null}
@@ -3673,7 +3827,7 @@ const Meeting: React.FC = () => {
)
}
-const meetingContentUser = (item: any, bool?: boolean) => {
+const meetingContentUser = (item: any, bool?: boolean, isScreenCapture?: boolean) => {
return (
<>
@@ -3690,7 +3844,7 @@ const meetingContentUser = (item: any, bool?: boolean) => {
: ''}
}
-
+
{item.userName}
{role.ID.includes(item.roleId) || item.isRoomManager ? role.ID.includes(item.roleId) ? '(管理员)' : '(发言人)' : ''}
diff --git a/src/utils/package/imageUrl.ts b/src/utils/package/imageUrl.ts
index 2c349a4..bd8a33d 100644
--- a/src/utils/package/imageUrl.ts
+++ b/src/utils/package/imageUrl.ts
@@ -86,6 +86,15 @@ 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'
+import icon58 from '@/assets/icon58.png'
+import icon59 from '@/assets/icon59.png'
+import icon60 from '@/assets/icon60.png'
+import icon61 from '@/assets/icon61.png'
+import icon60Active from '@/assets/icon60-active.png'
+import icon61Active from '@/assets/icon61-active.png'
+import icon62 from '@/assets/icon62.png'
+import icon63 from '@/assets/icon63.png'
export default {
loading,
icon,
@@ -174,5 +183,14 @@ export default {
icon54,
icon55,
icon56,
- icon56Active
+ icon56Active,
+ icon57,
+ icon58,
+ icon59,
+ icon60,
+ icon61,
+ icon60Active,
+ icon61Active,
+ icon62,
+ icon63,
}
\ No newline at end of file
diff --git a/src/utils/package/public.ts b/src/utils/package/public.ts
index beac8d1..c2f44b4 100644
--- a/src/utils/package/public.ts
+++ b/src/utils/package/public.ts
@@ -62,6 +62,10 @@ export const getUpdateUrl = (env: string) => {
switch (env) {
case 'xy':
return 'https://meeting-api.23544.com/meeting/xysz'
+ case 'xatyz':
+ return 'https://meeting-api.23544.com/meeting/xatyz'
+ case 'my':
+ return 'https://meeting-api.23544.com/meeting/my'
case 'development':
return 'http://192.168.2.9:8827'
default:
@@ -75,6 +79,12 @@ export const getTitle = async () => {
case 'xy':
str = '湖北襄阳四中教研平台'
break;
+ case 'xatyz':
+ str = '西安铁一中教研平台'
+ break;
+ case 'my':
+ str = '绵阳中学人工智能教育发展共同体 · 教研平台'
+ break;
case 'development':
str = '智汇享'
break;
diff --git a/src/utils/package/update.js b/src/utils/package/update.js
index 4e10c9a..634f26f 100644
--- a/src/utils/package/update.js
+++ b/src/utils/package/update.js
@@ -3,6 +3,10 @@ module.exports = {
switch (env) {
case 'xy':
return 'https://meeting-api.23544.com/meeting/xysz'
+ case 'xatyz':
+ return 'https://meeting-api.23544.com/meeting/xatyz'
+ case 'my':
+ return 'https://meeting-api.23544.com/meeting/my'
case 'development':
return 'http://192.168.2.9:8827'
default:
@@ -13,6 +17,10 @@ module.exports = {
switch (env) {
case 'xy':
return '湖北襄阳四中教研平台'
+ case 'xatyz':
+ return '西安铁一中教研平台'
+ case 'my':
+ return '绵阳中学人工智能教育发展共同体 · 教研平台'
case 'development':
return '智汇享'
default:
@@ -23,6 +31,10 @@ module.exports = {
switch (env) {
case 'xy':
return 'icon54'
+ case 'xatyz':
+ return 'icon59'
+ case 'my':
+ return 'icon62'
case 'development':
return 'icon'
default:
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 {