From fa4cc347e7238de86f190659d25db74635a97e43 Mon Sep 17 00:00:00 2001
From: odc.xiaohui <xiaohui@Q1>
Date: 星期四, 15 六月 2023 14:03:31 +0800
Subject: [PATCH] 添加在线会议

---
 public/admin/components/echarts/jitsi.js      |    2 
 package-lock.json                             |  957 ++++++++++++++++++++++++++++++++-----
 public/index.html                             |    1 
 src/layout/components/Sidebar/Logo.vue        |    2 
 src/utils/jitsi.js                            |    2 
 src/views/login/index.vue                     |    2 
 package.json                                  |    1 
 src/views/meeting/list.vue                    |  239 +++++++++
 src/router.js                                 |   18 
 public/admin/components/echarts/jitsi_meet.js |  135 +++++
 src/utils/jitsi_meet.js                       |  137 +++++
 11 files changed, 1,354 insertions(+), 142 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 0650a23..55debe8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,6 +9,7 @@
             "version": "3.9.0",
             "license": "AGPL-3.0",
             "dependencies": {
+                "@lyno/lib-jitsi-meet": "^2.6726.2",
                 "axios": "^0.19.2",
                 "clipboard": "^2.0.11",
                 "codemirror": "^5.65.13",
@@ -1882,6 +1883,46 @@
                 "webpack": "^4.0.0"
             }
         },
+        "node_modules/@jitsi/js-utils": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmmirror.com/@jitsi/js-utils/-/js-utils-2.0.0.tgz",
+            "integrity": "sha512-Rk1JFGdXEJ5+eALVRTMohfn3pdMDQqlCJQEkCMLXKlCpEo+JhsOrB4KzlPo1rV9U8PnRfrf0j5N9uf/0C2a8Gw==",
+            "dependencies": {
+                "bowser": "2.7.0",
+                "js-md5": "0.7.3"
+            }
+        },
+        "node_modules/@jitsi/logger": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmmirror.com/@jitsi/logger/-/logger-2.0.0.tgz",
+            "integrity": "sha512-QZE0NpI/GKRdZK0vhuyFYWr4XkCz4slihkSfy6RTszjj/YEHZKIV7yGJo6Hbs3kYI2h5v7apoy+h2WCOMumPJw=="
+        },
+        "node_modules/@jitsi/sdp-interop": {
+            "version": "1.0.5",
+            "resolved": "git+ssh://git@github.com/jitsi/sdp-interop.git#4669790bb9020cc8f10c1d1f3823c26b08497547",
+            "integrity": "sha512-4nqEqJWyRFjHM/riI0DQRNx+mgx277iK0r5LhwVAHDZDBYbLN54vYcfZ6JepcmygQiixa8jet/gLJnikdH9wzQ==",
+            "license": "Apache-2.0",
+            "dependencies": {
+                "lodash.clonedeep": "4.5.0",
+                "sdp-transform": "2.14.1"
+            }
+        },
+        "node_modules/@jitsi/sdp-simulcast": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmmirror.com/@jitsi/sdp-simulcast/-/sdp-simulcast-0.4.0.tgz",
+            "integrity": "sha512-jXJM3/XM853UwPlxhSJx5Fc13G4158RIeTgjis3lA286Y7lp18GOR0xFlRvx/5UyhtE3qT2NzSmAwR+CpJohFw==",
+            "dependencies": {
+                "sdp-transform": "2.3.0"
+            }
+        },
+        "node_modules/@jitsi/sdp-simulcast/node_modules/sdp-transform": {
+            "version": "2.3.0",
+            "resolved": "https://registry.npmmirror.com/sdp-transform/-/sdp-transform-2.3.0.tgz",
+            "integrity": "sha512-zR0e9ciWFezeaKLLpWCrOCiYmGIQN9jfO5Ayfs7m5k2/g9b2MEEIvQ/TTmymm167zozTNYSQoLGKDihMoTWkkw==",
+            "bin": {
+                "sdp-verify": "checker.js"
+            }
+        },
         "node_modules/@jridgewell/gen-mapping": {
             "version": "0.3.3",
             "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
@@ -1935,6 +1976,45 @@
             "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
             "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
             "dev": true
+        },
+        "node_modules/@lyno/lib-jitsi-meet": {
+            "version": "2.6726.2",
+            "resolved": "https://registry.npmmirror.com/@lyno/lib-jitsi-meet/-/lib-jitsi-meet-2.6726.2.tgz",
+            "integrity": "sha512-cTrKBgy4ZHD6vyFTOAOx5ylyzjWs3ft6MLhmchu9zRq7uLr8omD4lE2fmSfoyoSqMjFc/3sU9XLYXiJ21hqQuw==",
+            "deprecated": "Package moved to @solyd/lib-jitsi-meet",
+            "dependencies": {
+                "@jitsi/js-utils": "2.0.0",
+                "@jitsi/logger": "2.0.0",
+                "@jitsi/sdp-interop": "github:jitsi/sdp-interop#4669790bb9020cc8f10c1d1f3823c26b08497547",
+                "@jitsi/sdp-simulcast": "0.4.0",
+                "async": "3.2.2",
+                "base64-js": "1.5.1",
+                "current-executing-script": "0.1.3",
+                "jquery": "3.6.0",
+                "lodash.clonedeep": "4.5.0",
+                "lodash.debounce": "4.0.8",
+                "lodash.isequal": "4.5.0",
+                "promise.allsettled": "1.0.5",
+                "sdp-transform": "2.14.1",
+                "strophe.js": "1.4.2",
+                "strophejs-plugin-disco": "0.0.2",
+                "strophejs-plugin-stream-management": "github:jitsi/strophejs-plugin-stream-management#001cf02bef2357234e1ac5d163611b4d60bf2b6a",
+                "uuid": "8.3.2",
+                "webrtc-adapter": "8.1.0"
+            }
+        },
+        "node_modules/@lyno/lib-jitsi-meet/node_modules/async": {
+            "version": "3.2.2",
+            "resolved": "https://registry.npmmirror.com/async/-/async-3.2.2.tgz",
+            "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
+        },
+        "node_modules/@lyno/lib-jitsi-meet/node_modules/uuid": {
+            "version": "8.3.2",
+            "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
+            "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+            "bin": {
+                "uuid": "dist/bin/uuid"
+            }
         },
         "node_modules/@mrmlnc/readdir-enhanced": {
             "version": "2.2.1",
@@ -2683,25 +2763,67 @@
                 "strip-ansi": "^6.0.0"
             }
         },
-        "node_modules/@vue/compiler-sfc": {
-            "version": "2.7.14",
-            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
-            "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+        "node_modules/@vue/compiler-core": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+            "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
             "dependencies": {
-                "@babel/parser": "^7.18.4",
-                "postcss": "^8.4.14",
-                "source-map": "^0.6.1"
+                "@babel/parser": "^7.21.3",
+                "@vue/shared": "3.3.4",
+                "estree-walker": "^2.0.2",
+                "source-map-js": "^1.0.2"
+            }
+        },
+        "node_modules/@vue/compiler-dom": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+            "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-core": "3.3.4",
+                "@vue/shared": "3.3.4"
+            }
+        },
+        "node_modules/@vue/compiler-sfc": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+            "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "dependencies": {
+                "@babel/parser": "^7.20.15",
+                "@vue/compiler-core": "3.3.4",
+                "@vue/compiler-dom": "3.3.4",
+                "@vue/compiler-ssr": "3.3.4",
+                "@vue/reactivity-transform": "3.3.4",
+                "@vue/shared": "3.3.4",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.30.0",
+                "postcss": "^8.1.10",
+                "source-map-js": "^1.0.2"
             }
         },
         "node_modules/@vue/compiler-sfc/node_modules/picocolors": {
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
-            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true
         },
         "node_modules/@vue/compiler-sfc/node_modules/postcss": {
             "version": "8.4.24",
             "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz",
             "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
             "dependencies": {
                 "nanoid": "^3.3.6",
                 "picocolors": "^1.0.0",
@@ -2709,6 +2831,18 @@
             },
             "engines": {
                 "node": "^10 || ^12 || >=14"
+            }
+        },
+        "node_modules/@vue/compiler-ssr": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+            "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "dependencies": {
+                "@vue/compiler-dom": "3.3.4",
+                "@vue/shared": "3.3.4"
             }
         },
         "node_modules/@vue/component-compiler-utils": {
@@ -2777,6 +2911,29 @@
                 "html-webpack-plugin": ">=2.26.0",
                 "webpack": ">=4.0.0"
             }
+        },
+        "node_modules/@vue/reactivity-transform": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+            "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "dependencies": {
+                "@babel/parser": "^7.20.15",
+                "@vue/compiler-core": "3.3.4",
+                "@vue/shared": "3.3.4",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.30.0"
+            }
+        },
+        "node_modules/@vue/shared": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz",
+            "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true
         },
         "node_modules/@vue/web-component-wrapper": {
             "version": "1.3.0",
@@ -2970,6 +3127,11 @@
             "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz",
             "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
             "dev": true
+        },
+        "node_modules/abab": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
+            "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
         },
         "node_modules/abbrev": {
             "version": "1.1.1",
@@ -3217,7 +3379,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
             "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "is-array-buffer": "^3.0.1"
@@ -3300,6 +3461,21 @@
                 "define-properties": "^1.1.4",
                 "es-abstract": "^1.20.4",
                 "es-shim-unscopables": "^1.0.0"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
+        "node_modules/array.prototype.map": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmmirror.com/array.prototype.map/-/array.prototype.map-1.0.5.tgz",
+            "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.1.4",
+                "es-abstract": "^1.20.4",
+                "es-array-method-boxes-properly": "^1.0.0",
+                "is-string": "^1.0.7"
             },
             "engines": {
                 "node": ">= 0.4"
@@ -3487,7 +3663,6 @@
             "version": "1.0.5",
             "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
             "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-            "dev": true,
             "engines": {
                 "node": ">= 0.4"
             }
@@ -3669,8 +3844,7 @@
         "node_modules/base64-js": {
             "version": "1.5.1",
             "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
-            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-            "dev": true
+            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
         },
         "node_modules/batch": {
             "version": "0.6.1",
@@ -3819,6 +3993,11 @@
             "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
             "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
             "dev": true
+        },
+        "node_modules/bowser": {
+            "version": "2.7.0",
+            "resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.7.0.tgz",
+            "integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w=="
         },
         "node_modules/brace-expansion": {
             "version": "1.1.11",
@@ -4141,7 +4320,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
             "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-            "dev": true,
             "dependencies": {
                 "function-bind": "^1.1.1",
                 "get-intrinsic": "^1.0.2"
@@ -5587,6 +5765,11 @@
             "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
             "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
         },
+        "node_modules/current-executing-script": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmmirror.com/current-executing-script/-/current-executing-script-0.1.3.tgz",
+            "integrity": "sha512-j1nG9I8jaHWniUxJGYkjF3jS98a/mU8tC971XJdrLXKRKSnwNgztd7pHElwdcfJwbQHvJeC9HhUz9NFE8or92g=="
+        },
         "node_modules/cyclist": {
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.2.tgz",
@@ -5852,7 +6035,6 @@
             "version": "1.2.0",
             "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz",
             "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
-            "dev": true,
             "dependencies": {
                 "has-property-descriptors": "^1.0.0",
                 "object-keys": "^1.1.1"
@@ -6354,7 +6536,6 @@
             "version": "1.21.2",
             "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.2.tgz",
             "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
-            "dev": true,
             "dependencies": {
                 "array-buffer-byte-length": "^1.0.0",
                 "available-typed-arrays": "^1.0.5",
@@ -6398,14 +6579,33 @@
         "node_modules/es-array-method-boxes-properly": {
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
-            "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
-            "dev": true
+            "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
+        },
+        "node_modules/es-get-iterator": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmmirror.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+            "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+            "dependencies": {
+                "call-bind": "^1.0.2",
+                "get-intrinsic": "^1.1.3",
+                "has-symbols": "^1.0.3",
+                "is-arguments": "^1.1.1",
+                "is-map": "^2.0.2",
+                "is-set": "^2.0.2",
+                "is-string": "^1.0.7",
+                "isarray": "^2.0.5",
+                "stop-iteration-iterator": "^1.0.0"
+            }
+        },
+        "node_modules/es-get-iterator/node_modules/isarray": {
+            "version": "2.0.5",
+            "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
         },
         "node_modules/es-set-tostringtag": {
             "version": "2.0.1",
             "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
             "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
-            "dev": true,
             "dependencies": {
                 "get-intrinsic": "^1.1.3",
                 "has": "^1.0.3",
@@ -6428,7 +6628,6 @@
             "version": "1.2.1",
             "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
             "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-            "dev": true,
             "dependencies": {
                 "is-callable": "^1.1.4",
                 "is-date-object": "^1.0.1",
@@ -7073,6 +7272,14 @@
             "engines": {
                 "node": ">=4.0"
             }
+        },
+        "node_modules/estree-walker": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+            "dev": true,
+            "optional": true,
+            "peer": true
         },
         "node_modules/esutils": {
             "version": "2.0.3",
@@ -7771,7 +7978,6 @@
             "version": "0.3.3",
             "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz",
             "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
-            "dev": true,
             "dependencies": {
                 "is-callable": "^1.1.3"
             }
@@ -7917,14 +8123,12 @@
         "node_modules/function-bind": {
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-            "dev": true
+            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
         },
         "node_modules/function.prototype.name": {
             "version": "1.1.5",
             "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
             "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.3",
@@ -7944,8 +8148,7 @@
         "node_modules/functions-have-names": {
             "version": "1.2.3",
             "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz",
-            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-            "dev": true
+            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
         },
         "node_modules/fuse.js": {
             "version": "6.6.2",
@@ -8052,7 +8255,6 @@
             "version": "1.2.1",
             "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
             "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
-            "dev": true,
             "dependencies": {
                 "function-bind": "^1.1.1",
                 "has": "^1.0.3",
@@ -8085,7 +8287,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
             "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.1.1"
@@ -8170,7 +8371,6 @@
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz",
             "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
-            "dev": true,
             "dependencies": {
                 "define-properties": "^1.1.3"
             },
@@ -8252,7 +8452,6 @@
             "version": "1.0.1",
             "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
             "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-            "dev": true,
             "dependencies": {
                 "get-intrinsic": "^1.1.3"
             }
@@ -8318,7 +8517,6 @@
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
             "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "dev": true,
             "dependencies": {
                 "function-bind": "^1.1.1"
             },
@@ -8350,8 +8548,7 @@
         "node_modules/has-bigints": {
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz",
-            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-            "dev": true
+            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
         },
         "node_modules/has-color": {
             "version": "0.1.7",
@@ -8374,7 +8571,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
             "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-            "dev": true,
             "dependencies": {
                 "get-intrinsic": "^1.1.1"
             }
@@ -8383,7 +8579,6 @@
             "version": "1.0.1",
             "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
             "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
-            "dev": true,
             "engines": {
                 "node": ">= 0.4"
             }
@@ -8392,7 +8587,6 @@
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
             "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-            "dev": true,
             "engines": {
                 "node": ">= 0.4"
             }
@@ -8401,7 +8595,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
             "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-            "dev": true,
             "dependencies": {
                 "has-symbols": "^1.0.2"
             },
@@ -9204,7 +9397,6 @@
             "version": "1.0.5",
             "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz",
             "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
-            "dev": true,
             "dependencies": {
                 "get-intrinsic": "^1.2.0",
                 "has": "^1.0.3",
@@ -9263,7 +9455,6 @@
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz",
             "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -9276,7 +9467,6 @@
             "version": "3.0.2",
             "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
             "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.2.0",
@@ -9293,7 +9483,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz",
             "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-            "dev": true,
             "dependencies": {
                 "has-bigints": "^1.0.1"
             }
@@ -9315,7 +9504,6 @@
             "version": "1.1.2",
             "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
             "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -9334,7 +9522,6 @@
             "version": "1.2.7",
             "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz",
             "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-            "dev": true,
             "engines": {
                 "node": ">= 0.4"
             }
@@ -9390,7 +9577,6 @@
             "version": "1.0.5",
             "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz",
             "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-            "dev": true,
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -9475,11 +9661,15 @@
                 "node": ">=0.10.0"
             }
         },
+        "node_modules/is-map": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/is-map/-/is-map-2.0.2.tgz",
+            "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg=="
+        },
         "node_modules/is-negative-zero": {
             "version": "2.0.2",
             "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
             "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-            "dev": true,
             "engines": {
                 "node": ">= 0.4"
             }
@@ -9500,7 +9690,6 @@
             "version": "1.0.7",
             "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz",
             "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-            "dev": true,
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -9587,7 +9776,6 @@
             "version": "1.1.4",
             "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz",
             "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -9602,11 +9790,15 @@
             "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
             "dev": true
         },
+        "node_modules/is-set": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/is-set/-/is-set-2.0.2.tgz",
+            "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g=="
+        },
         "node_modules/is-shared-array-buffer": {
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
             "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2"
             }
@@ -9624,7 +9816,6 @@
             "version": "1.0.7",
             "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz",
             "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-            "dev": true,
             "dependencies": {
                 "has-tostringtag": "^1.0.0"
             },
@@ -9636,7 +9827,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz",
             "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-            "dev": true,
             "dependencies": {
                 "has-symbols": "^1.0.2"
             },
@@ -9648,7 +9838,6 @@
             "version": "1.1.10",
             "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.10.tgz",
             "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
-            "dev": true,
             "dependencies": {
                 "available-typed-arrays": "^1.0.5",
                 "call-bind": "^1.0.2",
@@ -9670,7 +9859,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz",
             "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2"
             }
@@ -9722,11 +9910,30 @@
             "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
             "dev": true
         },
+        "node_modules/iterate-iterator": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz",
+            "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw=="
+        },
+        "node_modules/iterate-value": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/iterate-value/-/iterate-value-1.0.2.tgz",
+            "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
+            "dependencies": {
+                "es-get-iterator": "^1.0.2",
+                "iterate-iterator": "^1.0.1"
+            }
+        },
         "node_modules/javascript-stringify": {
             "version": "2.1.0",
             "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
             "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
             "dev": true
+        },
+        "node_modules/jquery": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz",
+            "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
         },
         "node_modules/js-base64": {
             "version": "2.6.4",
@@ -9738,6 +9945,11 @@
             "version": "2.2.0",
             "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-2.2.0.tgz",
             "integrity": "sha512-7YAJP/LPE/MhDjHIdfIiT665HUSumCwPN2hAmO6OJZ8V3o1mtz2HeQ8BKetEjkh+3nqGxYaq1vPMViUR8kaOXw=="
+        },
+        "node_modules/js-md5": {
+            "version": "0.7.3",
+            "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz",
+            "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
         },
         "node_modules/js-message": {
             "version": "1.0.7",
@@ -10069,17 +10281,26 @@
             "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
             "dev": true
         },
+        "node_modules/lodash.clonedeep": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+            "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+        },
         "node_modules/lodash.debounce": {
             "version": "4.0.8",
             "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
-            "dev": true
+            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
         },
         "node_modules/lodash.defaultsdeep": {
             "version": "4.6.1",
             "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
             "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
             "dev": true
+        },
+        "node_modules/lodash.isequal": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+            "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
         },
         "node_modules/lodash.kebabcase": {
             "version": "4.1.1",
@@ -10145,6 +10366,20 @@
             "dev": true,
             "dependencies": {
                 "yallist": "^3.0.2"
+            }
+        },
+        "node_modules/magic-string": {
+            "version": "0.30.0",
+            "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.0.tgz",
+            "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "dependencies": {
+                "@jridgewell/sourcemap-codec": "^1.4.13"
+            },
+            "engines": {
+                "node": ">=12"
             }
         },
         "node_modules/make-dir": {
@@ -11338,8 +11573,7 @@
         "node_modules/object-inspect": {
             "version": "1.12.3",
             "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz",
-            "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
-            "dev": true
+            "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
         },
         "node_modules/object-is": {
             "version": "1.1.5",
@@ -11358,7 +11592,6 @@
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
             "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-            "dev": true,
             "engines": {
                 "node": ">= 0.4"
             }
@@ -11379,7 +11612,6 @@
             "version": "4.1.4",
             "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz",
             "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -12913,6 +13145,22 @@
             "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
             "dev": true
         },
+        "node_modules/promise.allsettled": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmmirror.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz",
+            "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==",
+            "dependencies": {
+                "array.prototype.map": "^1.0.4",
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.1.3",
+                "es-abstract": "^1.19.1",
+                "get-intrinsic": "^1.1.1",
+                "iterate-value": "^1.0.2"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/proxy-addr": {
             "version": "2.0.7",
             "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -13297,7 +13545,6 @@
             "version": "1.5.0",
             "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
             "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.2.0",
@@ -13661,7 +13908,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
             "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.1.3",
@@ -13985,6 +14231,19 @@
                 "node": ">=0.8.0"
             }
         },
+        "node_modules/sdp": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmmirror.com/sdp/-/sdp-3.2.0.tgz",
+            "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw=="
+        },
+        "node_modules/sdp-transform": {
+            "version": "2.14.1",
+            "resolved": "https://registry.npmmirror.com/sdp-transform/-/sdp-transform-2.14.1.tgz",
+            "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw==",
+            "bin": {
+                "sdp-verify": "checker.js"
+            }
+        },
         "node_modules/select": {
             "version": "1.1.2",
             "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
@@ -14270,7 +14529,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
             "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.0",
                 "get-intrinsic": "^1.0.2",
@@ -14915,6 +15173,17 @@
                 "readable-stream": "^2.0.1"
             }
         },
+        "node_modules/stop-iteration-iterator": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+            "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+            "dependencies": {
+                "internal-slot": "^1.0.4"
+            },
+            "engines": {
+                "node": ">= 0.4"
+            }
+        },
         "node_modules/stream-browserify": {
             "version": "2.0.2",
             "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz",
@@ -14989,7 +15258,6 @@
             "version": "1.2.7",
             "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
             "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -15003,7 +15271,6 @@
             "version": "1.0.6",
             "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
             "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -15014,7 +15281,6 @@
             "version": "1.0.6",
             "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
             "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -15079,6 +15345,56 @@
             "dev": true,
             "engines": {
                 "node": ">=0.10.0"
+            }
+        },
+        "node_modules/strophe.js": {
+            "version": "1.4.2",
+            "resolved": "https://registry.npmmirror.com/strophe.js/-/strophe.js-1.4.2.tgz",
+            "integrity": "sha512-jkyZQCZLm7Zgmra0zJKxpHPNIUncYj/e/eYfgxFoc5gwrWeHWigNBs0q7wtqhCiqG6Qxcf22PUpcyBq8cK+9ew==",
+            "dependencies": {
+                "abab": "^2.0.3"
+            },
+            "optionalDependencies": {
+                "ws": "^7.0.0",
+                "xmldom": "0.5.0"
+            }
+        },
+        "node_modules/strophe.js/node_modules/ws": {
+            "version": "7.5.9",
+            "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz",
+            "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+            "optional": true,
+            "engines": {
+                "node": ">=8.3.0"
+            },
+            "peerDependencies": {
+                "bufferutil": "^4.0.1",
+                "utf-8-validate": "^5.0.2"
+            },
+            "peerDependenciesMeta": {
+                "bufferutil": {
+                    "optional": true
+                },
+                "utf-8-validate": {
+                    "optional": true
+                }
+            }
+        },
+        "node_modules/strophejs-plugin-disco": {
+            "version": "0.0.2",
+            "resolved": "https://registry.npmmirror.com/strophejs-plugin-disco/-/strophejs-plugin-disco-0.0.2.tgz",
+            "integrity": "sha512-T9pJFzn1ZUqZ/we9+OvI5pFdrjeb4IBMbEjK+ZWEZV036wEl8l8GOtF8AJ3sIqOMtdIiFLdFu99JiGWd7yapAQ==",
+            "peerDependencies": {
+                "strophe.js": "^1.2.12"
+            }
+        },
+        "node_modules/strophejs-plugin-stream-management": {
+            "version": "1.0.0",
+            "resolved": "git+ssh://git@github.com/jitsi/strophejs-plugin-stream-management.git#001cf02bef2357234e1ac5d163611b4d60bf2b6a",
+            "integrity": "sha512-ijQSXeEEmGl4dfLx8RcQDCvzg1UPtEArowaCHZr8ITdBOH/X6JxxGzy/DVeMLVSvSy73tH7pGK6iPjBqQajwdQ==",
+            "license": "MIT",
+            "peerDependencies": {
+                "strophe.js": ">=1.3.4"
             }
         },
         "node_modules/stylehacks": {
@@ -16163,7 +16479,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz",
             "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "for-each": "^0.3.3",
@@ -16202,7 +16517,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
             "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-            "dev": true,
             "dependencies": {
                 "call-bind": "^1.0.2",
                 "has-bigints": "^1.0.2",
@@ -16914,6 +17228,34 @@
             "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
             "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
             "dev": true
+        },
+        "node_modules/vue/node_modules/@vue/compiler-sfc": {
+            "version": "2.7.14",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+            "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+            "dependencies": {
+                "@babel/parser": "^7.18.4",
+                "postcss": "^8.4.14",
+                "source-map": "^0.6.1"
+            }
+        },
+        "node_modules/vue/node_modules/picocolors": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+            "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+        },
+        "node_modules/vue/node_modules/postcss": {
+            "version": "8.4.24",
+            "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz",
+            "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+            "dependencies": {
+                "nanoid": "^3.3.6",
+                "picocolors": "^1.0.0",
+                "source-map-js": "^1.0.2"
+            },
+            "engines": {
+                "node": "^10 || ^12 || >=14"
+            }
         },
         "node_modules/vuex": {
             "version": "3.6.2",
@@ -17689,6 +18031,18 @@
                 "node": ">= 4"
             }
         },
+        "node_modules/webrtc-adapter": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-8.1.0.tgz",
+            "integrity": "sha512-I+y/LWBiGYPVhIb8Ww7nyoNWhrCYENeGoRvZuyytLn/h+ahDBgItvuIfMdzT+xhOnjLIMVkOykttGJPv1dr6kA==",
+            "dependencies": {
+                "sdp": "^3.0.2"
+            },
+            "engines": {
+                "node": ">=6.0.0",
+                "npm": ">=3.10.0"
+            }
+        },
         "node_modules/websocket-driver": {
             "version": "0.7.4",
             "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -17728,7 +18082,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
             "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-            "dev": true,
             "dependencies": {
                 "is-bigint": "^1.0.1",
                 "is-boolean-object": "^1.1.0",
@@ -17747,7 +18100,6 @@
             "version": "1.1.9",
             "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.9.tgz",
             "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
-            "dev": true,
             "dependencies": {
                 "available-typed-arrays": "^1.0.5",
                 "call-bind": "^1.0.2",
@@ -17892,6 +18244,15 @@
             },
             "engines": {
                 "node": ">=0.8"
+            }
+        },
+        "node_modules/xmldom": {
+            "version": "0.5.0",
+            "resolved": "https://registry.npmmirror.com/xmldom/-/xmldom-0.5.0.tgz",
+            "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==",
+            "optional": true,
+            "engines": {
+                "node": ">=10.0.0"
             }
         },
         "node_modules/xtend": {
@@ -19382,6 +19743,44 @@
                 "postcss": "^7.0.0"
             }
         },
+        "@jitsi/js-utils": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmmirror.com/@jitsi/js-utils/-/js-utils-2.0.0.tgz",
+            "integrity": "sha512-Rk1JFGdXEJ5+eALVRTMohfn3pdMDQqlCJQEkCMLXKlCpEo+JhsOrB4KzlPo1rV9U8PnRfrf0j5N9uf/0C2a8Gw==",
+            "requires": {
+                "bowser": "2.7.0",
+                "js-md5": "0.7.3"
+            }
+        },
+        "@jitsi/logger": {
+            "version": "2.0.0",
+            "resolved": "https://registry.npmmirror.com/@jitsi/logger/-/logger-2.0.0.tgz",
+            "integrity": "sha512-QZE0NpI/GKRdZK0vhuyFYWr4XkCz4slihkSfy6RTszjj/YEHZKIV7yGJo6Hbs3kYI2h5v7apoy+h2WCOMumPJw=="
+        },
+        "@jitsi/sdp-interop": {
+            "version": "git+ssh://git@github.com/jitsi/sdp-interop.git#4669790bb9020cc8f10c1d1f3823c26b08497547",
+            "integrity": "sha512-4nqEqJWyRFjHM/riI0DQRNx+mgx277iK0r5LhwVAHDZDBYbLN54vYcfZ6JepcmygQiixa8jet/gLJnikdH9wzQ==",
+            "from": "@jitsi/sdp-interop@github:jitsi/sdp-interop#4669790bb9020cc8f10c1d1f3823c26b08497547",
+            "requires": {
+                "lodash.clonedeep": "4.5.0",
+                "sdp-transform": "2.14.1"
+            }
+        },
+        "@jitsi/sdp-simulcast": {
+            "version": "0.4.0",
+            "resolved": "https://registry.npmmirror.com/@jitsi/sdp-simulcast/-/sdp-simulcast-0.4.0.tgz",
+            "integrity": "sha512-jXJM3/XM853UwPlxhSJx5Fc13G4158RIeTgjis3lA286Y7lp18GOR0xFlRvx/5UyhtE3qT2NzSmAwR+CpJohFw==",
+            "requires": {
+                "sdp-transform": "2.3.0"
+            },
+            "dependencies": {
+                "sdp-transform": {
+                    "version": "2.3.0",
+                    "resolved": "https://registry.npmmirror.com/sdp-transform/-/sdp-transform-2.3.0.tgz",
+                    "integrity": "sha512-zR0e9ciWFezeaKLLpWCrOCiYmGIQN9jfO5Ayfs7m5k2/g9b2MEEIvQ/TTmymm167zozTNYSQoLGKDihMoTWkkw=="
+                }
+            }
+        },
         "@jridgewell/gen-mapping": {
             "version": "0.3.3",
             "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
@@ -19426,6 +19825,43 @@
                     "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
                     "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
                     "dev": true
+                }
+            }
+        },
+        "@lyno/lib-jitsi-meet": {
+            "version": "2.6726.2",
+            "resolved": "https://registry.npmmirror.com/@lyno/lib-jitsi-meet/-/lib-jitsi-meet-2.6726.2.tgz",
+            "integrity": "sha512-cTrKBgy4ZHD6vyFTOAOx5ylyzjWs3ft6MLhmchu9zRq7uLr8omD4lE2fmSfoyoSqMjFc/3sU9XLYXiJ21hqQuw==",
+            "requires": {
+                "@jitsi/js-utils": "2.0.0",
+                "@jitsi/logger": "2.0.0",
+                "@jitsi/sdp-interop": "github:jitsi/sdp-interop#4669790bb9020cc8f10c1d1f3823c26b08497547",
+                "@jitsi/sdp-simulcast": "0.4.0",
+                "async": "3.2.2",
+                "base64-js": "1.5.1",
+                "current-executing-script": "0.1.3",
+                "jquery": "3.6.0",
+                "lodash.clonedeep": "4.5.0",
+                "lodash.debounce": "4.0.8",
+                "lodash.isequal": "4.5.0",
+                "promise.allsettled": "1.0.5",
+                "sdp-transform": "2.14.1",
+                "strophe.js": "1.4.2",
+                "strophejs-plugin-disco": "0.0.2",
+                "strophejs-plugin-stream-management": "github:jitsi/strophejs-plugin-stream-management#001cf02bef2357234e1ac5d163611b4d60bf2b6a",
+                "uuid": "8.3.2",
+                "webrtc-adapter": "8.1.0"
+            },
+            "dependencies": {
+                "async": {
+                    "version": "3.2.2",
+                    "resolved": "https://registry.npmmirror.com/async/-/async-3.2.2.tgz",
+                    "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
+                },
+                "uuid": {
+                    "version": "8.3.2",
+                    "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz",
+                    "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
                 }
             }
         },
@@ -20051,31 +20487,85 @@
                 "strip-ansi": "^6.0.0"
             }
         },
-        "@vue/compiler-sfc": {
-            "version": "2.7.14",
-            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
-            "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+        "@vue/compiler-core": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+            "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
             "requires": {
-                "@babel/parser": "^7.18.4",
-                "postcss": "^8.4.14",
-                "source-map": "^0.6.1"
+                "@babel/parser": "^7.21.3",
+                "@vue/shared": "3.3.4",
+                "estree-walker": "^2.0.2",
+                "source-map-js": "^1.0.2"
+            }
+        },
+        "@vue/compiler-dom": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+            "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "requires": {
+                "@vue/compiler-core": "3.3.4",
+                "@vue/shared": "3.3.4"
+            }
+        },
+        "@vue/compiler-sfc": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+            "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "requires": {
+                "@babel/parser": "^7.20.15",
+                "@vue/compiler-core": "3.3.4",
+                "@vue/compiler-dom": "3.3.4",
+                "@vue/compiler-ssr": "3.3.4",
+                "@vue/reactivity-transform": "3.3.4",
+                "@vue/shared": "3.3.4",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.30.0",
+                "postcss": "^8.1.10",
+                "source-map-js": "^1.0.2"
             },
             "dependencies": {
                 "picocolors": {
                     "version": "1.0.0",
                     "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
-                    "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+                    "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+                    "dev": true,
+                    "optional": true,
+                    "peer": true
                 },
                 "postcss": {
                     "version": "8.4.24",
                     "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz",
                     "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+                    "dev": true,
+                    "optional": true,
+                    "peer": true,
                     "requires": {
                         "nanoid": "^3.3.6",
                         "picocolors": "^1.0.0",
                         "source-map-js": "^1.0.2"
                     }
                 }
+            }
+        },
+        "@vue/compiler-ssr": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+            "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "requires": {
+                "@vue/compiler-dom": "3.3.4",
+                "@vue/shared": "3.3.4"
             }
         },
         "@vue/component-compiler-utils": {
@@ -20138,6 +20628,29 @@
             "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==",
             "dev": true,
             "requires": {}
+        },
+        "@vue/reactivity-transform": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+            "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "requires": {
+                "@babel/parser": "^7.20.15",
+                "@vue/compiler-core": "3.3.4",
+                "@vue/shared": "3.3.4",
+                "estree-walker": "^2.0.2",
+                "magic-string": "^0.30.0"
+            }
+        },
+        "@vue/shared": {
+            "version": "3.3.4",
+            "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.3.4.tgz",
+            "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true
         },
         "@vue/web-component-wrapper": {
             "version": "1.3.0",
@@ -20332,6 +20845,11 @@
             "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
             "dev": true
         },
+        "abab": {
+            "version": "2.0.6",
+            "resolved": "https://registry.npmmirror.com/abab/-/abab-2.0.6.tgz",
+            "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
+        },
         "abbrev": {
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz",
@@ -20521,7 +21039,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
             "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "is-array-buffer": "^3.0.1"
@@ -20589,6 +21106,18 @@
                 "define-properties": "^1.1.4",
                 "es-abstract": "^1.20.4",
                 "es-shim-unscopables": "^1.0.0"
+            }
+        },
+        "array.prototype.map": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmmirror.com/array.prototype.map/-/array.prototype.map-1.0.5.tgz",
+            "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==",
+            "requires": {
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.1.4",
+                "es-abstract": "^1.20.4",
+                "es-array-method-boxes-properly": "^1.0.0",
+                "is-string": "^1.0.7"
             }
         },
         "array.prototype.reduce": {
@@ -20749,8 +21278,7 @@
         "available-typed-arrays": {
             "version": "1.0.5",
             "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
-            "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
-            "dev": true
+            "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
         },
         "aws-sign2": {
             "version": "0.7.0",
@@ -20898,8 +21426,7 @@
         "base64-js": {
             "version": "1.5.1",
             "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz",
-            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
-            "dev": true
+            "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
         },
         "batch": {
             "version": "0.6.1",
@@ -21036,6 +21563,11 @@
             "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz",
             "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
             "dev": true
+        },
+        "bowser": {
+            "version": "2.7.0",
+            "resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.7.0.tgz",
+            "integrity": "sha512-aIlMvstvu8x+34KEiOHD3AsBgdrzg6sxALYiukOWhFvGMbQI6TRP/iY0LMhUrHs56aD6P1G0Z7h45PUJaa5m9w=="
         },
         "brace-expansion": {
             "version": "1.1.11",
@@ -21330,7 +21862,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
             "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
-            "dev": true,
             "requires": {
                 "function-bind": "^1.1.1",
                 "get-intrinsic": "^1.0.2"
@@ -22521,6 +23052,11 @@
             "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz",
             "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
         },
+        "current-executing-script": {
+            "version": "0.1.3",
+            "resolved": "https://registry.npmmirror.com/current-executing-script/-/current-executing-script-0.1.3.tgz",
+            "integrity": "sha512-j1nG9I8jaHWniUxJGYkjF3jS98a/mU8tC971XJdrLXKRKSnwNgztd7pHElwdcfJwbQHvJeC9HhUz9NFE8or92g=="
+        },
         "cyclist": {
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.2.tgz",
@@ -22727,7 +23263,6 @@
             "version": "1.2.0",
             "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.0.tgz",
             "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
-            "dev": true,
             "requires": {
                 "has-property-descriptors": "^1.0.0",
                 "object-keys": "^1.1.1"
@@ -23167,7 +23702,6 @@
             "version": "1.21.2",
             "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.21.2.tgz",
             "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
-            "dev": true,
             "requires": {
                 "array-buffer-byte-length": "^1.0.0",
                 "available-typed-arrays": "^1.0.5",
@@ -23208,14 +23742,35 @@
         "es-array-method-boxes-properly": {
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
-            "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
-            "dev": true
+            "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA=="
+        },
+        "es-get-iterator": {
+            "version": "1.1.3",
+            "resolved": "https://registry.npmmirror.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+            "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+            "requires": {
+                "call-bind": "^1.0.2",
+                "get-intrinsic": "^1.1.3",
+                "has-symbols": "^1.0.3",
+                "is-arguments": "^1.1.1",
+                "is-map": "^2.0.2",
+                "is-set": "^2.0.2",
+                "is-string": "^1.0.7",
+                "isarray": "^2.0.5",
+                "stop-iteration-iterator": "^1.0.0"
+            },
+            "dependencies": {
+                "isarray": {
+                    "version": "2.0.5",
+                    "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz",
+                    "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
+                }
+            }
         },
         "es-set-tostringtag": {
             "version": "2.0.1",
             "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
             "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
-            "dev": true,
             "requires": {
                 "get-intrinsic": "^1.1.3",
                 "has": "^1.0.3",
@@ -23235,7 +23790,6 @@
             "version": "1.2.1",
             "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
             "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-            "dev": true,
             "requires": {
                 "is-callable": "^1.1.4",
                 "is-date-object": "^1.0.1",
@@ -23734,6 +24288,14 @@
             "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz",
             "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
             "dev": true
+        },
+        "estree-walker": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+            "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+            "dev": true,
+            "optional": true,
+            "peer": true
         },
         "esutils": {
             "version": "2.0.3",
@@ -24323,7 +24885,6 @@
             "version": "0.3.3",
             "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz",
             "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
-            "dev": true,
             "requires": {
                 "is-callable": "^1.1.3"
             }
@@ -24435,14 +24996,12 @@
         "function-bind": {
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
-            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-            "dev": true
+            "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
         },
         "function.prototype.name": {
             "version": "1.1.5",
             "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
             "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.3",
@@ -24459,8 +25018,7 @@
         "functions-have-names": {
             "version": "1.2.3",
             "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz",
-            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-            "dev": true
+            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
         },
         "fuse.js": {
             "version": "6.6.2",
@@ -24545,7 +25103,6 @@
             "version": "1.2.1",
             "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
             "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
-            "dev": true,
             "requires": {
                 "function-bind": "^1.1.1",
                 "has": "^1.0.3",
@@ -24572,7 +25129,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
             "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.1.1"
@@ -24644,7 +25200,6 @@
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz",
             "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
-            "dev": true,
             "requires": {
                 "define-properties": "^1.1.3"
             }
@@ -24713,7 +25268,6 @@
             "version": "1.0.1",
             "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz",
             "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-            "dev": true,
             "requires": {
                 "get-intrinsic": "^1.1.3"
             }
@@ -24766,7 +25320,6 @@
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
             "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-            "dev": true,
             "requires": {
                 "function-bind": "^1.1.1"
             }
@@ -24791,8 +25344,7 @@
         "has-bigints": {
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz",
-            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-            "dev": true
+            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ=="
         },
         "has-color": {
             "version": "0.1.7",
@@ -24809,7 +25361,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
             "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
-            "dev": true,
             "requires": {
                 "get-intrinsic": "^1.1.1"
             }
@@ -24817,20 +25368,17 @@
         "has-proto": {
             "version": "1.0.1",
             "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz",
-            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
-            "dev": true
+            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
         },
         "has-symbols": {
             "version": "1.0.3",
             "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
-            "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
-            "dev": true
+            "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
         },
         "has-tostringtag": {
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
             "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
-            "dev": true,
             "requires": {
                 "has-symbols": "^1.0.2"
             }
@@ -25479,7 +26027,6 @@
             "version": "1.0.5",
             "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.5.tgz",
             "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
-            "dev": true,
             "requires": {
                 "get-intrinsic": "^1.2.0",
                 "has": "^1.0.3",
@@ -25523,7 +26070,6 @@
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz",
             "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -25533,7 +26079,6 @@
             "version": "3.0.2",
             "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
             "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.2.0",
@@ -25550,7 +26095,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz",
             "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-            "dev": true,
             "requires": {
                 "has-bigints": "^1.0.1"
             }
@@ -25569,7 +26113,6 @@
             "version": "1.1.2",
             "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
             "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -25584,8 +26127,7 @@
         "is-callable": {
             "version": "1.2.7",
             "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz",
-            "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
-            "dev": true
+            "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="
         },
         "is-ci": {
             "version": "1.2.1",
@@ -25632,7 +26174,6 @@
             "version": "1.0.5",
             "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz",
             "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-            "dev": true,
             "requires": {
                 "has-tostringtag": "^1.0.0"
             }
@@ -25690,11 +26231,15 @@
                 "is-extglob": "^2.1.1"
             }
         },
+        "is-map": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/is-map/-/is-map-2.0.2.tgz",
+            "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg=="
+        },
         "is-negative-zero": {
             "version": "2.0.2",
             "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
-            "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
-            "dev": true
+            "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
         },
         "is-number": {
             "version": "3.0.0",
@@ -25720,7 +26265,6 @@
             "version": "1.0.7",
             "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz",
             "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-            "dev": true,
             "requires": {
                 "has-tostringtag": "^1.0.0"
             }
@@ -25774,7 +26318,6 @@
             "version": "1.1.4",
             "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz",
             "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "has-tostringtag": "^1.0.0"
@@ -25786,11 +26329,15 @@
             "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
             "dev": true
         },
+        "is-set": {
+            "version": "2.0.2",
+            "resolved": "https://registry.npmmirror.com/is-set/-/is-set-2.0.2.tgz",
+            "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g=="
+        },
         "is-shared-array-buffer": {
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
             "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2"
             }
@@ -25805,7 +26352,6 @@
             "version": "1.0.7",
             "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz",
             "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-            "dev": true,
             "requires": {
                 "has-tostringtag": "^1.0.0"
             }
@@ -25814,7 +26360,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz",
             "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-            "dev": true,
             "requires": {
                 "has-symbols": "^1.0.2"
             }
@@ -25823,7 +26368,6 @@
             "version": "1.1.10",
             "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.10.tgz",
             "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
-            "dev": true,
             "requires": {
                 "available-typed-arrays": "^1.0.5",
                 "call-bind": "^1.0.2",
@@ -25842,7 +26386,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz",
             "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2"
             }
@@ -25885,11 +26428,30 @@
             "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
             "dev": true
         },
+        "iterate-iterator": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz",
+            "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw=="
+        },
+        "iterate-value": {
+            "version": "1.0.2",
+            "resolved": "https://registry.npmmirror.com/iterate-value/-/iterate-value-1.0.2.tgz",
+            "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
+            "requires": {
+                "es-get-iterator": "^1.0.2",
+                "iterate-iterator": "^1.0.1"
+            }
+        },
         "javascript-stringify": {
             "version": "2.1.0",
             "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz",
             "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==",
             "dev": true
+        },
+        "jquery": {
+            "version": "3.6.0",
+            "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz",
+            "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw=="
         },
         "js-base64": {
             "version": "2.6.4",
@@ -25901,6 +26463,11 @@
             "version": "2.2.0",
             "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-2.2.0.tgz",
             "integrity": "sha512-7YAJP/LPE/MhDjHIdfIiT665HUSumCwPN2hAmO6OJZ8V3o1mtz2HeQ8BKetEjkh+3nqGxYaq1vPMViUR8kaOXw=="
+        },
+        "js-md5": {
+            "version": "0.7.3",
+            "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz",
+            "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
         },
         "js-message": {
             "version": "1.0.7",
@@ -26176,17 +26743,26 @@
             "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
             "dev": true
         },
+        "lodash.clonedeep": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+            "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ=="
+        },
         "lodash.debounce": {
             "version": "4.0.8",
             "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
-            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
-            "dev": true
+            "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="
         },
         "lodash.defaultsdeep": {
             "version": "4.6.1",
             "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz",
             "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==",
             "dev": true
+        },
+        "lodash.isequal": {
+            "version": "4.5.0",
+            "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+            "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
         },
         "lodash.kebabcase": {
             "version": "4.1.1",
@@ -26246,6 +26822,17 @@
             "dev": true,
             "requires": {
                 "yallist": "^3.0.2"
+            }
+        },
+        "magic-string": {
+            "version": "0.30.0",
+            "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.0.tgz",
+            "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
+            "dev": true,
+            "optional": true,
+            "peer": true,
+            "requires": {
+                "@jridgewell/sourcemap-codec": "^1.4.13"
             }
         },
         "make-dir": {
@@ -27213,8 +27800,7 @@
         "object-inspect": {
             "version": "1.12.3",
             "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz",
-            "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
-            "dev": true
+            "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
         },
         "object-is": {
             "version": "1.1.5",
@@ -27229,8 +27815,7 @@
         "object-keys": {
             "version": "1.1.1",
             "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz",
-            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-            "dev": true
+            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
         },
         "object-visit": {
             "version": "1.0.1",
@@ -27245,7 +27830,6 @@
             "version": "4.1.4",
             "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz",
             "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -28550,6 +29134,19 @@
             "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
             "dev": true
         },
+        "promise.allsettled": {
+            "version": "1.0.5",
+            "resolved": "https://registry.npmmirror.com/promise.allsettled/-/promise.allsettled-1.0.5.tgz",
+            "integrity": "sha512-tVDqeZPoBC0SlzJHzWGZ2NKAguVq2oiYj7gbggbiTvH2itHohijTp7njOUA0aQ/nl+0lr/r6egmhoYu63UZ/pQ==",
+            "requires": {
+                "array.prototype.map": "^1.0.4",
+                "call-bind": "^1.0.2",
+                "define-properties": "^1.1.3",
+                "es-abstract": "^1.19.1",
+                "get-intrinsic": "^1.1.1",
+                "iterate-value": "^1.0.2"
+            }
+        },
         "proxy-addr": {
             "version": "2.0.7",
             "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -28880,7 +29477,6 @@
             "version": "1.5.0",
             "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz",
             "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.2.0",
@@ -29184,7 +29780,6 @@
             "version": "1.0.0",
             "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
             "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "get-intrinsic": "^1.1.3",
@@ -29440,6 +30035,16 @@
                 }
             }
         },
+        "sdp": {
+            "version": "3.2.0",
+            "resolved": "https://registry.npmmirror.com/sdp/-/sdp-3.2.0.tgz",
+            "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw=="
+        },
+        "sdp-transform": {
+            "version": "2.14.1",
+            "resolved": "https://registry.npmmirror.com/sdp-transform/-/sdp-transform-2.14.1.tgz",
+            "integrity": "sha512-RjZyX3nVwJyCuTo5tGPx+PZWkDMCg7oOLpSlhjDdZfwUoNqG1mM8nyj31IGHyaPWXhjbP7cdK3qZ2bmkJ1GzRw=="
+        },
         "select": {
             "version": "1.1.2",
             "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz",
@@ -29688,7 +30293,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
             "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.0",
                 "get-intrinsic": "^1.0.2",
@@ -30236,6 +30840,14 @@
                 "readable-stream": "^2.0.1"
             }
         },
+        "stop-iteration-iterator": {
+            "version": "1.0.0",
+            "resolved": "https://registry.npmmirror.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+            "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+            "requires": {
+                "internal-slot": "^1.0.4"
+            }
+        },
         "stream-browserify": {
             "version": "2.0.2",
             "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz",
@@ -30304,7 +30916,6 @@
             "version": "1.2.7",
             "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
             "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -30315,7 +30926,6 @@
             "version": "1.0.6",
             "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
             "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -30326,7 +30936,6 @@
             "version": "1.0.6",
             "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
             "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "define-properties": "^1.1.4",
@@ -30374,6 +30983,37 @@
             "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
             "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
             "dev": true
+        },
+        "strophe.js": {
+            "version": "1.4.2",
+            "resolved": "https://registry.npmmirror.com/strophe.js/-/strophe.js-1.4.2.tgz",
+            "integrity": "sha512-jkyZQCZLm7Zgmra0zJKxpHPNIUncYj/e/eYfgxFoc5gwrWeHWigNBs0q7wtqhCiqG6Qxcf22PUpcyBq8cK+9ew==",
+            "requires": {
+                "abab": "^2.0.3",
+                "ws": "^7.0.0",
+                "xmldom": "0.5.0"
+            },
+            "dependencies": {
+                "ws": {
+                    "version": "7.5.9",
+                    "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz",
+                    "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+                    "optional": true,
+                    "requires": {}
+                }
+            }
+        },
+        "strophejs-plugin-disco": {
+            "version": "0.0.2",
+            "resolved": "https://registry.npmmirror.com/strophejs-plugin-disco/-/strophejs-plugin-disco-0.0.2.tgz",
+            "integrity": "sha512-T9pJFzn1ZUqZ/we9+OvI5pFdrjeb4IBMbEjK+ZWEZV036wEl8l8GOtF8AJ3sIqOMtdIiFLdFu99JiGWd7yapAQ==",
+            "requires": {}
+        },
+        "strophejs-plugin-stream-management": {
+            "version": "git+ssh://git@github.com/jitsi/strophejs-plugin-stream-management.git#001cf02bef2357234e1ac5d163611b4d60bf2b6a",
+            "integrity": "sha512-ijQSXeEEmGl4dfLx8RcQDCvzg1UPtEArowaCHZr8ITdBOH/X6JxxGzy/DVeMLVSvSy73tH7pGK6iPjBqQajwdQ==",
+            "from": "strophejs-plugin-stream-management@github:jitsi/strophejs-plugin-stream-management#001cf02bef2357234e1ac5d163611b4d60bf2b6a",
+            "requires": {}
         },
         "stylehacks": {
             "version": "4.0.3",
@@ -31254,7 +31894,6 @@
             "version": "1.0.4",
             "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz",
             "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "for-each": "^0.3.3",
@@ -31289,7 +31928,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
             "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-            "dev": true,
             "requires": {
                 "call-bind": "^1.0.2",
                 "has-bigints": "^1.0.2",
@@ -31669,6 +32307,33 @@
             "requires": {
                 "@vue/compiler-sfc": "2.7.14",
                 "csstype": "^3.1.0"
+            },
+            "dependencies": {
+                "@vue/compiler-sfc": {
+                    "version": "2.7.14",
+                    "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz",
+                    "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==",
+                    "requires": {
+                        "@babel/parser": "^7.18.4",
+                        "postcss": "^8.4.14",
+                        "source-map": "^0.6.1"
+                    }
+                },
+                "picocolors": {
+                    "version": "1.0.0",
+                    "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz",
+                    "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+                },
+                "postcss": {
+                    "version": "8.4.24",
+                    "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.24.tgz",
+                    "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+                    "requires": {
+                        "nanoid": "^3.3.6",
+                        "picocolors": "^1.0.0",
+                        "source-map-js": "^1.0.2"
+                    }
+                }
             }
         },
         "vue-count-to": {
@@ -32505,6 +33170,14 @@
                 "source-map": "~0.6.1"
             }
         },
+        "webrtc-adapter": {
+            "version": "8.1.0",
+            "resolved": "https://registry.npmmirror.com/webrtc-adapter/-/webrtc-adapter-8.1.0.tgz",
+            "integrity": "sha512-I+y/LWBiGYPVhIb8Ww7nyoNWhrCYENeGoRvZuyytLn/h+ahDBgItvuIfMdzT+xhOnjLIMVkOykttGJPv1dr6kA==",
+            "requires": {
+                "sdp": "^3.0.2"
+            }
+        },
         "websocket-driver": {
             "version": "0.7.4",
             "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -32535,7 +33208,6 @@
             "version": "1.0.2",
             "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
             "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-            "dev": true,
             "requires": {
                 "is-bigint": "^1.0.1",
                 "is-boolean-object": "^1.1.0",
@@ -32554,7 +33226,6 @@
             "version": "1.1.9",
             "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.9.tgz",
             "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
-            "dev": true,
             "requires": {
                 "available-typed-arrays": "^1.0.5",
                 "call-bind": "^1.0.2",
@@ -32673,6 +33344,12 @@
                 "word": "~0.3.0"
             }
         },
+        "xmldom": {
+            "version": "0.5.0",
+            "resolved": "https://registry.npmmirror.com/xmldom/-/xmldom-0.5.0.tgz",
+            "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==",
+            "optional": true
+        },
         "xtend": {
             "version": "4.0.2",
             "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
diff --git a/package.json b/package.json
index 0341b56..6f58441 100644
--- a/package.json
+++ b/package.json
@@ -35,6 +35,7 @@
         ]
     },
     "dependencies": {
+        "@lyno/lib-jitsi-meet": "^2.6726.2",
         "axios": "^0.19.2",
         "clipboard": "^2.0.11",
         "codemirror": "^5.65.13",
diff --git a/public/admin/components/echarts/jitsi.js b/public/admin/components/echarts/jitsi.js
new file mode 100644
index 0000000..0c3d944
--- /dev/null
+++ b/public/admin/components/echarts/jitsi.js
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JitsiMeetExternalAPI=t():e.JitsiMeetExternalAPI=t()}(self,(()=>(()=>{var e={537:(e,t,n)=>{"use strict";n.d(t,{default:()=>j});var i=n(620),r=n.n(i);class s extends i{constructor(){var e,t;super(...arguments),t={},(e="_storage")in this?Object.defineProperty(this,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):this[e]=t}clear(){this._storage={}}get length(){return Object.keys(this._storage).length}getItem(e){return this._storage[e]}setItem(e,t){this._storage[e]=t}removeItem(e){delete this._storage[e]}key(e){const t=Object.keys(this._storage);if(!(t.length<=e))return t[e]}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(0===e.length)return JSON.stringify(this._storage);const t={...this._storage};return e.forEach((e=>{delete t[e]})),JSON.stringify(t)}}const o=new class extends i{constructor(){super();try{this._storage=window.localStorage,this._localStorageDisabled=!1}catch(e){}this._storage||(console.warn("Local storage is disabled."),this._storage=new s,this._localStorageDisabled=!0)}isLocalStorageDisabled(){return this._localStorageDisabled}clear(){this._storage.clear(),this.emit("changed")}get length(){return this._storage.length}getItem(e){return this._storage.getItem(e)}setItem(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this._storage.setItem(e,t),n||this.emit("changed")}removeItem(e){this._storage.removeItem(e),this.emit("changed")}key(e){return this._storage.key(e)}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(this.isLocalStorageDisabled())return this._storage.serialize(e);const t=this._storage.length,n={};for(let i=0;i<t;i++){const t=this._storage.key(i);e.includes(t)||(n[t]=this._storage.getItem(t))}return JSON.stringify(n)}};var a=n(571);const c=["__proto__","constructor","prototype"];var d;!function(e){e[e.PaymentRequired=402]="PaymentRequired"}(d||(d={}));function l(e){const t=new RegExp("^([a-z][a-z0-9\\.\\+-]*:)+","gi"),n=t.exec(e);if(n){let i=n[n.length-1].toLowerCase();"http:"!==i&&"https:"!==i&&(i="https:"),(e=e.substring(t.lastIndex)).startsWith("//")&&(e=i+e)}return e}function u(e={}){const t=[];for(const n in e)try{t.push(`${n}=${encodeURIComponent(JSON.stringify(e[n]))}`)}catch(e){console.warn(`Error encoding ${n}: ${e}`)}return t}function h(e){const t={toString:p};let n,i,r;if(e=e.replace(/\s/g,""),n=new RegExp("^([a-z][a-z0-9\\.\\+-]*:)","gi"),i=n.exec(e),i&&(t.protocol=i[1].toLowerCase(),e=e.substring(n.lastIndex)),n=new RegExp("^(//[^/?#]+)","gi"),i=n.exec(e),i){let r=i[1].substring(2);e=e.substring(n.lastIndex);const s=r.indexOf("@");-1!==s&&(r=r.substring(s+1)),t.host=r;const o=r.lastIndexOf(":");-1!==o&&(t.port=r.substring(o+1),r=r.substring(0,o)),t.hostname=r}if(n=new RegExp("^([^?#]*)","gi"),i=n.exec(e),i&&(r=i[1],e=e.substring(n.lastIndex)),r?r.startsWith("/")||(r=`/${r}`):r="/",t.pathname=r,e.startsWith("?")){let n=e.indexOf("#",1);-1===n&&(n=e.length),t.search=e.substring(0,n),e=e.substring(n)}else t.search="";return t.hash=e.startsWith("#")?e:"",t}function p(e){const{hash:t,host:n,pathname:i,protocol:r,search:s}=e||this;let o="";return r&&(o+=r),n&&(o+=`//${n}`),o+=i||"/",s&&(o+=s),t&&(o+=t),o}function g(e){let t;t=e.serverURL&&e.room?new URL(e.room,e.serverURL).toString():e.room?e.room:e.url||"";const n=h(l(t));if(!n.protocol){let t=e.protocol||e.scheme;t&&(t.endsWith(":")||(t+=":"),n.protocol=t)}let{pathname:i}=n;if(!n.host){const t=e.domain||e.host||e.hostname;if(t){const{host:e,hostname:r,pathname:s,port:o}=h(l(`org.jitsi.meet://${t}`));e&&(n.host=e,n.hostname=r,n.port=o),"/"===i&&"/"!==s&&(i=s)}}const r=e.roomName||e.room;!r||!n.pathname.endsWith("/")&&n.pathname.endsWith(`/${r}`)||(i.endsWith("/")||(i+="/"),i+=r),n.pathname=i;const{jwt:s,lang:o,release:a}=e,c=new URLSearchParams(n.search);s&&c.set("jwt",s);const{defaultLanguage:d}=e.configOverwrite||{};(o||d)&&c.set("lang",o||d),a&&c.set("release",a);const p=c.toString();p&&(n.search=`?${p}`);let{hash:g}=n;for(const t of["config","interfaceConfig","devices","userInfo","appData"]){const n=u(e[`${t}Overwrite`]||e[t]||e[`${t}Override`]);if(n.length){let e=`${t}.${n.join(`&${t}.`)}`;g.length?e=`&${e}`:g="#",g+=e}}return n.hash=g,n.toString()||void 0}const m={window:window.opener||window.parent},f="message";class v{constructor(){let{postisOptions:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.postis=function(e){var t,n=e.scope,i=e.window,r=e.windowForEventListening||window,s=e.allowedOrigin,o={},a=[],c={},d=!1,l="__ready__",u=function(e){var t;try{t=JSON.parse(e.data)}catch(e){return}if((!s||e.origin===s)&&t&&t.postis&&t.scope===n){var i=o[t.method];if(i)for(var r=0;r<i.length;r++)i[r].call(null,t.params);else c[t.method]=c[t.method]||[],c[t.method].push(t.params)}};r.addEventListener("message",u,!1);var h={listen:function(e,t){o[e]=o[e]||[],o[e].push(t);var n=c[e];if(n)for(var i=o[e],r=0;r<i.length;r++)for(var s=0;s<n.length;s++)i[r].call(null,n[s]);delete c[e]},send:function(e){var t=e.method;(d||e.method===l)&&i&&"function"==typeof i.postMessage?i.postMessage(JSON.stringify({postis:!0,scope:n,method:t,params:e.params}),"*"):a.push(e)},ready:function(e){d?e():setTimeout((function(){h.ready(e)}),50)},destroy:function(e){clearInterval(t),d=!1,r&&"function"==typeof r.removeEventListener&&r.removeEventListener("message",u),e&&e()}},p=+new Date+Math.random()+"";return t=setInterval((function(){h.send({method:l,params:p})}),50),h.listen(l,(function(e){if(e===p){clearInterval(t),d=!0;for(var n=0;n<a.length;n++)h.send(a[n]);a=[]}else h.send({method:l,params:e})})),h}({...m,...e}),this._receiveCallback=()=>{},this.postis.listen(f,(e=>this._receiveCallback(e)))}dispose(){this.postis.destroy()}send(e){this.postis.send({method:f,params:e})}setReceiveCallback(e){this._receiveCallback=e}}const y="request",_="response";class b{constructor(){let{backend:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._listeners=new Map,this._requestID=0,this._responseHandlers=new Map,this._unprocessedMessages=new Set,this.addListener=this.on,e&&this.setBackend(e)}_disposeBackend(){this._backend&&(this._backend.dispose(),this._backend=null)}_onMessageReceived(e){if(e.type===_){const t=this._responseHandlers.get(e.id);t&&(t(e),this._responseHandlers.delete(e.id))}else e.type===y?this.emit("request",e.data,((t,n)=>{this._backend.send({type:_,error:n,id:e.id,result:t})})):this.emit("event",e.data)}dispose(){this._responseHandlers.clear(),this._unprocessedMessages.clear(),this.removeAllListeners(),this._disposeBackend()}emit(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];const r=this._listeners.get(e);let s=!1;return r&&r.size&&r.forEach((e=>{s=e(...n)||s})),s||this._unprocessedMessages.add(n),s}on(e,t){let n=this._listeners.get(e);return n||(n=new Set,this._listeners.set(e,n)),n.add(t),this._unprocessedMessages.forEach((e=>{t(...e)&&this._unprocessedMessages.delete(e)})),this}removeAllListeners(e){return e?this._listeners.delete(e):this._listeners.clear(),this}removeListener(e,t){const n=this._listeners.get(e);return n&&n.delete(t),this}sendEvent(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._backend&&this._backend.send({type:"event",data:e})}sendRequest(e){if(!this._backend)return Promise.reject(new Error("No transport backend defined!"));this._requestID++;const t=this._requestID;return new Promise(((n,i)=>{this._responseHandlers.set(t,(e=>{let{error:t,result:r}=e;void 0!==r?n(r):i(void 0!==t?t:new Error("Unexpected response format!"))})),this._backend.send({type:y,data:e,id:t})}))}setBackend(e){this._disposeBackend(),this._backend=e,this._backend.setReceiveCallback(this._onMessageReceived.bind(this))}}(function(e,t=!1,n="hash"){"string"==typeof e&&(e=new URL(e));const i="search"===n?e.search:e.hash,r={},s=i?.substr(1).split("&")||[];if("hash"===n&&1===s.length){const e=s[0];if(e.startsWith("/")&&1===e.split("&").length)return r}return s.forEach((e=>{const n=e.split("="),i=n[0];if(!i||i.split(".").some((e=>c.includes(e))))return;let s;try{if(s=n[1],!t){const e=decodeURIComponent(s).replace(/\\&/,"&");s="undefined"===e?void 0:a.parse(e)}}catch(e){return void function(e,t=""){console.error(t,e),window.onerror?.(t,void 0,void 0,void 0,e)}(e,`Failed to parse URL parameter value: ${String(s)}`)}r[i]=s})),r})(window.location).jitsi_meet_external_api_id;(window.JitsiMeetJS||(window.JitsiMeetJS={}),window.JitsiMeetJS.app||(window.JitsiMeetJS.app={}),window.JitsiMeetJS.app).setExternalTransportBackend=e=>undefined.setBackend(e);var w=n(860);const L=n.n(w)().getLogger("modules/API/external/functions.js");function k(e,t){return e.sendRequest({type:"devices",name:"setDevice",device:t})}const C=["css/all.css","libs/alwaysontop.min.js"],E={addBreakoutRoom:"add-breakout-room",answerKnockingParticipant:"answer-knocking-participant",approveVideo:"approve-video",askToUnmute:"ask-to-unmute",autoAssignToBreakoutRooms:"auto-assign-to-breakout-rooms",avatarUrl:"avatar-url",cancelPrivateChat:"cancel-private-chat",closeBreakoutRoom:"close-breakout-room",displayName:"display-name",endConference:"end-conference",email:"email",grantModerator:"grant-moderator",hangup:"video-hangup",hideNotification:"hide-notification",initiatePrivateChat:"initiate-private-chat",joinBreakoutRoom:"join-breakout-room",localSubject:"local-subject",kickParticipant:"kick-participant",muteEveryone:"mute-everyone",overwriteConfig:"overwrite-config",overwriteNames:"overwrite-names",password:"password",pinParticipant:"pin-participant",rejectParticipant:"reject-participant",removeBreakoutRoom:"remove-breakout-room",resizeFilmStrip:"resize-film-strip",resizeLargeVideo:"resize-large-video",sendChatMessage:"send-chat-message",sendEndpointTextMessage:"send-endpoint-text-message",sendParticipantToRoom:"send-participant-to-room",sendTones:"send-tones",setAssumedBandwidthBps:"set-assumed-bandwidth-bps",setFollowMe:"set-follow-me",setLargeVideoParticipant:"set-large-video-participant",setMediaEncryptionKey:"set-media-encryption-key",setNoiseSuppressionEnabled:"set-noise-suppression-enabled",setParticipantVolume:"set-participant-volume",setSubtitles:"set-subtitles",setTileView:"set-tile-view",setVideoQuality:"set-video-quality",showNotification:"show-notification",startRecording:"start-recording",startShareVideo:"start-share-video",stopRecording:"stop-recording",stopShareVideo:"stop-share-video",subject:"subject",submitFeedback:"submit-feedback",toggleAudio:"toggle-audio",toggleCamera:"toggle-camera",toggleCameraMirror:"toggle-camera-mirror",toggleChat:"toggle-chat",toggleE2EE:"toggle-e2ee",toggleFilmStrip:"toggle-film-strip",toggleLobby:"toggle-lobby",toggleModeration:"toggle-moderation",toggleNoiseSuppression:"toggle-noise-suppression",toggleParticipantsPane:"toggle-participants-pane",toggleRaiseHand:"toggle-raise-hand",toggleShareScreen:"toggle-share-screen",toggleSubtitles:"toggle-subtitles",toggleTileView:"toggle-tile-view",toggleVirtualBackgroundDialog:"toggle-virtual-background",toggleVideo:"toggle-video",toggleWhiteboard:"toggle-whiteboard"},x={"avatar-changed":"avatarChanged","audio-availability-changed":"audioAvailabilityChanged","audio-mute-status-changed":"audioMuteStatusChanged","audio-or-video-sharing-toggled":"audioOrVideoSharingToggled","breakout-rooms-updated":"breakoutRoomsUpdated","browser-support":"browserSupport","camera-error":"cameraError","chat-updated":"chatUpdated","content-sharing-participants-changed":"contentSharingParticipantsChanged","data-channel-closed":"dataChannelClosed","data-channel-opened":"dataChannelOpened","device-list-changed":"deviceListChanged","display-name-change":"displayNameChange","email-change":"emailChange","error-occurred":"errorOccurred","endpoint-text-message-received":"endpointTextMessageReceived","face-landmark-detected":"faceLandmarkDetected","feedback-submitted":"feedbackSubmitted","feedback-prompt-displayed":"feedbackPromptDisplayed","filmstrip-display-changed":"filmstripDisplayChanged","incoming-message":"incomingMessage","knocking-participant":"knockingParticipant",log:"log","mic-error":"micError","moderation-participant-approved":"moderationParticipantApproved","moderation-participant-rejected":"moderationParticipantRejected","moderation-status-changed":"moderationStatusChanged","mouse-enter":"mouseEnter","mouse-leave":"mouseLeave","mouse-move":"mouseMove","notification-triggered":"notificationTriggered","outgoing-message":"outgoingMessage","p2p-status-changed":"p2pStatusChanged","participant-joined":"participantJoined","participant-kicked-out":"participantKickedOut","participant-left":"participantLeft","participant-role-changed":"participantRoleChanged","participants-pane-toggled":"participantsPaneToggled","password-required":"passwordRequired","peer-connection-failure":"peerConnectionFailure","prejoin-screen-loaded":"prejoinScreenLoaded","proxy-connection-event":"proxyConnectionEvent","raise-hand-updated":"raiseHandUpdated","recording-link-available":"recordingLinkAvailable","recording-status-changed":"recordingStatusChanged","participant-menu-button-clicked":"participantMenuButtonClick","video-ready-to-close":"readyToClose","video-conference-joined":"videoConferenceJoined","video-conference-left":"videoConferenceLeft","video-availability-changed":"videoAvailabilityChanged","video-mute-status-changed":"videoMuteStatusChanged","video-quality-changed":"videoQualityChanged","screen-sharing-status-changed":"screenSharingStatusChanged","dominant-speaker-changed":"dominantSpeakerChanged","subject-change":"subjectChange","suspend-detected":"suspendDetected","tile-view-changed":"tileViewChanged","toolbar-button-clicked":"toolbarButtonClicked","whiteboard-status-changed":"whiteboardStatusChanged"};let O=0;function R(e,t){e._numberOfParticipants+=t}function S(e){let t;return"string"==typeof e&&null!==String(e).match(/([0-9]*\.?[0-9]+)(em|pt|px|%)$/)?t=e:"number"==typeof e&&(t=`${e}px`),t}class j extends(r()){constructor(e){super();for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];const{roomName:r="",width:s="100%",height:a="100%",parentNode:c=document.body,configOverwrite:d={},interfaceConfigOverwrite:l={},jwt:u,lang:h,onload:p,invitees:m,devices:f,userInfo:y,e2eeKey:_,release:w,sandbox:L=""}=function(e){if(!e.length)return{};switch(typeof e[0]){case"string":case"undefined":{const[t,n,i,r,s,o,a,c,d]=e;return{roomName:t,width:n,height:i,parentNode:r,configOverwrite:s,interfaceConfigOverwrite:o,jwt:a,onload:c,lang:d}}case"object":return e[0];default:throw new Error("Can't parse the arguments!")}}(n),k=o.getItem("jitsiLocalStorage");this._parentNode=c,this._url=function(e){return g({...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},url:`https://${e}/#jitsi_meet_external_api_id=${O}`})}(e,{configOverwrite:d,interfaceConfigOverwrite:l,jwt:u,lang:h,roomName:r,devices:f,userInfo:y,appData:{localStorageContent:k},release:w}),this._createIFrame(a,s,p,L),this._transport=new b({backend:new v({postisOptions:{allowedOrigin:new URL(this._url).origin,scope:`jitsi_meet_external_api_${O}`,window:this._frame.contentWindow}})}),Array.isArray(m)&&m.length>0&&this.invite(m),this._tmpE2EEKey=_,this._isLargeVideoVisible=!1,this._isPrejoinVideoVisible=!1,this._numberOfParticipants=0,this._participants={},this._myUserID=void 0,this._onStageParticipant=void 0,this._setupListeners(),O++}_createIFrame(e,t,n,i){const r=`jitsiConferenceFrame${O}`;this._frame=document.createElement("iframe"),this._frame.allow="camera; microphone; display-capture; autoplay; clipboard-write; hid",this._frame.name=r,this._frame.id=r,this._setSize(e,t),this._frame.setAttribute("allowFullScreen","true"),this._frame.style.border=0,i&&(this._frame.sandbox=i),n&&(this._frame.onload=n),this._frame.src=this._url,this._frame=this._parentNode.appendChild(this._frame)}_getAlwaysOnTopResources(){const e=this._frame.contentWindow,t=e.document;let n="";const i=t.querySelector("base");if(i&&i.href)n=i.href;else{const{protocol:t,host:i}=e.location;n=`${t}//${i}`}return C.map((e=>new URL(e,n).href))}_getFormattedDisplayName(e){const{formattedDisplayName:t}=this._participants[e]||{};return t}_getOnStageParticipant(){return this._onStageParticipant}_getLargeVideo(){const e=this.getIFrame();if(this._isLargeVideoVisible&&e&&e.contentWindow&&e.contentWindow.document)return e.contentWindow.document.getElementById("largeVideo")}_getPrejoinVideo(){const e=this.getIFrame();if(this._isPrejoinVideoVisible&&e&&e.contentWindow&&e.contentWindow.document)return e.contentWindow.document.getElementById("prejoinVideo")}_getParticipantVideo(e){const t=this.getIFrame();if(t&&t.contentWindow&&t.contentWindow.document)return void 0===e||e===this._myUserID?t.contentWindow.document.getElementById("localVideo_container"):t.contentWindow.document.querySelector(`#participant_${e} video`)}_setSize(e,t){const n=S(e),i=S(t);void 0!==n&&(this._height=e,this._frame.style.height=n),void 0!==i&&(this._width=t,this._frame.style.width=i)}_setupListeners(){this._transport.on("event",(e=>{let{name:t,...n}=e;const i=n.id;switch(t){case"video-conference-joined":if(void 0!==this._tmpE2EEKey){const e=e=>{const t=[];for(let n=0;n<e.length;n+=2)t.push(parseInt(e.substring(n,n+2),16));return t};this.executeCommand("setMediaEncryptionKey",JSON.stringify({exportedKey:e(this._tmpE2EEKey),index:0})),this._tmpE2EEKey=void 0}this._myUserID=i,this._participants[i]={email:n.email,avatarURL:n.avatarURL};case"participant-joined":this._participants[i]=this._participants[i]||{},this._participants[i].displayName=n.displayName,this._participants[i].formattedDisplayName=n.formattedDisplayName,R(this,1);break;case"participant-left":R(this,-1),delete this._participants[i];break;case"display-name-change":{const e=this._participants[i];e&&(e.displayName=n.displayname,e.formattedDisplayName=n.formattedDisplayName);break}case"email-change":{const e=this._participants[i];e&&(e.email=n.email);break}case"avatar-changed":{const e=this._participants[i];e&&(e.avatarURL=n.avatarURL);break}case"on-stage-participant-changed":this._onStageParticipant=i,this.emit("largeVideoChanged");break;case"large-video-visibility-changed":this._isLargeVideoVisible=n.isVisible,this.emit("largeVideoChanged");break;case"prejoin-screen-loaded":this._participants[i]={displayName:n.displayName,formattedDisplayName:n.formattedDisplayName};break;case"on-prejoin-video-changed":this._isPrejoinVideoVisible=n.isVisible,this.emit("prejoinVideoChanged");break;case"video-conference-left":R(this,-1),delete this._participants[this._myUserID];break;case"video-quality-changed":this._videoQuality=n.videoQuality;break;case"breakout-rooms-updated":this.updateNumberOfParticipants(n.rooms);break;case"local-storage-changed":return o.setItem("jitsiLocalStorage",n.localStorageContent),!0}const r=x[t];return!!r&&(this.emit(r,n),!0)}))}updateNumberOfParticipants(e){if(!e||!Object.keys(e).length)return;const t=Object.keys(e).reduce(((t,n)=>{var i;return null!==(i=e[n])&&void 0!==i&&i.participants?Object.keys(e[n].participants).length+t:t}),0);this._numberOfParticipants=t}async getRoomsInfo(){return this._transport.sendRequest({name:"rooms-info"})}isP2pActive(){return this._transport.sendRequest({name:"get-p2p-status"})}addEventListener(e,t){this.on(e,t)}addEventListeners(e){for(const t in e)this.addEventListener(t,e[t])}captureLargeVideoScreenshot(){return this._transport.sendRequest({name:"capture-largevideo-screenshot"})}dispose(){this.emit("_willDispose"),this._transport.dispose(),this.removeAllListeners(),this._frame&&this._frame.parentNode&&this._frame.parentNode.removeChild(this._frame)}executeCommand(e){if(e in E){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this._transport.sendEvent({data:n,name:E[e]})}else console.error("Not supported command name.")}executeCommands(e){for(const t in e)this.executeCommand(t,e[t])}getAvailableDevices(){return function(e){return e.sendRequest({type:"devices",name:"getAvailableDevices"}).catch((e=>(L.error(e),{})))}(this._transport)}getContentSharingParticipants(){return this._transport.sendRequest({name:"get-content-sharing-participants"})}getCurrentDevices(){return function(e){return e.sendRequest({type:"devices",name:"getCurrentDevices"}).catch((e=>(L.error(e),{})))}(this._transport)}getCustomAvatarBackgrounds(){return this._transport.sendRequest({name:"get-custom-avatar-backgrounds"})}getLivestreamUrl(){return this._transport.sendRequest({name:"get-livestream-url"})}getParticipantsInfo(){const e=Object.keys(this._participants),t=Object.values(this._participants);return t.forEach(((t,n)=>{t.participantId=e[n]})),t}getVideoQuality(){return this._videoQuality}isAudioAvailable(){return this._transport.sendRequest({name:"is-audio-available"})}isDeviceChangeAvailable(e){return function(e,t){return e.sendRequest({deviceType:t,type:"devices",name:"isDeviceChangeAvailable"})}(this._transport,e)}isDeviceListAvailable(){return function(e){return e.sendRequest({type:"devices",name:"isDeviceListAvailable"})}(this._transport)}isMultipleAudioInputSupported(){return function(e){return e.sendRequest({type:"devices",name:"isMultipleAudioInputSupported"})}(this._transport)}invite(e){return Array.isArray(e)&&0!==e.length?this._transport.sendRequest({name:"invite",invitees:e}):Promise.reject(new TypeError("Invalid Argument"))}isAudioMuted(){return this._transport.sendRequest({name:"is-audio-muted"})}isAudioDisabled(){return this._transport.sendRequest({name:"is-audio-disabled"})}isModerationOn(e){return this._transport.sendRequest({name:"is-moderation-on",mediaType:e})}isParticipantForceMuted(e,t){return this._transport.sendRequest({name:"is-participant-force-muted",participantId:e,mediaType:t})}isParticipantsPaneOpen(){return this._transport.sendRequest({name:"is-participants-pane-open"})}isSharingScreen(){return this._transport.sendRequest({name:"is-sharing-screen"})}isStartSilent(){return this._transport.sendRequest({name:"is-start-silent"})}getAvatarURL(e){const{avatarURL:t}=this._participants[e]||{};return t}getDeploymentInfo(){return this._transport.sendRequest({name:"deployment-info"})}getDisplayName(e){const{displayName:t}=this._participants[e]||{};return t}getEmail(e){const{email:t}=this._participants[e]||{};return t}getIFrame(){return this._frame}getNumberOfParticipants(){return this._numberOfParticipants}isVideoAvailable(){return this._transport.sendRequest({name:"is-video-available"})}isVideoMuted(){return this._transport.sendRequest({name:"is-video-muted"})}listBreakoutRooms(){return this._transport.sendRequest({name:"list-breakout-rooms"})}pinParticipant(e,t){this.executeCommand("pinParticipant",e,t)}removeEventListener(e){this.removeAllListeners(e)}removeEventListeners(e){e.forEach((e=>this.removeEventListener(e)))}resizeLargeVideo(e,t){e<=this._width&&t<=this._height&&this.executeCommand("resizeLargeVideo",e,t)}sendProxyConnectionEvent(e){this._transport.sendEvent({data:[e],name:"proxy-connection-event"})}setAudioInputDevice(e,t){return function(e,t,n){return k(e,{id:n,kind:"audioinput",label:t})}(this._transport,e,t)}setAudioOutputDevice(e,t){return function(e,t,n){return k(e,{id:n,kind:"audiooutput",label:t})}(this._transport,e,t)}setLargeVideoParticipant(e,t){this.executeCommand("setLargeVideoParticipant",e,t)}setVideoInputDevice(e,t){return function(e,t,n){return k(e,{id:n,kind:"videoinput",label:t})}(this._transport,e,t)}startRecording(e){this.executeCommand("startRecording",e)}stopRecording(e){this.executeCommand("stopRecording",e)}toggleE2EE(e){this.executeCommand("toggleE2EE",e)}async setMediaEncryptionKey(e){const{key:t,index:n}=e;if(t){const e=await crypto.subtle.exportKey("raw",t);this.executeCommand("setMediaEncryptionKey",JSON.stringify({exportedKey:Array.from(new Uint8Array(e)),index:n}))}else this.executeCommand("setMediaEncryptionKey",JSON.stringify({exportedKey:!1,index:n}))}}},872:(e,t,n)=>{e.exports=n(537).default},571:(e,t)=>{"use strict";const n=/"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*\:/;t.parse=function(e){const i="object"==typeof(arguments.length<=1?void 0:arguments[1])&&(arguments.length<=1?void 0:arguments[1]),r=(arguments.length<=1?0:arguments.length-1)>1||!i?arguments.length<=1?void 0:arguments[1]:void 0,s=(arguments.length<=1?0:arguments.length-1)>1&&(arguments.length<=2?void 0:arguments[2])||i||{},o=JSON.parse(e,r);return"ignore"===s.protoAction?o:o&&"object"==typeof o&&e.match(n)?(t.scan(o,s),o):o},t.scan=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[e];for(;n.length;){const e=n;n=[];for(const i of e){if(Object.prototype.hasOwnProperty.call(i,"__proto__")){if("remove"!==t.protoAction)throw new SyntaxError("Object contains forbidden prototype property");delete i.__proto__}for(const e in i){const t=i[e];t&&"object"==typeof t&&n.push(i[e])}}}},t.safeParse=function(e,n){try{return t.parse(e,n)}catch(e){return null}}},369:(e,t,n)=>{var i=n(7);function r(e,t){this.logStorage=e,this.stringifyObjects=!(!t||!t.stringifyObjects)&&t.stringifyObjects,this.storeInterval=t&&t.storeInterval?t.storeInterval:3e4,this.maxEntryLength=t&&t.maxEntryLength?t.maxEntryLength:1e4,Object.keys(i.levels).forEach(function(e){this[i.levels[e]]=function(){this._log.apply(this,arguments)}.bind(this,e)}.bind(this)),this.storeLogsIntervalID=null,this.queue=[],this.totalLen=0,this.outputCache=[]}r.prototype.stringify=function(e){try{return JSON.stringify(e)}catch(e){return"[object with circular refs?]"}},r.prototype.formatLogMessage=function(e){for(var t="",n=1,r=arguments.length;n<r;n++){var s=arguments[n];!this.stringifyObjects&&e!==i.levels.ERROR||"object"!=typeof s||(s=this.stringify(s)),t+=s,n!==r-1&&(t+=" ")}return t.length?t:null},r.prototype._log=function(){var e=arguments[1],t=this.formatLogMessage.apply(this,arguments);if(t){var n=this.queue[this.queue.length-1],i=n&&n.text;i===t?n.count+=1:(this.queue.push({text:t,timestamp:e,count:1}),this.totalLen+=t.length)}this.totalLen>=this.maxEntryLength&&this._flush(!0,!0)},r.prototype.start=function(){this._reschedulePublishInterval()},r.prototype._reschedulePublishInterval=function(){this.storeLogsIntervalID&&(window.clearTimeout(this.storeLogsIntervalID),this.storeLogsIntervalID=null),this.storeLogsIntervalID=window.setTimeout(this._flush.bind(this,!1,!0),this.storeInterval)},r.prototype.flush=function(){this._flush(!1,!0)},r.prototype._flush=function(e,t){this.totalLen>0&&(this.logStorage.isReady()||e)&&(this.logStorage.isReady()?(this.outputCache.length&&(this.outputCache.forEach(function(e){this.logStorage.storeLogs(e)}.bind(this)),this.outputCache=[]),this.logStorage.storeLogs(this.queue)):this.outputCache.push(this.queue),this.queue=[],this.totalLen=0),t&&this._reschedulePublishInterval()},r.prototype.stop=function(){this._flush(!1,!1)},e.exports=r},7:e=>{var t={trace:0,debug:1,info:2,log:3,warn:4,error:5};o.consoleTransport=console;var n=[o.consoleTransport];o.addGlobalTransport=function(e){-1===n.indexOf(e)&&n.push(e)},o.removeGlobalTransport=function(e){var t=n.indexOf(e);-1!==t&&n.splice(t,1)};var i={};function r(){var e={methodName:"",fileLocation:"",line:null,column:null},t=new Error,n=t.stack?t.stack.split("\n"):[];if(!n||n.length<3)return e;var i=null;return n[3]&&(i=n[3].match(/\s*at\s*(.+?)\s*\((\S*)\s*:(\d*)\s*:(\d*)\)/)),!i||i.length<=4?(0===n[2].indexOf("log@")?e.methodName=n[3].substr(0,n[3].indexOf("@")):e.methodName=n[2].substr(0,n[2].indexOf("@")),e):(e.methodName=i[1],e.fileLocation=i[2],e.line=i[3],e.column=i[4],e)}function s(){var e=arguments[0],s=arguments[1],o=Array.prototype.slice.call(arguments,2);if(!(t[s]<e.level))for(var a=!(e.options.disableCallerInfo||i.disableCallerInfo)&&r(),c=n.concat(e.transports),d=0;d<c.length;d++){var l=c[d],u=l[s];if(u&&"function"==typeof u){var h=[];h.push((new Date).toISOString()),e.id&&h.push("["+e.id+"]"),a&&a.methodName.length>1&&h.push("<"+a.methodName+">: ");var p=h.concat(o);u.bind(l).apply(l,p)}}}function o(e,n,i,r){this.id=n,this.options=r||{},this.transports=i,this.transports||(this.transports=[]),this.level=t[e];for(var o=Object.keys(t),a=0;a<o.length;a++)this[o[a]]=s.bind(null,this,o[a])}o.setGlobalOptions=function(e){i=e||{}},o.prototype.setLevel=function(e){this.level=t[e]},e.exports=o,o.levels={TRACE:"trace",DEBUG:"debug",INFO:"info",LOG:"log",WARN:"warn",ERROR:"error"}},860:(e,t,n)=>{var i=n(7),r=n(369),s={},o=[],a=i.levels.TRACE;e.exports={addGlobalTransport:function(e){i.addGlobalTransport(e)},removeGlobalTransport:function(e){i.removeGlobalTransport(e)},setGlobalOptions:function(e){i.setGlobalOptions(e)},getLogger:function(e,t,n){var r=new i(a,e,t,n);return e?(s[e]=s[e]||[],s[e].push(r)):o.push(r),r},setLogLevelById:function(e,t){for(var n=t?s[t]||[]:o,i=0;i<n.length;i++)n[i].setLevel(e)},setLogLevel:function(e){a=e;for(var t=0;t<o.length;t++)o[t].setLevel(e);for(var n in s){var i=s[n]||[];for(t=0;t<i.length;t++)i[t].setLevel(e)}},levels:i.levels,LogCollector:r}},620:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,i=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,s),i(n)}function s(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}m(e,t,s,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,{once:!0})}(e,r)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var o=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function c(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function d(e,t,n,i){var r,s,o,d;if(a(n),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),s=e._events),o=s[t]),void 0===o)o=s[t]=n,++e._eventsCount;else if("function"==typeof o?o=s[t]=i?[n,o]:[o,n]:i?o.unshift(n):o.push(n),(r=c(e))>0&&o.length>r&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=o.length,d=l,console&&console.warn&&console.warn(d)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function u(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=l.bind(i);return r.listener=n,i.wrapFn=r,r}function h(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(r):g(r,r.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function g(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e[i];return n}function m(e,t,n,i){if("function"==typeof e.on)i.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function r(s){i.once&&e.removeEventListener(t,r),n(s)}))}}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,s=this._events;if(void 0!==s)r=r&&void 0===s.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=s[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var d=c.length,l=g(c,d);for(n=0;n<d;++n)i(l[n],this,t)}return!0},s.prototype.addListener=function(e,t){return d(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return d(this,e,t,!0)},s.prototype.once=function(e,t){return a(t),this.on(e,u(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,u(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,i,r,s,o;if(a(t),void 0===(i=this._events))return this;if(void 0===(n=i[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(r=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){o=n[s].listener,r=s;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,r),1===n.length&&(i[e]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",e,o||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n,i;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var r,s=Object.keys(n);for(i=0;i<s.length;++i)"removeListener"!==(r=s[i])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var s=t[i]={exports:{}};return e[i](s,s.exports,n),s.exports}return n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n(872)})()));
+//# sourceMappingURL=external_api.min.js.map
diff --git a/public/admin/components/echarts/jitsi_meet.js b/public/admin/components/echarts/jitsi_meet.js
new file mode 100644
index 0000000..c57a2fb
--- /dev/null
+++ b/public/admin/components/echarts/jitsi_meet.js
@@ -0,0 +1,135 @@
+// import JitsiMeetJS from "@lyno/lib-jitsi-meet";
+
+export class JitsiMeet {
+    // 榛樿閰嶇疆锛岃繖閲岃嚦浜庢湇鍔$閰嶇疆鏈夊叧涓庨儴缃睻RL鏃犲叧锛屽浐瀹氫笉鍙�
+    options = {
+        hosts: {
+            domain: "meet.jitsi",
+            muc: "muc.meet.jitsi",
+        },
+    };
+    connection = null;
+    roomName = "default_root_name";
+    userName = "default_user_name";
+    password = undefined;
+    room = null;
+    // 杩欓噷鏄墍鏈夊鎴风锛屽寘鍚煶瑙嗛娴佷笌瀹㈡埛绔悕绉�
+    clients = {};
+    // 杩欓噷鏄湰鍦伴煶瑙嗛娴佷笌鍚嶇О
+    selfMedia = {};
+
+
+    constructor(serviceUrl, userName) {
+        this.userName = userName === undefined ? this.userName : userName;
+        // 鍒濆鍖栧簱
+        JitsiMeetJS.init();
+        // 璁剧疆鏃ュ織绾у埆锛屽鏋滄槸INFO鎺у埗鍙颁笢瑗夸細寰堝
+        JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
+        // 閰嶇疆閲岄潰鍙湁serviceUrl闇�瑕佹寚瀹�
+        this.options.serviceUrl = serviceUrl
+    }
+
+    initLocalMedia = () => {
+        // 鐢变簬鍒涘缓createLocalTracks鏈潵灏辨槸寮傛鍑芥暟锛屾墍浠ュ垵濮嬪寲灏辫繖鏍峰共
+        return new Promise((resolve) => {
+            // 鍒涘缓鏈湴闊宠棰戞祦
+            JitsiMeetJS.createLocalTracks({ devices: ['audio', 'video'] }).then((tracks) => {
+                // 鑾峰緱娴佹暟缁勪箣鍚庢瀯寤簊elfMedia灞炴��
+                for (let i = 0; i < tracks.length; i++) {
+                    if (tracks[i].type === "video") {
+                        this.selfMedia.videoTrack = tracks[i];
+                    }
+                    if (tracks[i].type === "audio") {
+                        this.selfMedia.audioTrack = tracks[i];
+                    }
+                    this.selfMedia.name = this.userName;
+                }
+                // 灏唖elfMedia杩斿洖
+                resolve(this.selfMedia);
+            });
+        })
+    }
+
+    joinRoom(roomName, password) {
+        // 鍒涘缓杩炴帴瀵硅薄
+        this.connection = new JitsiMeetJS.JitsiConnection(null, null, this.options);
+        // 褰撹繛鎺ユ垚鍔熺殑鏃跺�欑粦瀹氬埌鍑芥暟onConnectionSuccess涓�
+        this.connection.addEventListener(
+            JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED,
+            this.onConnectionSuccess);
+        // 宸ュ叿鍐呬竴浜涘叏灞�鍙傛暟
+        this.roomName = roomName === undefined ? this.roomName : roomName;
+        this.password = password;
+        // 杩炴帴鍒版湇鍔″櫒
+        this.connection.connect();
+    }
+    leveRoom = () => {
+        // 绔嬪埢鎴块棿
+        this.room.leave();
+        // 鏂紑杩炴帴锛圥S锛氳繖閲屽簲璇ュ湪杩炴帴鎼炰釜鏂紑鐨勫洖璋冿紝灏嗚�佽繛鎺ョ洃鍚粰鍙栨秷鎺夛級
+        this.connection.disconnect();
+        // 绉婚櫎鎵�鏈夊弬涓庝汉
+        this.clients = {};
+        // 鍙戦�佹洿鏂癡UE鏁版嵁鎸囦护
+        this.onClientsUpdate();
+    }
+
+    onClientsUpdate = () => {
+
+    }
+    // 涓�鏃﹁繛鎺ュ埌鏈嶅姟鍣ㄤ箣鍚庝究璋冪敤
+    onConnectionSuccess = () => {
+        // 鍒涘缓涓�涓埧闂达紝濡傛灉鎴块棿鍚嶇浉鍚屽垯浼氭墍鏈変汉杩涘叆鍚屼竴涓埧闂�
+        this.room = this.connection.initJitsiConference(this.roomName, { connection: this.connection });
+        // 褰撴埧闂村唴琚坊鍔犱竴涓獟浣撴祦鏃讹紙鍙兘鏄煶棰戜篃鍙兘鏄棰戯級
+        this.room.on(JitsiMeetJS.events.conference.TRACK_ADDED, (track) => {
+            if (track.isLocal()) {
+                return;
+            }
+            // 杩欎釜participantId鍙互鐞嗚В涓哄鎴风鐨処D锛屽涓�涓鎴风鑰岃█鏄敮涓�鐨�
+            let participantId = track.getParticipantId();
+            if (this.clients[participantId] === undefined) {
+                this.clients[participantId] = {};
+            }
+            // 瑙嗛娴�
+            if (track.type === "video") {
+                this.clients[participantId].videoTrack = track;
+            }
+            // 闊抽娴�
+            if (track.type === "audio") {
+                this.clients[participantId].audioTrack = track;
+            }
+            // 杩欓噷鍒ゆ柇鏄惁闇�瑕佹洿鏂帮紝涓�鏃︿竴涓鎴风鑷韩鐨勯煶瑙嗛娴佷笉瀹屾暣鍒欎笉鏇存柊
+            let needUpdate = true;
+            for (let key in this.clients) {
+                if (this.clients[key].videoTrack && this.clients[key].audioTrack) {
+                    continue;
+                }
+                needUpdate = false;
+            }
+            if (needUpdate) {
+                // 杩欓噷鏄幏鍙栧鎴风鐨勫悕绉帮紝鍙兘璇磋棌鐨勬湁鐐规繁
+                this.clients[participantId].name = this.room.room.members[`xxxx@muc.meet.jitsi/${participantId}`].nick;
+                this.onClientsUpdate();
+            }
+        })
+        // 鏈夊鎴风鏂紑杩炴帴浜�
+        this.room.on(JitsiMeetJS.events.conference.USER_LEFT, (id) => {
+            // 鍒犻櫎瀵瑰簲鐨勫鎴风锛孷UE浼氱Щ闄ゅ搴旂殑闊宠棰戞祦
+            delete this.clients[id];
+            this.onClientsUpdate();
+        })
+        // 璁剧疆鑷繁鐨勫悕瀛�
+        this.room.setDisplayName(this.userName);
+        // 灏嗘湰鍦伴煶瑙嗛娴佹坊鍔犳埧闂翠箣涓�
+        if (this.selfMedia.videoTrack) {
+            this.room.addTrack(this.selfMedia.videoTrack);
+        }
+        if (this.selfMedia.audioTrack) {
+            this.room.addTrack(this.selfMedia.audioTrack);
+        }
+        // 鍔犲叆鎴块棿
+        this.room.join(this.password);
+    }
+}
+
diff --git a/public/index.html b/public/index.html
index 75840b4..78506b3 100644
--- a/public/index.html
+++ b/public/index.html
@@ -21,6 +21,7 @@
       width: 100%;
     }
   </style>
+    <script src='./admin/components/echarts/jitsi.js'></script>
 
   <script src='./admin/components/echarts/echarts.min.js'></script>
   <script src='./admin/components/echarts/theme/macarons.js'></script>
diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue
index b25ccb6..60cbb87 100644
--- a/src/layout/components/Sidebar/Logo.vue
+++ b/src/layout/components/Sidebar/Logo.vue
@@ -24,7 +24,7 @@
   },
   data () {
     return {
-      title: '闈掔緤鍦ㄧ嚎鑰冭瘯绠$悊绯荤粺'
+      title: '鍦ㄧ嚎鑰冭瘯绠$悊绯荤粺'
     }
   }
 }
diff --git a/src/router.js b/src/router.js
index b4da040..4bd71f1 100644
--- a/src/router.js
+++ b/src/router.js
@@ -261,6 +261,24 @@
     ]
   },
   {
+    path: '/meeting',
+    component: Layout,
+    name: 'MeetingPage',
+    meta: {
+      title: '鍦ㄧ嚎浼氳',
+      icon: 'log'
+    },
+    alwaysShow: true,
+    children: [
+      {
+        path: 'meeting/index',
+        component: () => import('@/views/meeting/list'),
+        name: 'MeetingUserPage',
+        meta: { title: '鍦ㄧ嚎浼氳', noCache: true }
+      }
+    ]
+  },
+  {
     path: '/profile',
     component: Layout,
     hidden: true,
diff --git a/src/utils/jitsi.js b/src/utils/jitsi.js
new file mode 100644
index 0000000..0c3d944
--- /dev/null
+++ b/src/utils/jitsi.js
@@ -0,0 +1,2 @@
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.JitsiMeetExternalAPI=t():e.JitsiMeetExternalAPI=t()}(self,(()=>(()=>{var e={537:(e,t,n)=>{"use strict";n.d(t,{default:()=>j});var i=n(620),r=n.n(i);class s extends i{constructor(){var e,t;super(...arguments),t={},(e="_storage")in this?Object.defineProperty(this,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):this[e]=t}clear(){this._storage={}}get length(){return Object.keys(this._storage).length}getItem(e){return this._storage[e]}setItem(e,t){this._storage[e]=t}removeItem(e){delete this._storage[e]}key(e){const t=Object.keys(this._storage);if(!(t.length<=e))return t[e]}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(0===e.length)return JSON.stringify(this._storage);const t={...this._storage};return e.forEach((e=>{delete t[e]})),JSON.stringify(t)}}const o=new class extends i{constructor(){super();try{this._storage=window.localStorage,this._localStorageDisabled=!1}catch(e){}this._storage||(console.warn("Local storage is disabled."),this._storage=new s,this._localStorageDisabled=!0)}isLocalStorageDisabled(){return this._localStorageDisabled}clear(){this._storage.clear(),this.emit("changed")}get length(){return this._storage.length}getItem(e){return this._storage.getItem(e)}setItem(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this._storage.setItem(e,t),n||this.emit("changed")}removeItem(e){this._storage.removeItem(e),this.emit("changed")}key(e){return this._storage.key(e)}serialize(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if(this.isLocalStorageDisabled())return this._storage.serialize(e);const t=this._storage.length,n={};for(let i=0;i<t;i++){const t=this._storage.key(i);e.includes(t)||(n[t]=this._storage.getItem(t))}return JSON.stringify(n)}};var a=n(571);const c=["__proto__","constructor","prototype"];var d;!function(e){e[e.PaymentRequired=402]="PaymentRequired"}(d||(d={}));function l(e){const t=new RegExp("^([a-z][a-z0-9\\.\\+-]*:)+","gi"),n=t.exec(e);if(n){let i=n[n.length-1].toLowerCase();"http:"!==i&&"https:"!==i&&(i="https:"),(e=e.substring(t.lastIndex)).startsWith("//")&&(e=i+e)}return e}function u(e={}){const t=[];for(const n in e)try{t.push(`${n}=${encodeURIComponent(JSON.stringify(e[n]))}`)}catch(e){console.warn(`Error encoding ${n}: ${e}`)}return t}function h(e){const t={toString:p};let n,i,r;if(e=e.replace(/\s/g,""),n=new RegExp("^([a-z][a-z0-9\\.\\+-]*:)","gi"),i=n.exec(e),i&&(t.protocol=i[1].toLowerCase(),e=e.substring(n.lastIndex)),n=new RegExp("^(//[^/?#]+)","gi"),i=n.exec(e),i){let r=i[1].substring(2);e=e.substring(n.lastIndex);const s=r.indexOf("@");-1!==s&&(r=r.substring(s+1)),t.host=r;const o=r.lastIndexOf(":");-1!==o&&(t.port=r.substring(o+1),r=r.substring(0,o)),t.hostname=r}if(n=new RegExp("^([^?#]*)","gi"),i=n.exec(e),i&&(r=i[1],e=e.substring(n.lastIndex)),r?r.startsWith("/")||(r=`/${r}`):r="/",t.pathname=r,e.startsWith("?")){let n=e.indexOf("#",1);-1===n&&(n=e.length),t.search=e.substring(0,n),e=e.substring(n)}else t.search="";return t.hash=e.startsWith("#")?e:"",t}function p(e){const{hash:t,host:n,pathname:i,protocol:r,search:s}=e||this;let o="";return r&&(o+=r),n&&(o+=`//${n}`),o+=i||"/",s&&(o+=s),t&&(o+=t),o}function g(e){let t;t=e.serverURL&&e.room?new URL(e.room,e.serverURL).toString():e.room?e.room:e.url||"";const n=h(l(t));if(!n.protocol){let t=e.protocol||e.scheme;t&&(t.endsWith(":")||(t+=":"),n.protocol=t)}let{pathname:i}=n;if(!n.host){const t=e.domain||e.host||e.hostname;if(t){const{host:e,hostname:r,pathname:s,port:o}=h(l(`org.jitsi.meet://${t}`));e&&(n.host=e,n.hostname=r,n.port=o),"/"===i&&"/"!==s&&(i=s)}}const r=e.roomName||e.room;!r||!n.pathname.endsWith("/")&&n.pathname.endsWith(`/${r}`)||(i.endsWith("/")||(i+="/"),i+=r),n.pathname=i;const{jwt:s,lang:o,release:a}=e,c=new URLSearchParams(n.search);s&&c.set("jwt",s);const{defaultLanguage:d}=e.configOverwrite||{};(o||d)&&c.set("lang",o||d),a&&c.set("release",a);const p=c.toString();p&&(n.search=`?${p}`);let{hash:g}=n;for(const t of["config","interfaceConfig","devices","userInfo","appData"]){const n=u(e[`${t}Overwrite`]||e[t]||e[`${t}Override`]);if(n.length){let e=`${t}.${n.join(`&${t}.`)}`;g.length?e=`&${e}`:g="#",g+=e}}return n.hash=g,n.toString()||void 0}const m={window:window.opener||window.parent},f="message";class v{constructor(){let{postisOptions:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.postis=function(e){var t,n=e.scope,i=e.window,r=e.windowForEventListening||window,s=e.allowedOrigin,o={},a=[],c={},d=!1,l="__ready__",u=function(e){var t;try{t=JSON.parse(e.data)}catch(e){return}if((!s||e.origin===s)&&t&&t.postis&&t.scope===n){var i=o[t.method];if(i)for(var r=0;r<i.length;r++)i[r].call(null,t.params);else c[t.method]=c[t.method]||[],c[t.method].push(t.params)}};r.addEventListener("message",u,!1);var h={listen:function(e,t){o[e]=o[e]||[],o[e].push(t);var n=c[e];if(n)for(var i=o[e],r=0;r<i.length;r++)for(var s=0;s<n.length;s++)i[r].call(null,n[s]);delete c[e]},send:function(e){var t=e.method;(d||e.method===l)&&i&&"function"==typeof i.postMessage?i.postMessage(JSON.stringify({postis:!0,scope:n,method:t,params:e.params}),"*"):a.push(e)},ready:function(e){d?e():setTimeout((function(){h.ready(e)}),50)},destroy:function(e){clearInterval(t),d=!1,r&&"function"==typeof r.removeEventListener&&r.removeEventListener("message",u),e&&e()}},p=+new Date+Math.random()+"";return t=setInterval((function(){h.send({method:l,params:p})}),50),h.listen(l,(function(e){if(e===p){clearInterval(t),d=!0;for(var n=0;n<a.length;n++)h.send(a[n]);a=[]}else h.send({method:l,params:e})})),h}({...m,...e}),this._receiveCallback=()=>{},this.postis.listen(f,(e=>this._receiveCallback(e)))}dispose(){this.postis.destroy()}send(e){this.postis.send({method:f,params:e})}setReceiveCallback(e){this._receiveCallback=e}}const y="request",_="response";class b{constructor(){let{backend:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._listeners=new Map,this._requestID=0,this._responseHandlers=new Map,this._unprocessedMessages=new Set,this.addListener=this.on,e&&this.setBackend(e)}_disposeBackend(){this._backend&&(this._backend.dispose(),this._backend=null)}_onMessageReceived(e){if(e.type===_){const t=this._responseHandlers.get(e.id);t&&(t(e),this._responseHandlers.delete(e.id))}else e.type===y?this.emit("request",e.data,((t,n)=>{this._backend.send({type:_,error:n,id:e.id,result:t})})):this.emit("event",e.data)}dispose(){this._responseHandlers.clear(),this._unprocessedMessages.clear(),this.removeAllListeners(),this._disposeBackend()}emit(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];const r=this._listeners.get(e);let s=!1;return r&&r.size&&r.forEach((e=>{s=e(...n)||s})),s||this._unprocessedMessages.add(n),s}on(e,t){let n=this._listeners.get(e);return n||(n=new Set,this._listeners.set(e,n)),n.add(t),this._unprocessedMessages.forEach((e=>{t(...e)&&this._unprocessedMessages.delete(e)})),this}removeAllListeners(e){return e?this._listeners.delete(e):this._listeners.clear(),this}removeListener(e,t){const n=this._listeners.get(e);return n&&n.delete(t),this}sendEvent(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._backend&&this._backend.send({type:"event",data:e})}sendRequest(e){if(!this._backend)return Promise.reject(new Error("No transport backend defined!"));this._requestID++;const t=this._requestID;return new Promise(((n,i)=>{this._responseHandlers.set(t,(e=>{let{error:t,result:r}=e;void 0!==r?n(r):i(void 0!==t?t:new Error("Unexpected response format!"))})),this._backend.send({type:y,data:e,id:t})}))}setBackend(e){this._disposeBackend(),this._backend=e,this._backend.setReceiveCallback(this._onMessageReceived.bind(this))}}(function(e,t=!1,n="hash"){"string"==typeof e&&(e=new URL(e));const i="search"===n?e.search:e.hash,r={},s=i?.substr(1).split("&")||[];if("hash"===n&&1===s.length){const e=s[0];if(e.startsWith("/")&&1===e.split("&").length)return r}return s.forEach((e=>{const n=e.split("="),i=n[0];if(!i||i.split(".").some((e=>c.includes(e))))return;let s;try{if(s=n[1],!t){const e=decodeURIComponent(s).replace(/\\&/,"&");s="undefined"===e?void 0:a.parse(e)}}catch(e){return void function(e,t=""){console.error(t,e),window.onerror?.(t,void 0,void 0,void 0,e)}(e,`Failed to parse URL parameter value: ${String(s)}`)}r[i]=s})),r})(window.location).jitsi_meet_external_api_id;(window.JitsiMeetJS||(window.JitsiMeetJS={}),window.JitsiMeetJS.app||(window.JitsiMeetJS.app={}),window.JitsiMeetJS.app).setExternalTransportBackend=e=>undefined.setBackend(e);var w=n(860);const L=n.n(w)().getLogger("modules/API/external/functions.js");function k(e,t){return e.sendRequest({type:"devices",name:"setDevice",device:t})}const C=["css/all.css","libs/alwaysontop.min.js"],E={addBreakoutRoom:"add-breakout-room",answerKnockingParticipant:"answer-knocking-participant",approveVideo:"approve-video",askToUnmute:"ask-to-unmute",autoAssignToBreakoutRooms:"auto-assign-to-breakout-rooms",avatarUrl:"avatar-url",cancelPrivateChat:"cancel-private-chat",closeBreakoutRoom:"close-breakout-room",displayName:"display-name",endConference:"end-conference",email:"email",grantModerator:"grant-moderator",hangup:"video-hangup",hideNotification:"hide-notification",initiatePrivateChat:"initiate-private-chat",joinBreakoutRoom:"join-breakout-room",localSubject:"local-subject",kickParticipant:"kick-participant",muteEveryone:"mute-everyone",overwriteConfig:"overwrite-config",overwriteNames:"overwrite-names",password:"password",pinParticipant:"pin-participant",rejectParticipant:"reject-participant",removeBreakoutRoom:"remove-breakout-room",resizeFilmStrip:"resize-film-strip",resizeLargeVideo:"resize-large-video",sendChatMessage:"send-chat-message",sendEndpointTextMessage:"send-endpoint-text-message",sendParticipantToRoom:"send-participant-to-room",sendTones:"send-tones",setAssumedBandwidthBps:"set-assumed-bandwidth-bps",setFollowMe:"set-follow-me",setLargeVideoParticipant:"set-large-video-participant",setMediaEncryptionKey:"set-media-encryption-key",setNoiseSuppressionEnabled:"set-noise-suppression-enabled",setParticipantVolume:"set-participant-volume",setSubtitles:"set-subtitles",setTileView:"set-tile-view",setVideoQuality:"set-video-quality",showNotification:"show-notification",startRecording:"start-recording",startShareVideo:"start-share-video",stopRecording:"stop-recording",stopShareVideo:"stop-share-video",subject:"subject",submitFeedback:"submit-feedback",toggleAudio:"toggle-audio",toggleCamera:"toggle-camera",toggleCameraMirror:"toggle-camera-mirror",toggleChat:"toggle-chat",toggleE2EE:"toggle-e2ee",toggleFilmStrip:"toggle-film-strip",toggleLobby:"toggle-lobby",toggleModeration:"toggle-moderation",toggleNoiseSuppression:"toggle-noise-suppression",toggleParticipantsPane:"toggle-participants-pane",toggleRaiseHand:"toggle-raise-hand",toggleShareScreen:"toggle-share-screen",toggleSubtitles:"toggle-subtitles",toggleTileView:"toggle-tile-view",toggleVirtualBackgroundDialog:"toggle-virtual-background",toggleVideo:"toggle-video",toggleWhiteboard:"toggle-whiteboard"},x={"avatar-changed":"avatarChanged","audio-availability-changed":"audioAvailabilityChanged","audio-mute-status-changed":"audioMuteStatusChanged","audio-or-video-sharing-toggled":"audioOrVideoSharingToggled","breakout-rooms-updated":"breakoutRoomsUpdated","browser-support":"browserSupport","camera-error":"cameraError","chat-updated":"chatUpdated","content-sharing-participants-changed":"contentSharingParticipantsChanged","data-channel-closed":"dataChannelClosed","data-channel-opened":"dataChannelOpened","device-list-changed":"deviceListChanged","display-name-change":"displayNameChange","email-change":"emailChange","error-occurred":"errorOccurred","endpoint-text-message-received":"endpointTextMessageReceived","face-landmark-detected":"faceLandmarkDetected","feedback-submitted":"feedbackSubmitted","feedback-prompt-displayed":"feedbackPromptDisplayed","filmstrip-display-changed":"filmstripDisplayChanged","incoming-message":"incomingMessage","knocking-participant":"knockingParticipant",log:"log","mic-error":"micError","moderation-participant-approved":"moderationParticipantApproved","moderation-participant-rejected":"moderationParticipantRejected","moderation-status-changed":"moderationStatusChanged","mouse-enter":"mouseEnter","mouse-leave":"mouseLeave","mouse-move":"mouseMove","notification-triggered":"notificationTriggered","outgoing-message":"outgoingMessage","p2p-status-changed":"p2pStatusChanged","participant-joined":"participantJoined","participant-kicked-out":"participantKickedOut","participant-left":"participantLeft","participant-role-changed":"participantRoleChanged","participants-pane-toggled":"participantsPaneToggled","password-required":"passwordRequired","peer-connection-failure":"peerConnectionFailure","prejoin-screen-loaded":"prejoinScreenLoaded","proxy-connection-event":"proxyConnectionEvent","raise-hand-updated":"raiseHandUpdated","recording-link-available":"recordingLinkAvailable","recording-status-changed":"recordingStatusChanged","participant-menu-button-clicked":"participantMenuButtonClick","video-ready-to-close":"readyToClose","video-conference-joined":"videoConferenceJoined","video-conference-left":"videoConferenceLeft","video-availability-changed":"videoAvailabilityChanged","video-mute-status-changed":"videoMuteStatusChanged","video-quality-changed":"videoQualityChanged","screen-sharing-status-changed":"screenSharingStatusChanged","dominant-speaker-changed":"dominantSpeakerChanged","subject-change":"subjectChange","suspend-detected":"suspendDetected","tile-view-changed":"tileViewChanged","toolbar-button-clicked":"toolbarButtonClicked","whiteboard-status-changed":"whiteboardStatusChanged"};let O=0;function R(e,t){e._numberOfParticipants+=t}function S(e){let t;return"string"==typeof e&&null!==String(e).match(/([0-9]*\.?[0-9]+)(em|pt|px|%)$/)?t=e:"number"==typeof e&&(t=`${e}px`),t}class j extends(r()){constructor(e){super();for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];const{roomName:r="",width:s="100%",height:a="100%",parentNode:c=document.body,configOverwrite:d={},interfaceConfigOverwrite:l={},jwt:u,lang:h,onload:p,invitees:m,devices:f,userInfo:y,e2eeKey:_,release:w,sandbox:L=""}=function(e){if(!e.length)return{};switch(typeof e[0]){case"string":case"undefined":{const[t,n,i,r,s,o,a,c,d]=e;return{roomName:t,width:n,height:i,parentNode:r,configOverwrite:s,interfaceConfigOverwrite:o,jwt:a,onload:c,lang:d}}case"object":return e[0];default:throw new Error("Can't parse the arguments!")}}(n),k=o.getItem("jitsiLocalStorage");this._parentNode=c,this._url=function(e){return g({...arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},url:`https://${e}/#jitsi_meet_external_api_id=${O}`})}(e,{configOverwrite:d,interfaceConfigOverwrite:l,jwt:u,lang:h,roomName:r,devices:f,userInfo:y,appData:{localStorageContent:k},release:w}),this._createIFrame(a,s,p,L),this._transport=new b({backend:new v({postisOptions:{allowedOrigin:new URL(this._url).origin,scope:`jitsi_meet_external_api_${O}`,window:this._frame.contentWindow}})}),Array.isArray(m)&&m.length>0&&this.invite(m),this._tmpE2EEKey=_,this._isLargeVideoVisible=!1,this._isPrejoinVideoVisible=!1,this._numberOfParticipants=0,this._participants={},this._myUserID=void 0,this._onStageParticipant=void 0,this._setupListeners(),O++}_createIFrame(e,t,n,i){const r=`jitsiConferenceFrame${O}`;this._frame=document.createElement("iframe"),this._frame.allow="camera; microphone; display-capture; autoplay; clipboard-write; hid",this._frame.name=r,this._frame.id=r,this._setSize(e,t),this._frame.setAttribute("allowFullScreen","true"),this._frame.style.border=0,i&&(this._frame.sandbox=i),n&&(this._frame.onload=n),this._frame.src=this._url,this._frame=this._parentNode.appendChild(this._frame)}_getAlwaysOnTopResources(){const e=this._frame.contentWindow,t=e.document;let n="";const i=t.querySelector("base");if(i&&i.href)n=i.href;else{const{protocol:t,host:i}=e.location;n=`${t}//${i}`}return C.map((e=>new URL(e,n).href))}_getFormattedDisplayName(e){const{formattedDisplayName:t}=this._participants[e]||{};return t}_getOnStageParticipant(){return this._onStageParticipant}_getLargeVideo(){const e=this.getIFrame();if(this._isLargeVideoVisible&&e&&e.contentWindow&&e.contentWindow.document)return e.contentWindow.document.getElementById("largeVideo")}_getPrejoinVideo(){const e=this.getIFrame();if(this._isPrejoinVideoVisible&&e&&e.contentWindow&&e.contentWindow.document)return e.contentWindow.document.getElementById("prejoinVideo")}_getParticipantVideo(e){const t=this.getIFrame();if(t&&t.contentWindow&&t.contentWindow.document)return void 0===e||e===this._myUserID?t.contentWindow.document.getElementById("localVideo_container"):t.contentWindow.document.querySelector(`#participant_${e} video`)}_setSize(e,t){const n=S(e),i=S(t);void 0!==n&&(this._height=e,this._frame.style.height=n),void 0!==i&&(this._width=t,this._frame.style.width=i)}_setupListeners(){this._transport.on("event",(e=>{let{name:t,...n}=e;const i=n.id;switch(t){case"video-conference-joined":if(void 0!==this._tmpE2EEKey){const e=e=>{const t=[];for(let n=0;n<e.length;n+=2)t.push(parseInt(e.substring(n,n+2),16));return t};this.executeCommand("setMediaEncryptionKey",JSON.stringify({exportedKey:e(this._tmpE2EEKey),index:0})),this._tmpE2EEKey=void 0}this._myUserID=i,this._participants[i]={email:n.email,avatarURL:n.avatarURL};case"participant-joined":this._participants[i]=this._participants[i]||{},this._participants[i].displayName=n.displayName,this._participants[i].formattedDisplayName=n.formattedDisplayName,R(this,1);break;case"participant-left":R(this,-1),delete this._participants[i];break;case"display-name-change":{const e=this._participants[i];e&&(e.displayName=n.displayname,e.formattedDisplayName=n.formattedDisplayName);break}case"email-change":{const e=this._participants[i];e&&(e.email=n.email);break}case"avatar-changed":{const e=this._participants[i];e&&(e.avatarURL=n.avatarURL);break}case"on-stage-participant-changed":this._onStageParticipant=i,this.emit("largeVideoChanged");break;case"large-video-visibility-changed":this._isLargeVideoVisible=n.isVisible,this.emit("largeVideoChanged");break;case"prejoin-screen-loaded":this._participants[i]={displayName:n.displayName,formattedDisplayName:n.formattedDisplayName};break;case"on-prejoin-video-changed":this._isPrejoinVideoVisible=n.isVisible,this.emit("prejoinVideoChanged");break;case"video-conference-left":R(this,-1),delete this._participants[this._myUserID];break;case"video-quality-changed":this._videoQuality=n.videoQuality;break;case"breakout-rooms-updated":this.updateNumberOfParticipants(n.rooms);break;case"local-storage-changed":return o.setItem("jitsiLocalStorage",n.localStorageContent),!0}const r=x[t];return!!r&&(this.emit(r,n),!0)}))}updateNumberOfParticipants(e){if(!e||!Object.keys(e).length)return;const t=Object.keys(e).reduce(((t,n)=>{var i;return null!==(i=e[n])&&void 0!==i&&i.participants?Object.keys(e[n].participants).length+t:t}),0);this._numberOfParticipants=t}async getRoomsInfo(){return this._transport.sendRequest({name:"rooms-info"})}isP2pActive(){return this._transport.sendRequest({name:"get-p2p-status"})}addEventListener(e,t){this.on(e,t)}addEventListeners(e){for(const t in e)this.addEventListener(t,e[t])}captureLargeVideoScreenshot(){return this._transport.sendRequest({name:"capture-largevideo-screenshot"})}dispose(){this.emit("_willDispose"),this._transport.dispose(),this.removeAllListeners(),this._frame&&this._frame.parentNode&&this._frame.parentNode.removeChild(this._frame)}executeCommand(e){if(e in E){for(var t=arguments.length,n=new Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];this._transport.sendEvent({data:n,name:E[e]})}else console.error("Not supported command name.")}executeCommands(e){for(const t in e)this.executeCommand(t,e[t])}getAvailableDevices(){return function(e){return e.sendRequest({type:"devices",name:"getAvailableDevices"}).catch((e=>(L.error(e),{})))}(this._transport)}getContentSharingParticipants(){return this._transport.sendRequest({name:"get-content-sharing-participants"})}getCurrentDevices(){return function(e){return e.sendRequest({type:"devices",name:"getCurrentDevices"}).catch((e=>(L.error(e),{})))}(this._transport)}getCustomAvatarBackgrounds(){return this._transport.sendRequest({name:"get-custom-avatar-backgrounds"})}getLivestreamUrl(){return this._transport.sendRequest({name:"get-livestream-url"})}getParticipantsInfo(){const e=Object.keys(this._participants),t=Object.values(this._participants);return t.forEach(((t,n)=>{t.participantId=e[n]})),t}getVideoQuality(){return this._videoQuality}isAudioAvailable(){return this._transport.sendRequest({name:"is-audio-available"})}isDeviceChangeAvailable(e){return function(e,t){return e.sendRequest({deviceType:t,type:"devices",name:"isDeviceChangeAvailable"})}(this._transport,e)}isDeviceListAvailable(){return function(e){return e.sendRequest({type:"devices",name:"isDeviceListAvailable"})}(this._transport)}isMultipleAudioInputSupported(){return function(e){return e.sendRequest({type:"devices",name:"isMultipleAudioInputSupported"})}(this._transport)}invite(e){return Array.isArray(e)&&0!==e.length?this._transport.sendRequest({name:"invite",invitees:e}):Promise.reject(new TypeError("Invalid Argument"))}isAudioMuted(){return this._transport.sendRequest({name:"is-audio-muted"})}isAudioDisabled(){return this._transport.sendRequest({name:"is-audio-disabled"})}isModerationOn(e){return this._transport.sendRequest({name:"is-moderation-on",mediaType:e})}isParticipantForceMuted(e,t){return this._transport.sendRequest({name:"is-participant-force-muted",participantId:e,mediaType:t})}isParticipantsPaneOpen(){return this._transport.sendRequest({name:"is-participants-pane-open"})}isSharingScreen(){return this._transport.sendRequest({name:"is-sharing-screen"})}isStartSilent(){return this._transport.sendRequest({name:"is-start-silent"})}getAvatarURL(e){const{avatarURL:t}=this._participants[e]||{};return t}getDeploymentInfo(){return this._transport.sendRequest({name:"deployment-info"})}getDisplayName(e){const{displayName:t}=this._participants[e]||{};return t}getEmail(e){const{email:t}=this._participants[e]||{};return t}getIFrame(){return this._frame}getNumberOfParticipants(){return this._numberOfParticipants}isVideoAvailable(){return this._transport.sendRequest({name:"is-video-available"})}isVideoMuted(){return this._transport.sendRequest({name:"is-video-muted"})}listBreakoutRooms(){return this._transport.sendRequest({name:"list-breakout-rooms"})}pinParticipant(e,t){this.executeCommand("pinParticipant",e,t)}removeEventListener(e){this.removeAllListeners(e)}removeEventListeners(e){e.forEach((e=>this.removeEventListener(e)))}resizeLargeVideo(e,t){e<=this._width&&t<=this._height&&this.executeCommand("resizeLargeVideo",e,t)}sendProxyConnectionEvent(e){this._transport.sendEvent({data:[e],name:"proxy-connection-event"})}setAudioInputDevice(e,t){return function(e,t,n){return k(e,{id:n,kind:"audioinput",label:t})}(this._transport,e,t)}setAudioOutputDevice(e,t){return function(e,t,n){return k(e,{id:n,kind:"audiooutput",label:t})}(this._transport,e,t)}setLargeVideoParticipant(e,t){this.executeCommand("setLargeVideoParticipant",e,t)}setVideoInputDevice(e,t){return function(e,t,n){return k(e,{id:n,kind:"videoinput",label:t})}(this._transport,e,t)}startRecording(e){this.executeCommand("startRecording",e)}stopRecording(e){this.executeCommand("stopRecording",e)}toggleE2EE(e){this.executeCommand("toggleE2EE",e)}async setMediaEncryptionKey(e){const{key:t,index:n}=e;if(t){const e=await crypto.subtle.exportKey("raw",t);this.executeCommand("setMediaEncryptionKey",JSON.stringify({exportedKey:Array.from(new Uint8Array(e)),index:n}))}else this.executeCommand("setMediaEncryptionKey",JSON.stringify({exportedKey:!1,index:n}))}}},872:(e,t,n)=>{e.exports=n(537).default},571:(e,t)=>{"use strict";const n=/"(?:_|\\u005[Ff])(?:_|\\u005[Ff])(?:p|\\u0070)(?:r|\\u0072)(?:o|\\u006[Ff])(?:t|\\u0074)(?:o|\\u006[Ff])(?:_|\\u005[Ff])(?:_|\\u005[Ff])"\s*\:/;t.parse=function(e){const i="object"==typeof(arguments.length<=1?void 0:arguments[1])&&(arguments.length<=1?void 0:arguments[1]),r=(arguments.length<=1?0:arguments.length-1)>1||!i?arguments.length<=1?void 0:arguments[1]:void 0,s=(arguments.length<=1?0:arguments.length-1)>1&&(arguments.length<=2?void 0:arguments[2])||i||{},o=JSON.parse(e,r);return"ignore"===s.protoAction?o:o&&"object"==typeof o&&e.match(n)?(t.scan(o,s),o):o},t.scan=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=[e];for(;n.length;){const e=n;n=[];for(const i of e){if(Object.prototype.hasOwnProperty.call(i,"__proto__")){if("remove"!==t.protoAction)throw new SyntaxError("Object contains forbidden prototype property");delete i.__proto__}for(const e in i){const t=i[e];t&&"object"==typeof t&&n.push(i[e])}}}},t.safeParse=function(e,n){try{return t.parse(e,n)}catch(e){return null}}},369:(e,t,n)=>{var i=n(7);function r(e,t){this.logStorage=e,this.stringifyObjects=!(!t||!t.stringifyObjects)&&t.stringifyObjects,this.storeInterval=t&&t.storeInterval?t.storeInterval:3e4,this.maxEntryLength=t&&t.maxEntryLength?t.maxEntryLength:1e4,Object.keys(i.levels).forEach(function(e){this[i.levels[e]]=function(){this._log.apply(this,arguments)}.bind(this,e)}.bind(this)),this.storeLogsIntervalID=null,this.queue=[],this.totalLen=0,this.outputCache=[]}r.prototype.stringify=function(e){try{return JSON.stringify(e)}catch(e){return"[object with circular refs?]"}},r.prototype.formatLogMessage=function(e){for(var t="",n=1,r=arguments.length;n<r;n++){var s=arguments[n];!this.stringifyObjects&&e!==i.levels.ERROR||"object"!=typeof s||(s=this.stringify(s)),t+=s,n!==r-1&&(t+=" ")}return t.length?t:null},r.prototype._log=function(){var e=arguments[1],t=this.formatLogMessage.apply(this,arguments);if(t){var n=this.queue[this.queue.length-1],i=n&&n.text;i===t?n.count+=1:(this.queue.push({text:t,timestamp:e,count:1}),this.totalLen+=t.length)}this.totalLen>=this.maxEntryLength&&this._flush(!0,!0)},r.prototype.start=function(){this._reschedulePublishInterval()},r.prototype._reschedulePublishInterval=function(){this.storeLogsIntervalID&&(window.clearTimeout(this.storeLogsIntervalID),this.storeLogsIntervalID=null),this.storeLogsIntervalID=window.setTimeout(this._flush.bind(this,!1,!0),this.storeInterval)},r.prototype.flush=function(){this._flush(!1,!0)},r.prototype._flush=function(e,t){this.totalLen>0&&(this.logStorage.isReady()||e)&&(this.logStorage.isReady()?(this.outputCache.length&&(this.outputCache.forEach(function(e){this.logStorage.storeLogs(e)}.bind(this)),this.outputCache=[]),this.logStorage.storeLogs(this.queue)):this.outputCache.push(this.queue),this.queue=[],this.totalLen=0),t&&this._reschedulePublishInterval()},r.prototype.stop=function(){this._flush(!1,!1)},e.exports=r},7:e=>{var t={trace:0,debug:1,info:2,log:3,warn:4,error:5};o.consoleTransport=console;var n=[o.consoleTransport];o.addGlobalTransport=function(e){-1===n.indexOf(e)&&n.push(e)},o.removeGlobalTransport=function(e){var t=n.indexOf(e);-1!==t&&n.splice(t,1)};var i={};function r(){var e={methodName:"",fileLocation:"",line:null,column:null},t=new Error,n=t.stack?t.stack.split("\n"):[];if(!n||n.length<3)return e;var i=null;return n[3]&&(i=n[3].match(/\s*at\s*(.+?)\s*\((\S*)\s*:(\d*)\s*:(\d*)\)/)),!i||i.length<=4?(0===n[2].indexOf("log@")?e.methodName=n[3].substr(0,n[3].indexOf("@")):e.methodName=n[2].substr(0,n[2].indexOf("@")),e):(e.methodName=i[1],e.fileLocation=i[2],e.line=i[3],e.column=i[4],e)}function s(){var e=arguments[0],s=arguments[1],o=Array.prototype.slice.call(arguments,2);if(!(t[s]<e.level))for(var a=!(e.options.disableCallerInfo||i.disableCallerInfo)&&r(),c=n.concat(e.transports),d=0;d<c.length;d++){var l=c[d],u=l[s];if(u&&"function"==typeof u){var h=[];h.push((new Date).toISOString()),e.id&&h.push("["+e.id+"]"),a&&a.methodName.length>1&&h.push("<"+a.methodName+">: ");var p=h.concat(o);u.bind(l).apply(l,p)}}}function o(e,n,i,r){this.id=n,this.options=r||{},this.transports=i,this.transports||(this.transports=[]),this.level=t[e];for(var o=Object.keys(t),a=0;a<o.length;a++)this[o[a]]=s.bind(null,this,o[a])}o.setGlobalOptions=function(e){i=e||{}},o.prototype.setLevel=function(e){this.level=t[e]},e.exports=o,o.levels={TRACE:"trace",DEBUG:"debug",INFO:"info",LOG:"log",WARN:"warn",ERROR:"error"}},860:(e,t,n)=>{var i=n(7),r=n(369),s={},o=[],a=i.levels.TRACE;e.exports={addGlobalTransport:function(e){i.addGlobalTransport(e)},removeGlobalTransport:function(e){i.removeGlobalTransport(e)},setGlobalOptions:function(e){i.setGlobalOptions(e)},getLogger:function(e,t,n){var r=new i(a,e,t,n);return e?(s[e]=s[e]||[],s[e].push(r)):o.push(r),r},setLogLevelById:function(e,t){for(var n=t?s[t]||[]:o,i=0;i<n.length;i++)n[i].setLevel(e)},setLogLevel:function(e){a=e;for(var t=0;t<o.length;t++)o[t].setLevel(e);for(var n in s){var i=s[n]||[];for(t=0;t<i.length;t++)i[t].setLevel(e)}},levels:i.levels,LogCollector:r}},620:e=>{"use strict";var t,n="object"==typeof Reflect?Reflect:null,i=n&&"function"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&"function"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(n,i){function r(n){e.removeListener(t,s),i(n)}function s(){"function"==typeof e.removeListener&&e.removeListener("error",r),n([].slice.call(arguments))}m(e,t,s,{once:!0}),"error"!==t&&function(e,t,n){"function"==typeof e.on&&m(e,"error",t,{once:!0})}(e,r)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var o=10;function a(e){if("function"!=typeof e)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function c(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function d(e,t,n,i){var r,s,o,d;if(a(n),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,n.listener?n.listener:n),s=e._events),o=s[t]),void 0===o)o=s[t]=n,++e._eventsCount;else if("function"==typeof o?o=s[t]=i?[n,o]:[o,n]:i?o.unshift(n):o.push(n),(r=c(e))>0&&o.length>r&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=e,l.type=t,l.count=o.length,d=l,console&&console.warn&&console.warn(d)}return e}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function u(e,t,n){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},r=l.bind(i);return r.listener=n,i.wrapFn=r,r}function h(e,t,n){var i=e._events;if(void 0===i)return[];var r=i[t];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(r):g(r,r.length)}function p(e){var t=this._events;if(void 0!==t){var n=t[e];if("function"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function g(e,t){for(var n=new Array(t),i=0;i<t;++i)n[i]=e[i];return n}function m(e,t,n,i){if("function"==typeof e.on)i.once?e.once(t,n):e.on(t,n);else{if("function"!=typeof e.addEventListener)throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function r(s){i.once&&e.removeEventListener(t,r),n(s)}))}}Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||r(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return c(this)},s.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var r="error"===e,s=this._events;if(void 0!==s)r=r&&void 0===s.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=s[e];if(void 0===c)return!1;if("function"==typeof c)i(c,this,t);else{var d=c.length,l=g(c,d);for(n=0;n<d;++n)i(l[n],this,t)}return!0},s.prototype.addListener=function(e,t){return d(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return d(this,e,t,!0)},s.prototype.once=function(e,t){return a(t),this.on(e,u(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,u(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,i,r,s,o;if(a(t),void 0===(i=this._events))return this;if(void 0===(n=i[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,n.listener||t));else if("function"!=typeof n){for(r=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){o=n[s].listener,r=s;break}if(r<0)return this;0===r?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,r),1===n.length&&(i[e]=n[0]),void 0!==i.removeListener&&this.emit("removeListener",e,o||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n,i;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var r,s=Object.keys(n);for(i=0;i<s.length;++i)"removeListener"!==(r=s[i])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):p.call(e,t)},s.prototype.listenerCount=p,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}}},t={};function n(i){var r=t[i];if(void 0!==r)return r.exports;var s=t[i]={exports:{}};return e[i](s,s.exports,n),s.exports}return n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var i in t)n.o(t,i)&&!n.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n(872)})()));
+//# sourceMappingURL=external_api.min.js.map
diff --git a/src/utils/jitsi_meet.js b/src/utils/jitsi_meet.js
new file mode 100644
index 0000000..a375663
--- /dev/null
+++ b/src/utils/jitsi_meet.js
@@ -0,0 +1,137 @@
+import JitsiMeetJS from "@lyno/lib-jitsi-meet/lib-jitsi-meet.min.js";
+
+export class JitsiMeet {
+    // 榛樿閰嶇疆锛岃繖閲岃嚦浜庢湇鍔$閰嶇疆鏈夊叧涓庨儴缃睻RL鏃犲叧锛屽浐瀹氫笉鍙�
+
+    options = {
+        hosts: {
+            domain: "meet.jitsi",
+            muc: "muc.meet.jitsi",
+        },
+    };
+    connection = null;
+    roomName = "default_root_name";
+    userName = "default_user_name";
+    password = undefined;
+    room = null;
+    // 杩欓噷鏄墍鏈夊鎴风锛屽寘鍚煶瑙嗛娴佷笌瀹㈡埛绔悕绉�
+    clients = {};
+    // 杩欓噷鏄湰鍦伴煶瑙嗛娴佷笌鍚嶇О
+    selfMedia = {};
+
+
+    constructor(serviceUrl, userName) {
+        this.userName = userName === undefined ? this.userName : userName;
+        // 鍒濆鍖栧簱
+        JitsiMeetJS.init();
+        // 璁剧疆鏃ュ織绾у埆锛屽鏋滄槸INFO鎺у埗鍙颁笢瑗夸細寰堝
+        JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
+        // 閰嶇疆閲岄潰鍙湁serviceUrl闇�瑕佹寚瀹�
+        this.options.serviceUrl = serviceUrl
+    }
+
+    initLocalMedia = () => {
+        // 鐢变簬鍒涘缓createLocalTracks鏈潵灏辨槸寮傛鍑芥暟锛屾墍浠ュ垵濮嬪寲灏辫繖鏍峰共
+        return new Promise((resolve) => {
+            // 鍒涘缓鏈湴闊宠棰戞祦
+            JitsiMeetJS.createLocalTracks({ devices: ['audio', 'video'] }).then((tracks) => {
+                // 鑾峰緱娴佹暟缁勪箣鍚庢瀯寤簊elfMedia灞炴��
+                for (let i = 0; i < tracks.length; i++) {
+                    if (tracks[i].type === "video") {
+                        this.selfMedia.videoTrack = tracks[i];
+                    }
+                    if (tracks[i].type === "audio") {
+                        this.selfMedia.audioTrack = tracks[i];
+                    }
+                    this.selfMedia.name = this.userName;
+                }
+                // 灏唖elfMedia杩斿洖
+                resolve(this.selfMedia);
+            });
+        })
+    }
+
+    joinRoom(roomName, password) {
+        // 鍒涘缓杩炴帴瀵硅薄
+        this.connection = new JitsiMeetJS.JitsiConnection(null, null, this.options);
+        // 褰撹繛鎺ユ垚鍔熺殑鏃跺�欑粦瀹氬埌鍑芥暟onConnectionSuccess涓�
+        this.connection.addEventListener(
+            JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED,
+            this.onConnectionSuccess);
+        // 宸ュ叿鍐呬竴浜涘叏灞�鍙傛暟
+        this.roomName = roomName === undefined ? this.roomName : roomName;
+        this.password = password;
+        // 杩炴帴鍒版湇鍔″櫒
+        this.connection.connect();
+    }
+    leveRoom = () => {
+        // 绔嬪埢鎴块棿
+        this.room.leave();
+        // 鏂紑杩炴帴锛圥S锛氳繖閲屽簲璇ュ湪杩炴帴鎼炰釜鏂紑鐨勫洖璋冿紝灏嗚�佽繛鎺ョ洃鍚粰鍙栨秷鎺夛級
+        this.connection.disconnect();
+        // 绉婚櫎鎵�鏈夊弬涓庝汉
+        this.clients = {};
+        // 鍙戦�佹洿鏂癡UE鏁版嵁鎸囦护
+        this.onClientsUpdate();
+    }
+
+    onClientsUpdate = () => {
+
+    }
+    // 涓�鏃﹁繛鎺ュ埌鏈嶅姟鍣ㄤ箣鍚庝究璋冪敤
+    onConnectionSuccess = () => {
+      console.log('閾炬帴鎴愬姛锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛燂紵锛�')
+        // 鍒涘缓涓�涓埧闂达紝濡傛灉鎴块棿鍚嶇浉鍚屽垯浼氭墍鏈変汉杩涘叆鍚屼竴涓埧闂�
+        this.room = this.connection.initJitsiConference(this.roomName, { connection: this.connection });
+        // 褰撴埧闂村唴琚坊鍔犱竴涓獟浣撴祦鏃讹紙鍙兘鏄煶棰戜篃鍙兘鏄棰戯級
+        this.room.on(JitsiMeetJS.events.conference.TRACK_ADDED, (track) => {
+            if (track.isLocal()) {
+                return;
+            }
+            // 杩欎釜participantId鍙互鐞嗚В涓哄鎴风鐨処D锛屽涓�涓鎴风鑰岃█鏄敮涓�鐨�
+            let participantId = track.getParticipantId();
+            if (this.clients[participantId] === undefined) {
+                this.clients[participantId] = {};
+            }
+            // 瑙嗛娴�
+            if (track.type === "video") {
+                this.clients[participantId].videoTrack = track;
+            }
+            // 闊抽娴�
+            if (track.type === "audio") {
+                this.clients[participantId].audioTrack = track;
+            }
+            // 杩欓噷鍒ゆ柇鏄惁闇�瑕佹洿鏂帮紝涓�鏃︿竴涓鎴风鑷韩鐨勯煶瑙嗛娴佷笉瀹屾暣鍒欎笉鏇存柊
+            let needUpdate = true;
+            for (let key in this.clients) {
+                if (this.clients[key].videoTrack && this.clients[key].audioTrack) {
+                    continue;
+                }
+                needUpdate = false;
+            }
+            if (needUpdate) {
+                // 杩欓噷鏄幏鍙栧鎴风鐨勫悕绉帮紝鍙兘璇磋棌鐨勬湁鐐规繁
+                this.clients[participantId].name = this.room.room.members[`xxxx@muc.meet.jitsi/${participantId}`].nick;
+                this.onClientsUpdate();
+            }
+        })
+        // 鏈夊鎴风鏂紑杩炴帴浜�
+        this.room.on(JitsiMeetJS.events.conference.USER_LEFT, (id) => {
+            // 鍒犻櫎瀵瑰簲鐨勫鎴风锛孷UE浼氱Щ闄ゅ搴旂殑闊宠棰戞祦
+            delete this.clients[id];
+            this.onClientsUpdate();
+        })
+        // 璁剧疆鑷繁鐨勫悕瀛�
+        this.room.setDisplayName(this.userName);
+        // 灏嗘湰鍦伴煶瑙嗛娴佹坊鍔犳埧闂翠箣涓�
+        if (this.selfMedia.videoTrack) {
+            this.room.addTrack(this.selfMedia.videoTrack);
+        }
+        if (this.selfMedia.audioTrack) {
+            this.room.addTrack(this.selfMedia.audioTrack);
+        }
+        // 鍔犲叆鎴块棿
+        this.room.join(this.password);
+    }
+}
+
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index c3b3a26..f4f3561 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -3,7 +3,7 @@
     <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
 
       <div class="title-container">
-        <h3 class="title">闈掔緤鍦ㄧ嚎鑰冭瘯绠$悊绯荤粺</h3>
+        <h3 class="title">鍦ㄧ嚎鑰冭瘯绠$悊绯荤粺</h3>
       </div>
 
       <el-form-item prop="userName">
diff --git a/src/views/meeting/list.vue b/src/views/meeting/list.vue
new file mode 100644
index 0000000..c41befd
--- /dev/null
+++ b/src/views/meeting/list.vue
@@ -0,0 +1,239 @@
+<template>
+<!--  <div ref="jitsiContainer" style="height: 100vh; width: 100%;"></div>-->
+  <div style="display: flex">
+    <div id="meet"></div>
+<!--    <el-button @click="Connect">鍔犲叆</el-button>-->
+    <div>
+      <el-form :model="queryParam" ref="queryForm" :inline="true">
+        <el-form-item label="鐢ㄦ埛鍚嶏細">
+          <el-input v-model="queryParam.userName"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="submitForm">鏌ヨ</el-button>
+            <el-button type="primary" @click="addMeeting">娣诲姞鑷充細璁�</el-button>
+        </el-form-item>
+      </el-form>
+
+      <el-table v-loading="listLoading" :data="tableData" border fit highlight-current-row style="width: 100%">
+        <el-table-column
+          type="selection"
+          width="55">
+        </el-table-column>
+        <el-table-column prop="userName" label="鐢ㄦ埛鍚�"/>
+        <el-table-column prop="realName" label="鐪熷疄濮撳悕" />
+        <el-table-column prop="userLevel" label="瀛︾骇"  :formatter="levelFormatter"/>
+<!--        <el-table-column prop="sex" label="鎬у埆" width="60px;" :formatter="sexFormatter"/>-->
+      </el-table>
+      <pagination v-show="total>0" :total="total" :page.sync="queryParam.pageIndex" :limit.sync="queryParam.pageSize"
+                  @pagination="search"/>
+    </div>
+  </div>
+
+</template>
+
+<script>
+import { JitsiMeet } from "@/utils/jitsi_meet";
+import $ from 'jquery';
+import Pagination from '@/components/Pagination/index.vue'
+import userApi from '@/api/user'
+import { mapGetters, mapState } from 'vuex'
+window.$ = $;
+export default {
+  components: { Pagination },
+  // props: {
+  //   domain: {
+  //     type: String,
+  //     default: '124.222.18.104:8443'
+  //   },
+  //   options: {
+  //     type: Object,
+  //     default: () => ({}),
+  //   },
+  // },
+  data () {
+    return {
+      userInfo:null,
+      queryParam: {
+        userName: '',
+        role: 1,
+        pageIndex: 1,
+        pageSize: 10
+      },
+      listLoading: true,
+      tableData: [],
+      total: 0,
+
+      jitsiApi: null,
+      userName:'寮犱笁',
+      roomName:'鏉庡洓',
+      meet: {
+        clients: [],
+      },
+    };
+  },
+  async mounted () {
+    this.search()
+    await userApi.getCurrentUser().then(re => {
+      this.userInfo = re.response
+      this.roomName = re.response.userName
+      this.userName = re.response.userName
+      console.log(this.userInfo, this.roomName, this.userName)
+    })
+    // JitsiMeetJS.init();
+    // const options = {
+    //   serviceUrl:'https://124.222.18.104:8443/http-bind',
+    //   hosts: {
+    //     domain: 'https://124.222.18.104:8443/',
+    //     muc: 'conference.meet.jit.si',
+    //   },
+    //   bosh: 'https://124.222.18.104:8443/http-bind',
+    //   useStunTurn: true
+    // }
+    const domain = '124.222.18.104:8443';
+    const options = {
+      roomName: this.roomName,
+      width: 1200,
+      height: 800,
+      parentNode: document.querySelector('#meet'),
+      configOverwrite: {
+        disableSsl: true
+      },
+      userInfo: { displayName: this.userName }
+    };
+    // const connection = new JitsiMeetJS.JitsiConnection('123', null, options);
+
+    const api = new JitsiMeetExternalAPI(domain, options);
+
+    // this.meet = new JitsiMeet(
+    //   //杩欓噷鏄湇鍔$鐨刋MPP鍦板潃
+    //   "https://124.222.18.104:8443/http-bind",
+    //   this.name
+    // );
+    api.addEventListeners({
+      participantJoined: handleParticipantJoined,
+      participantLeft: handleParticipantLeft
+    });
+
+    function handleParticipantJoined (event) {
+      console.log(`Participant joined: ${event.id}`);
+      console.log(event)
+    }
+
+    function handleParticipantLeft (event) {
+      console.log(`Participant left: ${event.id}`);
+      console.log(event)
+    }
+
+    // function onConnectionSuccess() {
+    //   console.log("onConnectionSuccess", arguments);
+    // }
+    // function onConnectionFailed() {
+    //   console.log("onConnectionFailed", arguments);
+    // }
+    // function disconnect() {
+    //   console.log("disconnect", arguments);
+    // }
+    //
+    // connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
+    // connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
+    // connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
+    //
+    // connection.connect(undefined);
+
+    // this.loadScript(`https://${this.domain}/external_api.js`, () => {
+    //   if (!window.JitsiMeetExternalAPI) throw new Error('Jitsi Meet External API not loaded');
+    //   this.embedJitsiWidget();
+    // });
+  },
+  beforeDestroy () {
+    // this.Disconnect()
+    this.removeJitsiWidget();
+
+  },
+  computed: {
+    ...mapGetters('enumItem', [
+      'enumFormat'
+    ]),
+    ...mapState('enumItem', {
+      sexEnum: state => state.user.sexEnum,
+      statusEnum: state => state.user.statusEnum,
+      statusTag: state => state.user.statusTag,
+      statusBtn: state => state.user.statusBtn,
+      levelEnum: state => state.user.levelEnum
+    })
+  },
+  created () {
+    let _this = this
+
+
+  },
+  methods: {
+    submitForm () {
+      this.queryParam.pageIndex = 1
+      this.search()
+    },
+    addMeeting(){
+      this.$message.success('娣诲姞鎴愬姛')
+    },
+    search () {
+      this.listLoading = true
+      userApi.getUserPageList(this.queryParam).then(data => {
+        const re = data.response
+        this.tableData = re.list
+        this.total = re.total
+        this.queryParam.pageIndex = re.pageNum
+        this.listLoading = false
+      })
+    },
+    levelFormatter  (row, column, cellValue, index) {
+      return this.enumFormat(this.levelEnum, cellValue)
+    },
+    sexFormatter  (row, column, cellValue, index) {
+      return this.enumFormat(this.sexEnum, cellValue)
+    },
+    statusFormatter (status) {
+      return this.enumFormat(this.statusEnum, status)
+    },
+    statusTagFormatter (status) {
+      return this.enumFormat(this.statusTag, status)
+    },
+    statusBtnFormatter (status) {
+      return this.enumFormat(this.statusBtn, status)
+    },
+    Connect() {
+      // 鍔犲叆鍚嶇О涓簒xx鐨勬埧闂达紙杩欎竴姝ヤ細鍒涘缓杩炴帴涓庢埧闂村璞★級
+      this.meet.joinRoom("xxxx");
+      // this.beInRoom = true;
+    },
+    // Disconnect() {
+    //   // 绂诲紑鎴块棿锛堣繖涓�姝ヤ細鏂紑杩炴帴锛�
+    //   this.meet.leveRoom();
+    //   // this.beInRoom = false;
+    // },
+    loadScript (src, cb) {
+      const scriptEl = document.createElement('script');
+      scriptEl.src = src;
+      scriptEl.async = 1;
+      document.querySelector('head').appendChild(scriptEl);
+      scriptEl.addEventListener('load', cb);
+    },
+    embedJitsiWidget () {
+      const options = {
+        ...this.options,
+        parentNode: this.$refs.jitsiContainer,
+      };
+      this.jitsiApi = new window.JitsiMeetExternalAPI(this.domain, options);
+    },
+    executeCommand (command, ...value) {
+      this.jitsiApi.executeCommand(command, ...value);
+    },
+    addEventListener (event, fn) {
+      this.jitsiApi.on(event, fn);
+    },
+    // Misc
+    removeJitsiWidget () {
+      if (this.jitsiApi) this.jitsiApi.dispose();
+    },
+  }
+};
+</script>

--
Gitblit v1.8.0